[Cython] [cython-users] Re: Can we remove the FastGIL implementation?

da-woods dw-git at d-woods.co.uk
Tue Sep 19 15:53:13 EDT 2023


One more detail - on 0.29.x it becomes a pessimization in Python 3.10 
rather than Python 3.11. So in conclusion

         | Python <3.10        | Python 3.10         | Python 3.11 | 
Python 3.12b2
-----------------------------------------------------------------------------------------
0.29.x  | fast_gil is better  | fast_gil is worse   | fast_gil crashes  
| fast_gil crashes
master  | fast_gil is better  | fast_gil is better  | fast_gil is worse 
| fast_gil is worse (but off by default)



On 19/09/2023 20:38, da-woods wrote:
> I think the detail that was missing is you need to add the `#cython: 
> fast_gil = True` to enable it.
>
> For me:
> Python 3.9 and 3.10 are basically identical (on master)
>
> **test_gil_already_held**
> with fast_gil
> Running the test...
> took 0.175062894821167
> without
> Running the test...
> took 0.10976791381835938
>
> **test_gil_released**
> with fast_gil
> Running the test...
> took 0.583066463470459
> without
> Running the test...
> took 0.5824759006500244
>
> test_gil_already_held is noticably faster with fast_gil.
>
> For Python 3.11:
> I get the crash in 0.29.x if I try to run using fast_gil. No defines 
> are needed to get that...
> On master:
>
> **test_gil_already_held**
> with fast_gil
> Running the test...
> took 0.17254948616027832
> without
> Running the test...
> took 0.10958600044250488
>
> **test_gil_released**
> with fast_gil
> Running the test...
> took 0.5791811943054199
> without
> Running the test...
> took 0.5597968101501465
>
> Note that "without fastgil" is now as fast as "fastgil" used to be. As 
> fastgil is now slower. This is reproducible.
>
> On Python 3.12 on master they're identical by default (which makes 
> sense since I think we disable it). Defining -DCYTHON_FAST_GIL brings 
> us back to roughly the same as 3.11 (i.e. now slower).
>
> So my conclusion is that from 3.11 onwards Python sped up their own 
> GIL handling to about the same as we used to have, and fastgil has 
> turned into a pessimization.
>
> David
>
>
>
>
> On 19/09/2023 11:58, Lisandro Dalcin wrote:
>> Disclaimer: I may be doing something wrong, I did not put a lot of 
>> effort into it.
>> With the microbenchmark that was offered in the GH issue, I see 
>> little difference.
>> Use the attached zip file to reproduce yourself.
>> Change tox.ini to "cython<3" to try 0.29.x.
>> BTW, in the 0.29.x case, I see no compilation error as claimed in the 
>> GH issue.
>>
>> $ ./run.sh
>> CFLAGS=-g0 -Ofast -DCYTHON_FAST_GIL=0
>> Running test_gil_already_held ... took 0.08735537528991699
>> Running test_gil_released     ... took 0.6329536437988281
>> py37: OK ✔ in 3.57 seconds
>> Running test_gil_already_held ... took 0.09007453918457031
>> Running test_gil_released     ... took 0.4598276615142822
>> py38: OK ✔ in 3.19 seconds
>> Running test_gil_already_held ... took 0.10935306549072266
>> Running test_gil_released     ... took 0.4512367248535156
>> py39: OK ✔ in 3.25 seconds
>> Running test_gil_already_held ... took 0.09970474243164062
>> Running test_gil_released     ... took 0.46637773513793945
>> py310: OK ✔ in 3.21 seconds
>> Running test_gil_already_held ... took 0.08569073677062988
>> Running test_gil_released     ... took 0.46811795234680176
>> py311: OK ✔ in 3.22 seconds
>> Running test_gil_already_held ... took 0.15221118927001953
>> Running test_gil_released     ... took 0.2246694564819336
>>   py37: OK (3.57 seconds)
>>   py38: OK (3.19 seconds)
>>   py39: OK (3.25 seconds)
>>   py310: OK (3.21 seconds)
>>   py311: OK (3.22 seconds)
>>   pypy3.9: OK (5.24 seconds)
>>   congratulations :) (21.71 seconds)
>> CFLAGS=-g0 -Ofast -DCYTHON_FAST_GIL=1
>> Running test_gil_already_held ... took 0.08835673332214355
>> Running test_gil_released     ... took 0.6265637874603271
>> py37: OK ✔ in 1.42 seconds
>> Running test_gil_already_held ... took 0.09030938148498535
>> Running test_gil_released     ... took 0.456279993057251
>> py38: OK ✔ in 1.17 seconds
>> Running test_gil_already_held ... took 0.10986089706420898
>> Running test_gil_released     ... took 0.45894527435302734
>> py39: OK ✔ in 1.2 seconds
>> Running test_gil_already_held ... took 0.10107588768005371
>> Running test_gil_released     ... took 0.5052204132080078
>> py310: OK ✔ in 1.21 seconds
>> Running test_gil_already_held ... took 0.08566665649414062
>> Running test_gil_released     ... took 0.4581136703491211
>> py311: OK ✔ in 1.13 seconds
>> Running test_gil_already_held ... took 0.15286779403686523
>> Running test_gil_released     ... took 0.22533607482910156
>>   py37: OK (1.42 seconds)
>>   py38: OK (1.17 seconds)
>>   py39: OK (1.20 seconds)
>>   py310: OK (1.21 seconds)
>>   py311: OK (1.13 seconds)
>>   pypy3.9: OK (1.64 seconds)
>>   congratulations :) (7.81 seconds)
>>
>>
>> On Tue, 19 Sept 2023 at 10:09, Stefan Behnel <stefan_ml at behnel.de> wrote:
>>
>>     Hi,
>>
>>     I've seen reports that Cython's "FastGIL" implementation (which
>>     basically
>>     keeps the GIL state in a thread-local variable) is no longer
>>     faster than
>>     CPython's plain GIL implementation in recent Python 3.x versions.
>>     Potentially even slower. See the report in
>>
>>     https://github.com/cython/cython/issues/5703
>>
>>     It would be helpful to get user feedback on this.
>>
>>     If you have GIL-heavy Cython code, especially with nested
>>     with-nogil/with-gil sections across functions, and a benchmark that
>>     exercises it, could you please run the benchmark with and without
>>     the
>>     feature enabled and report the results?
>>
>>     You can add "-DCYTHON_FAST_GIL=0" to your CFLAGS to disabled it
>>     (and "=1"
>>     to enable it explicitly). It's enabled by default in CPython
>>     3.6-3.11 (but
>>     disabled in Cython 0.29.x on Python 3.11).
>>
>>     Thanks,
>>     Stefan
>>     _______________________________________________
>>     cython-devel mailing list
>>     cython-devel at python.org
>>     https://mail.python.org/mailman/listinfo/cython-devel
>>
>>
>>
>> -- 
>> Lisandro Dalcin
>> ============
>> Senior Research Scientist
>> Extreme Computing Research Center (ECRC)
>> King Abdullah University of Science and Technology (KAUST)
>> http://ecrc.kaust.edu.sa/
>>
>> _______________________________________________
>> cython-devel mailing list
>> cython-devel at python.org
>> https://mail.python.org/mailman/listinfo/cython-devel
>
>
> -- 
>
> ---
> You received this message because you are subscribed to the Google 
> Groups "cython-users" group.
> To unsubscribe from this group and stop receiving emails from it, send 
> an email to cython-users+unsubscribe at googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/cython-users/1b62cca9-7a5d-6bf2-a801-d59ef4a3f553%40d-woods.co.uk 
> <https://groups.google.com/d/msgid/cython-users/1b62cca9-7a5d-6bf2-a801-d59ef4a3f553%40d-woods.co.uk?utm_medium=email&utm_source=footer>.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/cython-devel/attachments/20230919/30ea77ab/attachment-0001.html>


More information about the cython-devel mailing list