Inada Naoki <[email protected]> added the comment:
Ok. Performance improvement comes from:
a. Presizing
b. Bypassing some checks in PyDict_SetItem
c. Avoiding duplication check.
(b) is relatively small so I tried to focus on (a) and (b). See GH-22909.
In case of simple keyword arguments, it is 10% faster than GH-22346:
```
$ ./python -m pyperf timeit --compare-to ./python-speedup_kw
"dict(ihinvdono='doononon', gowwondwon='nwog', bdjbodbob='nidnnpn',
nwonwno='vndononon', dooodbob='iohiwipwgpw', doidonooq='ndwnnpnpnp',
fndionqinqn='ndjboqoqjb', nonoeoqgoqb='bdboboqbgoqeb',
jdnvonvoddo='nvdjnvndvonoq', njnvodnoo='hiehgieba', nvdnvwnnp='wghgihpa',
nvfnwnnq='nvdknnnqkm', ndonvnipnq='fndjnaobobvob', fjafosboab='ndjnodvobvojb',
nownwnojwjw='nvknnndnow', niownviwnwnwi='nownvwinvwnwnwj')"
python-speedup_kw: ..................... 357 ns +- 10 ns
python: ..................... 323 ns +- 4 ns
Mean +- std dev: [python-speedup_kw] 357 ns +- 10 ns -> [python] 323 ns +- 4
ns: 1.11x faster (-10%)
```
In case of `dict(d, key=val)` case, it is 8% slower than GH-22346, but still 8%
faster than master.
```
$ ./python -m pyperf timeit --compare-to ./python-speedup_kw -s
'd={"foo":"bar"}' "dict(d, ihinvdono='doononon', gowwondwon='nwog',
bdjbodbob='nidnnpn', nwonwno='vndononon', dooodbob='iohiwipwgpw',
doidonooq='ndwnnpnpnp', fndionqinqn='ndjboqoqjb', nonoeoqgoqb='bdboboqbgoqeb',
jdnvonvoddo='nvdjnvndvonoq', njnvodnoo='hiehgieba', nvdnvwnnp='wghgihpa',
nvfnwnnq='nvdknnnqkm', ndonvnipnq='fndjnaobobvob', fjafosboab='ndjnodvobvojb',
nownwnojwjw='nvknnndnow', niownviwnwnwi='nownvwinvwnwnwj')"
python-speedup_kw: ..................... 505 ns +- 15 ns
python: ..................... 546 ns +- 17 ns
Mean +- std dev: [python-speedup_kw] 505 ns +- 15 ns -> [python] 546 ns +- 17
ns: 1.08x slower (+8%)
$ ./python -m pyperf timeit --compare-to ./python-master -s 'd={"foo":"bar"}'
"dict(d, ihinvdono='doononon', gowwondwon='nwog', bdjbodbob='nidnnpn',
nwonwno='vndononon', dooodbob='iohiwipwgpw', doidonooq='ndwnnpnpnp',
fndionqinqn='ndjboqoqjb', nonoeoqgoqb='bdboboqbgoqeb',
jdnvonvoddo='nvdjnvndvonoq', njnvodnoo='hiehgieba', nvdnvwnnp='wghgihpa',
nvfnwnnq='nvdknnnqkm', ndonvnipnq='fndjnaobobvob', fjafosboab='ndjnodvobvojb',
nownwnojwjw='nvknnndnow', niownviwnwnwi='nownvwinvwnwnwj')"
python-master: ..................... 598 ns +- 10 ns
python: ..................... 549 ns +- 19 ns
Mean +- std dev: [python-master] 598 ns +- 10 ns -> [python] 549 ns +- 19 ns:
1.09x faster (-8%)
```
Additionally, I expect we can reuse this new code to optimize
BUILD_CONST_KEY_MAP.
----------
stage: patch review ->
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue41835>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com