Message252650
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%)
-------------------+-------------+--------------- |
|
Date |
User |
Action |
Args |
2015-10-09 20:40:32 | vstinner | set | recipients:
+ vstinner, ethan.furman, python-dev, serhiy.storchaka |
2015-10-09 20:40:32 | vstinner | set | messageid: <1444423232.44.0.508772435304.issue25349@psf.upfronthosting.co.za> |
2015-10-09 20:40:32 | vstinner | link | issue25349 messages |
2015-10-09 20:40:32 | vstinner | create | |
|