Skip to content

bpo-42917: Made block stack for frame objects dynamically sizable #24204

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

Closed
wants to merge 1 commit into from

Conversation

tomKPZ
Copy link
Contributor

@tomKPZ tomKPZ commented Jan 13, 2021

This removes the hardcoded block stack size of 20 since typical
functions have far less than 20 nested blocks. When running an empty
program, 256 frame objects get created with an old average size of
420.281 bytes. This change reduces the average size to less than
half: 197.000 bytes on x86_64. The goal is not necessarily to reduce
memory usage, but to make it more likely for stack frames to stay in
L1 cache.

In addition, the maximum of 20 blocks is removed. This should make it
easier to write code generators that produce deeply nested code.

https://bugs.python.org/issue42917

@the-knights-who-say-ni
Copy link

Hello, and thanks for your contribution!

I'm a bot set up to make sure that the project can legally accept this contribution by verifying everyone involved has signed the PSF contributor agreement (CLA).

Recognized GitHub username

We couldn't find a bugs.python.org (b.p.o) account corresponding to the following GitHub usernames:

@tomKPZ

This might be simply due to a missing "GitHub Name" entry in one's b.p.o account settings. This is necessary for legal reasons before we can look at this contribution. Please follow the steps outlined in the CPython devguide to rectify this issue.

You can check yourself to see if the CLA has been received.

Thanks again for the contribution, we look forward to reviewing it!

@markshannon
Copy link
Member

It looks like this PR includes a fix for block handling for ASYNC_COMPREHENSION_GENERATOR that should be included even if we reject https://bugs.python.org/issue42917.

Could you put that fix in a separate PR? Thanks.

@github-actions
Copy link

This PR is stale because it has been open for 30 days with no activity.

@github-actions github-actions bot added the stale Stale PR or inactive for long period of time. label Feb 18, 2021
@markshannon
Copy link
Member

@tomKPZ any progress on this?

@github-actions github-actions bot removed the stale Stale PR or inactive for long period of time. label Mar 11, 2021
@tomKPZ
Copy link
Contributor Author

tomKPZ commented Mar 15, 2021

Sorry for the late response. ASYNC_COMPREHENSION_GENERATOR PR uploaded: #24865

Are there any changes I need to make on this PR (besides rebasing)? It would be nice to know if it will be merged or not.

This removes the hardcoded block stack size of 20 since typical
functions have far less than 20 nested blocks.  When running an empty
program, 256 frame objects get created with an old average size of
420.281 bytes.  This change reduces the average size to less than
half: 197.000 bytes on x86_64.  The goal is not necessarily to reduce
memory usage, but to make it more likely for stack frames to stay in
L1 cache.

In addition, the maximum of 20 blocks is removed.  This should make it
easier to write code generators that produce deeply nested code.
@tiran tiran removed their request for review April 17, 2021 21:16
@markshannon
Copy link
Member

This is now obsolete. There is no block stack: #25729

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.

4 participants