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

Reply via email to