I ran the Python test suite to compare macros versus static inline
functions (using PR 29728). I built Python with gcc -O3, LTO and PGO
optimizations.

=> There is *no* significant performance difference.

I understand that static inline functions are inlined by the C
compiler (GCC) as expected.

* Macros: 361 sec +- 1 sec
* Static inline functions: 361 sec +- 1 sec

$ python3 -m pyperf compare_to pgo-lto_test_suite_macros.json
pgo-lto_test_suite_static_inline.json
Benchmark hidden because not significant (1): command

I built Python with:

$ ./configure --with-lto --enable-optimizations --prefix $PWD/install
$ taskset --cpu-list 2,3,6,7 make
$ make install

And I ran the following benchmark, run the test suite 5 times using
pyperf which pin the process to isolated CPUs:

$ python3 -m pyperf command -p1 --warmups=0 --loops=1 --values=5 -v -o
../pgo-lto_test_suite_macros.json -- ./bin/python3.11 -m test -j5

I isolated 4 logical CPUs (2, 3, 6 and 7) on 8: physical CPU cores 2
and 3 (cores 0 and 1 are not isolated).

--

Right now, I cannot use pyperformance: it fails to create a virtual
environment because greenlet fails to build with Python 3.11. On
speed.python.org, the benchmark are still running only because...
pyperformance uses a cached binary wheel of greenlet. It looks
dangerous to use a cached wheel, since the Python ABI (PyThreadState)
changed!

Help is welcomed to repair pyperformance:
https://github.com/python/pyperformance/issues/113

Victor

On Wed, Nov 24, 2021 at 12:27 AM Guido van Rossum <gu...@python.org> wrote:
>
> On Tue, Nov 23, 2021 at 3:15 PM Antoine Pitrou <anto...@python.org> wrote:
>>
>> On Tue, 23 Nov 2021 18:00:28 +0100
>> Victor Stinner <vstin...@python.org> wrote:
>>
>> > I didn't run benchmarks on Python built in release mode, since gcc -O3
>> > with LTO and PGO should inline all static inline functions and I don't
>> > expect any difference between macros and static inline functions.
>>
>> That would actually be interesting, since there can be surprises
>> sometimes with compilers... (function inlining depends on heuristics,
>> for example, and there may be positive or negative interactions with
>> other optimizations)
>
>
> Thanks Antoine. We definitely need to push back on such "expectations" and 
> turn them into facts by performing careful measurements. Surprises lurk 
> everywhere. See e.g. 
> https://github.com/faster-cpython/ideas/issues/109#issuecomment-975619113 
> (and watch the Emery Berger video linked there if you haven't already).
>
> --
> --Guido van Rossum (python.org/~guido)
> Pronouns: he/him (why is my pronoun here?)
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at 
> https://mail.python.org/archives/list/python-dev@python.org/message/TPUARSPZ7MLDHHWZKPO3FLMIEHMOM6SB/
> Code of Conduct: http://python.org/psf/codeofconduct/



-- 
Night gathers, and now my watch begins. It shall not end until my death.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/NINSZIW2LU2AEL2FB6FWXV3EA7BA7XMA/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to