Skip to content

bpo-46533: Specialize classmethod and staticmethod #30990

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

markshannon
Copy link
Member

@markshannon markshannon commented Jan 28, 2022

Specializes LOAD_METHOD for classmethods and staticmethods.

Also specializes LOAD_METHOD for non-descriptor attributes. This case is unlikely, but specializing for them is free, so we might as well.

Not much of an improvement on the benchmarks, but only a few of the benchmarks use classmethods or staticmethods.
Deltablue uses them, and shows a 2% speedup.

https://bugs.python.org/issue46533

@markshannon
Copy link
Member Author

Specialization stats without this PR:

 unquickened:    35123394 2.1%
    deferred:   286806907 17.1%
       deopt:      565253 0.0%
         hit:  1328279200 79.0%
        miss:    30252131 1.8%
  success:     1435603
  failure:     4054879
    kind  0:     8437 0.2%
    kind  2:   253054 6.2%
    kind  5:   913690 22.5%
    kind  7:      420 0.0%
    kind  8:     1634 0.0%
    kind  9:    51321 1.3%
    kind 10:    38560 1.0%t
    kind 12:    13843 0.3%
    kind 13:     7182 0.2%
    kind 14:       63 0.0%
    kind 15:  2527184 62.3%
    kind 17:    23373 0.6%
    kind 18:   215971 5.3%
    kind 19:      147 0.0%

With this PR:

unquickened:    34443945 2.1%
    deferred:   270428543 16.2%
       deopt:      523048 0.0%
         hit:  1340254109 80.1%
        miss:    28074205 1.7%
  success:     1378622
  failure:     3782265
    kind  0:     5895 0.2%
    kind  2:   270410 7.1%
    kind  5:   210871 5.6%
    kind  7:      420 0.0%
    kind  8:     1552 0.0%
    kind  9:       22 0.0%
    kind 12:      529 0.0%
    kind 13:     7182 0.2%
    kind 14:       63 0.0%
    kind 15:  3195610 84.5%
    kind 17:    21870 0.6%
    kind 18:    67588 1.8%
    kind 19:      147 0.0%
    kind 20:      106 0.0%

Only a 1% increase in hits, which suggests that we might be optimizing the wrong thing, or doing this incorrectly.
The old numbers for "expected error" (kind 5) were implausibly high, including things that weren't errors. I suspect that that even at 5.6% this is still erroneous.

I'm going to close this for now, and make a PR to fix up the stats first.

Then we can specialize for whatever kind is top. Currently, That appears to be "is attr" (kind 15), but I suspect those numbers may also be wrong.

@markshannon markshannon closed this Feb 2, 2022
@markshannon markshannon deleted the specialize-classmethod-staticmethod branch September 26, 2023 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants