Message81319
This patch speeds up the string formatting % operator by avoiding the
unnecessary indirection in PyNumber_Remainder(). This particularly
benefits templating systems that do a lot of string formatting via %.
Performance tested with gcc 4.3.1 x86_64 on Linux 2.6.18:
2to3:
Min: 22.443 -> 22.306: 0.61% faster
Avg: 22.465 -> 22.324: 0.63% faster
Django:
Min: 0.598 -> 0.591: 1.24% faster
Avg: 0.601 -> 0.595: 1.03% faster
Spitfire [1]:
Min: 0.752 -> 0.717: 4.91% faster
Avg: 0.754 -> 0.719: 4.83% faster
The Django test renders a 150x150 cell table 100 times. The Spitfire
test renders a 1000x1000 cell table 100 times. The 2to3 test translates
all of 2to3 with `-f all` five times. There is no significant impact on
PyBench. Less important code like the pure-Python pickle implementation
also shows an improvement:
Pickling:
Min: 6.680 -> 6.535: 2.22% faster
Avg: 6.740 -> 6.576: 2.50% faster
This is pickling a list of 40000 dicts 100 times. This does not impact
unpickling.
About the patch:
I tested various combinations of PyString_Check and PyString_CheckExact
and what you see in the patch demonstrated the best performance across
all benchmarks. I also tested changing the definition of PyString_Check
to include a short-circuit on PyString_CheckExact, but that did not
provide a consistent benefit.
[1] - http://code.google.com/p/spitfire/ |
|
Date |
User |
Action |
Args |
2009-02-06 23:49:49 | collinwinter | set | recipients:
+ collinwinter, jyasskin |
2009-02-06 23:49:49 | collinwinter | set | messageid: <1233964189.56.0.504237250684.issue5176@psf.upfronthosting.co.za> |
2009-02-06 23:48:49 | collinwinter | link | issue5176 messages |
2009-02-06 23:48:47 | collinwinter | create | |
|