New submission from Collin Winter <coll...@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 <rep...@bugs.python.org> <http://bugs.python.org/issue5176> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com