[issue5176] Special-case string formatting in BINARY_MODULO implementation

Collin Winter report at bugs.python.org
Sat Feb 7 00:49:49 CET 2009


New submission from Collin Winter <collinw at gmail.com>:

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/

----------
assignee: jyasskin
components: Interpreter Core
files: faster_modulo.patch
keywords: needs review, patch, patch
messages: 81319
nosy: collinwinter, jyasskin
severity: normal
status: open
title: Special-case string formatting in BINARY_MODULO implementation
type: performance
versions: Python 2.7
Added file: http://bugs.python.org/file12962/faster_modulo.patch

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


More information about the Python-bugs-list mailing list