You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Optimize ASCII/latin1 encoder with surrogateescape error handlers #69414
Attached patch is based on faster_surrogates_hadling.patch written by Serhiy Storchaka for the issue bpo-24870. It optimizes str.encode('ascii', 'surrogateescape') and str.encode('ascii', 'latin1').
-----------------------+-------------+---------------
ascii | before | after
-----------------------+-------------+---------------
100 x 10**1 characters | 6.65 us () | 1.93 us (-71%)
100 x 10**3 characters | 512 us () | 158 us (-69%)
100 x 10**2 characters | 52.2 us () | 16.2 us (-69%)
100 x 10**4 characters | 5.09 ms () | 1.59 ms (-69%)
-----------------------+-------------+---------------
Total | 5.66 ms (*) | 1.77 ms (-69%)
-----------------------+-------------+---------------
-----------------------+-------------+---------------
latin1 | before | after
-----------------------+-------------+---------------
100 x 10**1 characters | 6.24 us () | 1.89 us (-70%)
100 x 10**3 characters | 500 us () | 160 us (-68%)
100 x 10**2 characters | 51 us () | 16.3 us (-68%)
100 x 10**4 characters | 5 ms () | 1.59 ms (-68%)
-----------------------+-------------+---------------
Total | 5.56 ms (*) | 1.77 ms (-68%)
-----------------------+-------------+---------------
--------+-------------+---------------
Summary | before | after
--------+-------------+---------------
ascii | 5.66 ms () | 1.77 ms (-69%)
latin1 | 5.56 ms () | 1.77 ms (-68%)
--------+-------------+---------------
Total | 11.2 ms (*) | 3.53 ms (-69%)
--------+-------------+---------------
Activity
vstinner commentedon Sep 24, 2015
Attached patch is based on faster_surrogates_hadling.patch written by Serhiy Storchaka for the issue bpo-24870. It optimizes str.encode('ascii', 'surrogateescape') and str.encode('ascii', 'latin1').
python-dev commentedon Sep 24, 2015
New changeset fa65c32d7134 by Victor Stinner in branch 'default':
Issue bpo-25227: Cleanup unicode_encode_ucs1() error handler
https://hg.python.org/cpython/rev/fa65c32d7134
vstinner commentedon Sep 24, 2015
Updated test now with more unit tests.
vstinner commentedon Sep 24, 2015
Result of a micro-benchmark with encode_ucs1_surrogateescape-2.patch.
Common platform:
Timer info: namespace(adjustable=False, implementation='clock_gettime(CLOCK_MONOTONIC)', monotonic=True, resolution=1e-09)
Timer: time.perf_counter
CPU model: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
Python unicode implementation: PEP-393
Platform: Linux-4.1.6-200.fc22.x86_64-x86_64-with-fedora-22-Twenty_Two
CFLAGS: -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
Bits: int=32, long=64, long long=64, size_t=64, void*=64
Platform of campaign before:
Date: 2015-09-24 16:12:35
Timer precision: 54 ns
Python version: 3.6.0a0 (default:fa65c32d7134, Sep 24 2015, 16:11:44) [GCC 5.1.1 20150618 (Red Hat 5.1.1-4)]
SCM: hg revision=fa65c32d7134 tag=tip branch=default date="2015-09-24 14:45 +0200"
Platform of campaign after:
Python version: 3.6.0a0 (default:fa65c32d7134+, Sep 24 2015, 16:13:20) [GCC 5.1.1 20150618 (Red Hat 5.1.1-4)]
Timer precision: 55 ns
SCM: hg revision=fa65c32d7134+ tag=tip branch=default date="2015-09-24 14:45 +0200"
Date: 2015-09-24 16:13:21
-----------------------+-------------+---------------
ascii | before | after
-----------------------+-------------+---------------
100 x 10**1 characters | 6.65 us () | 1.93 us (-71%)
100 x 10**3 characters | 512 us () | 158 us (-69%)
100 x 10**2 characters | 52.2 us () | 16.2 us (-69%)
100 x 10**4 characters | 5.09 ms () | 1.59 ms (-69%)
-----------------------+-------------+---------------
Total | 5.66 ms (*) | 1.77 ms (-69%)
-----------------------+-------------+---------------
-----------------------+-------------+---------------
latin1 | before | after
-----------------------+-------------+---------------
100 x 10**1 characters | 6.24 us () | 1.89 us (-70%)
100 x 10**3 characters | 500 us () | 160 us (-68%)
100 x 10**2 characters | 51 us () | 16.3 us (-68%)
100 x 10**4 characters | 5 ms () | 1.59 ms (-68%)
-----------------------+-------------+---------------
Total | 5.56 ms (*) | 1.77 ms (-68%)
-----------------------+-------------+---------------
--------+-------------+---------------
Summary | before | after
--------+-------------+---------------
ascii | 5.66 ms () | 1.77 ms (-69%)
latin1 | 5.56 ms () | 1.77 ms (-68%)
--------+-------------+---------------
Total | 11.2 ms (*) | 3.53 ms (-69%)
--------+-------------+---------------
python-dev commentedon Sep 29, 2015
New changeset 128a3f03ddeb by Victor Stinner in branch 'default':
Optimize ascii/latin1+surrogateescape encoders
https://hg.python.org/cpython/rev/128a3f03ddeb
vstinner commentedon Sep 29, 2015
INADA Naoki: The ASCII and latin1 encoders are now up to 3 times as fast when the surrogateescape error handler is used in Python 3.6.