[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-21 Thread STINNER Victor

STINNER Victor added the comment:

> Is it worth to optimize this pretty rare special case?

There was a TODO in the code, so I guess that the author wanted to write 
specialized code for 1-char replacement. Since the patch is short (adds 8 lines 
of C code), I consider that it's ok to optimize it.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-21 Thread Serhiy Storchaka

Serhiy Storchaka added the comment:

Is it worth to optimize this pretty rare special case?

--
nosy: +serhiy.storchaka

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-21 Thread STINNER Victor

STINNER Victor added the comment:

I pushed my latest patches, thanks for your contribution Josh.

--
resolution:  -> fixed
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-21 Thread Roundup Robot

Roundup Robot added the comment:

New changeset 62e3b7af0697 by Victor Stinner in branch 'default':
Optimize bytes.replace(b'', b'.')
https://hg.python.org/cpython/rev/62e3b7af0697

--
nosy: +python-dev

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-21 Thread STINNER Victor

STINNER Victor added the comment:

I wrote a microbenchmark with my benchmark.py tool.

The patch always make bytes.replace(b'', char) and bytearray.replace(b'', char) 
faster even for strings of 10 bytes, the speedup on string of 1000 bytes or 
more is very interesting, even I never used this Python instruction :-)

-+-+---
type bytes   |orig |  patch
-+-+---
length=10|  250 ns (*) |  211 ns (-15%)
length=10**3 | 4.67 us (*) | 1.07 us (-77%)
length=10**5 |  441 us (*) | 78.2 us (-82%)
-+-+---
Total|  446 us (*) | 79.5 us (-82%)
-+-+---

---+-+---
type bytearray |orig |  patch
---+-+---
length=10  |  266 ns (*) |  224 ns (-16%)
length=10**3   | 4.67 us (*) | 1.08 us (-77%)
length=10**5   |  441 us (*) | 78.3 us (-82%)
---+-+---
Total  |  446 us (*) | 79.6 us (-82%)
---+-+---

---++---
Summary|   orig |  patch
---++---
type bytes | 446 us (*) | 79.5 us (-82%)
type bytearray | 446 us (*) | 79.6 us (-82%)
---++---
Total  | 892 us (*) |  159 us (-82%)
---++---

--
Added file: http://bugs.python.org/file42229/bench.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-20 Thread STINNER Victor

STINNER Victor added the comment:

I reviewed your patch on Rietveld (you should get an email notification).

--
nosy: +haypo

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-19 Thread Josh Snider

New submission from Josh Snider:

replace_interleave in Objects/bytesobject.c and Objects/bytearrayobject.c can 
be optimized for the special case where the interleaving byte string is a 
single character.

Here's some quick results from timeit showing that it's about three times 
faster for the special case.
* Before (cold start):
>>> timeit.timeit('(b"x" * 200).replace(b"", b".")', number=1000)
7.619218342995737
* After (cold start):
>>> timeit.timeit('(b"x" * 200).replace(b"", b".")', number=1000)
2.7605581780080684

For the non-special case, running timeit.timeit('(b"x" * 200).replace(b"", 
b".0")', number=1) takes ~173 seconds on both versions.

--
components: Library (Lib)
files: bytes.patch
keywords: patch
messages: 261870
nosy: Josh Snider
priority: normal
severity: normal
status: open
title: replace_interleave can be optimized for single character byte strings
type: performance
versions: Python 3.6
Added file: http://bugs.python.org/file42179/bytes.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue26574] replace_interleave can be optimized for single character byte strings

2016-03-19 Thread Josh Snider

Josh Snider added the comment:

Addresses review comments.

--
Added file: http://bugs.python.org/file42180/bytes-2.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com