STINNER Victor added the comment: I wrote bench_bytes_int.py micro-benchmark, results are below.
Oh, I did'n expected a real difference even for simple code like b'%d' % 12345 (32% faster). So I consider that it's enough to apply the optimization. Common platform: Timer: time.perf_counter Bits: int=32, long=64, long long=64, size_t=64, void*=64 CPU model: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz Platform: Linux-4.1.6-200.fc22.x86_64-x86_64-with-fedora-22-Twenty_Two Python unicode implementation: PEP 393 Timer info: namespace(adjustable=False, implementation='clock_gettime(CLOCK_MONOTONIC)', monotonic=True, resolution=1e-09) CFLAGS: -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes Platform of campaign orig: SCM: hg revision=576128c0d068 tag=tip branch=default date="2015-10-09 10:20 -0400" Python version: 3.6.0a0 (default:576128c0d068, Oct 9 2015, 22:36:21) [GCC 5.1.1 20150618 (Red Hat 5.1.1-4)] Date: 2015-10-09 22:36:36 Timer precision: 62 ns Platform of campaign writer: Python version: 3.6.0a0 (default:576128c0d068+, Oct 9 2015, 22:28:09) [GCC 5.1.1 20150618 (Red Hat 5.1.1-4)] Date: 2015-10-09 22:34:53 SCM: hg revision=576128c0d068+ tag=tip branch=default date="2015-10-09 10:20 -0400" Timer precision: 65 ns ------------------------------------------------------------+-------------+--------------- %i | orig | writer ------------------------------------------------------------+-------------+--------------- n = 1; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 155 ns (*) | 105 ns (-32%) n = 5; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 546 ns (*) | 306 ns (-44%) n = 10; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 1.03 us (*) | 543 ns (-47%) n = 25; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 2.49 us (*) | 1.27 us (-49%) n = 100; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 10.1 us (*) | 5.25 us (-48%) n = 200; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 20.5 us (*) | 10.8 us (-47%) n = 500; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 48.8 us (*) | 24.6 us (-50%) ------------------------------------------------------------+-------------+--------------- Total | 83.6 us (*) | 42.9 us (-49%) ------------------------------------------------------------+-------------+--------------- ---------------------------------------------------------------+-------------+--------------- x=%i | orig | writer ---------------------------------------------------------------+-------------+--------------- n = 1; fmt = b"x=%d " * n; arg = tuple([12345]*n); fmt % arg | 173 ns (*) | 123 ns (-29%) n = 5; fmt = b"x=%d " * n; arg = tuple([12345]*n); fmt % arg | 602 ns (*) | 372 ns (-38%) n = 10; fmt = b"x=%d " * n; arg = tuple([12345]*n); fmt % arg | 1.14 us (*) | 668 ns (-42%) n = 25; fmt = b"x=%d " * n; arg = tuple([12345]*n); fmt % arg | 2.8 us (*) | 1.56 us (-44%) n = 100; fmt = b"x=%d " * n; arg = tuple([12345]*n); fmt % arg | 11.1 us (*) | 6.12 us (-45%) n = 200; fmt = b"x=%d " * n; arg = tuple([12345]*n); fmt % arg | 21.5 us (*) | 12.1 us (-44%) n = 500; fmt = b"x=%d " * n; arg = tuple([12345]*n); fmt % arg | 53.5 us (*) | 29.8 us (-44%) ---------------------------------------------------------------+-------------+--------------- Total | 90.8 us (*) | 50.7 us (-44%) ---------------------------------------------------------------+-------------+--------------- ------------------------------------------------------------+-------------+--------------- %x | orig | writer ------------------------------------------------------------+-------------+--------------- n = 1; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 155 ns (*) | 105 ns (-32%) n = 5; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 545 ns (*) | 306 ns (-44%) n = 10; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 1.03 us (*) | 543 ns (-47%) n = 25; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 2.49 us (*) | 1.26 us (-49%) n = 100; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 9.9 us (*) | 5.07 us (-49%) n = 200; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 19.8 us (*) | 10.1 us (-49%) n = 500; fmt = b"%d" * n; arg = tuple([12345]*n); fmt % arg | 48.9 us (*) | 24.5 us (-50%) ------------------------------------------------------------+-------------+--------------- Total | 82.8 us (*) | 41.9 us (-49%) ------------------------------------------------------------+-------------+--------------- ------------------------------------------------------------------+-------------+--------------- x=%x | orig | writer ------------------------------------------------------------------+-------------+--------------- n = 1; fmt = b"x=%d " * n; arg = tuple([0xabcdef]*n); fmt % arg | 183 ns (*) | 132 ns (-28%) n = 5; fmt = b"x=%d " * n; arg = tuple([0xabcdef]*n); fmt % arg | 651 ns (*) | 419 ns (-36%) n = 10; fmt = b"x=%d " * n; arg = tuple([0xabcdef]*n); fmt % arg | 1.23 us (*) | 761 ns (-38%) n = 25; fmt = b"x=%d " * n; arg = tuple([0xabcdef]*n); fmt % arg | 2.96 us (*) | 1.79 us (-40%) n = 100; fmt = b"x=%d " * n; arg = tuple([0xabcdef]*n); fmt % arg | 11.9 us (*) | 7.13 us (-40%) n = 200; fmt = b"x=%d " * n; arg = tuple([0xabcdef]*n); fmt % arg | 23.5 us (*) | 14 us (-41%) n = 500; fmt = b"x=%d " * n; arg = tuple([0xabcdef]*n); fmt % arg | 58.3 us (*) | 34.3 us (-41%) ------------------------------------------------------------------+-------------+--------------- Total | 98.6 us (*) | 58.5 us (-41%) ------------------------------------------------------------------+-------------+--------------- --------------------------------------------+-------------+-------------- large int: %i | orig | writer --------------------------------------------+-------------+-------------- fmt = b"%i"; arg = 10 ** 0 - 1; fmt % arg | 115 ns (*) | 74 ns (-36%) fmt = b"%i"; arg = 10 ** 50 - 1; fmt % arg | 288 ns (*) | 242 ns (-16%) fmt = b"%i"; arg = 10 ** 100 - 1; fmt % arg | 538 ns (*) | 494 ns (-8%) fmt = b"%i"; arg = 10 ** 150 - 1; fmt % arg | 865 ns (*) | 812 ns (-6%) fmt = b"%i"; arg = 10 ** 200 - 1; fmt % arg | 1.33 us (*) | 1.28 us --------------------------------------------+-------------+-------------- Total | 3.14 us (*) | 2.9 us (-8%) --------------------------------------------+-------------+-------------- ----------------------------------------------+-------------+--------------- large int: x=%i | orig | writer ----------------------------------------------+-------------+--------------- fmt = b"x=%i"; arg = 10 ** 0 - 1; fmt % arg | 140 ns (*) | 100 ns (-28%) fmt = b"x=%i"; arg = 10 ** 50 - 1; fmt % arg | 298 ns (*) | 249 ns (-16%) fmt = b"x=%i"; arg = 10 ** 100 - 1; fmt % arg | 548 ns (*) | 502 ns (-8%) fmt = b"x=%i"; arg = 10 ** 150 - 1; fmt % arg | 874 ns (*) | 822 ns (-6%) ----------------------------------------------+-------------+--------------- Total | 1.86 us (*) | 1.67 us (-10%) ----------------------------------------------+-------------+--------------- -------------------+-------------+--------------- Summary | orig | writer -------------------+-------------+--------------- %i | 83.6 us (*) | 42.9 us (-49%) x=%i | 90.8 us (*) | 50.7 us (-44%) %x | 82.8 us (*) | 41.9 us (-49%) x=%x | 98.6 us (*) | 58.5 us (-41%) large int: %i | 3.14 us (*) | 2.9 us (-8%) large int: x=%i | 1.86 us (*) | 1.67 us (-10%) -------------------+-------------+--------------- Total | 363 us (*) | 201 us (-45%) -------------------+-------------+--------------- ---------- Added file: http://bugs.python.org/file40735/bench_bytes_int.py _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue25349> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com