[issue29507] Use FASTCALL in call_method() to avoid temporary tuple

INADA Naoki report at bugs.python.org
Thu Feb 9 07:20:19 EST 2017


INADA Naoki added the comment:

I'm sorry, callmethod.patch is tuned other place, and causing SEGV.

method_fastcall2.patch is tuning same function (call_method() in typeobject.c), and uses trick to bypass temporary method object (same to _PyObject_GetMethod()).

$ ./python -m perf timeit --compare-to `pwd`/python.default  -s 'class C:' -s ' def __getitem__(self, index): return index' -s 'c=C()' 'c[0]'
python.default: ..................... 155 ns +- 4 ns
python: ..................... 111 ns +- 1 ns

Median +- std dev: [python.default] 155 ns +- 4 ns -> [python] 111 ns +- 1 ns: 1.40x faster (-28%)

----------
Added file: http://bugs.python.org/file46606/method_fastcall2.patch

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue29507>
_______________________________________


More information about the Python-bugs-list mailing list