GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||
GeezerVison is showing github.com — gh-115999: Add free-threaded specialization for `STORE_SUBSCR` by colesbury · Pull Request #127169 · python/cpython Conversation
|
| // avoid any potentially escaping calls (like PyStackRef_CLOSE) while the | ||
| // object is locked. | ||
| #ifdef Py_GIL_DISABLED | ||
| # define LOCK_OBJECT(op) PyMutex_LockFast(&(_PyObject_CAST(op))->ob_mutex) |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
@mpage, I think this locking pattern will be slightly faster than using critical sections inline in bytecodes.c. The downside is that we will deopt if there's any lock contention, but I think that's an okay tradeoff.
If we decide to go with this pattern, we can update UNPACK_SEQUENCE_LIST to use it.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
That makes sense to me.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@corona10 - I put my name down next to |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
( |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Nice! I left one comment/question inline and there's a compiler warning that we need to fix up.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| // avoid any potentially escaping calls (like PyStackRef_CLOSE) while the | ||
| // object is locked. | ||
| #ifdef Py_GIL_DISABLED | ||
| # define LOCK_OBJECT(op) PyMutex_LockFast(&(_PyObject_CAST(op))->ob_mutex) |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
That makes sense to me.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Race condition with the wrong lock :) Fine, thank you for the work, I've updated the list of issues. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Please add test codes at test_opcache.py
cpython/Lib/test/test_opcache.py
Line 1227 in d24a22e
| class TestSpecializer(TestBase): |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Co-authored-by: Donghee Na <[email protected]>
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
lgtm (except test code :))
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Performance difference is marginal: 1.00x faster (but 99.99% likely to be faster) I think it's worth doing even if the perf is neutral just to minimize divergence with the default (GIL) build. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
pythongh-127518: Fix pystats build after python#127619
…ython#127169) The specialization only depends on the type, so no special thread-safety considerations there. STORE_SUBSCR_LIST_INT needs to lock the list before modifying it. `_PyDict_SetItem_Take2` already internally locks the dictionary using a critical section.
pythongh-127518: Fix pystats build after python#127619
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.