bpo-42917: Made block stack for frame objects dynamically sizable by tomKPZ · Pull Request #24204 · python/cpython · GitHub
Skip to content

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

Closed
tomKPZ wants to merge 1 commit into
python:mainfrom
tomKPZ:fix-issue-42917
Closed

tomKPZ wants to merge 1 commit into
python:mainfrom
tomKPZ:fix-issue-42917

Conversation

@tomKPZ

@tomKPZ tomKPZ commented Jan 13, 2021

Copy link
Copy Markdown
Contributor

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
Copy Markdown

@markshannon

Copy link
Copy Markdown
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
Copy Markdown

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
Copy Markdown
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

tomKPZ commented Mar 15, 2021

Copy link
Copy Markdown
Contributor Author

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
Copy Markdown
Member

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