[issue37802] micro-optimization of PyLong_FromSize_t()

2019-10-01 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 6314abcc08f5d0f3d3a915dc9455ea223fa65517 by Victor Stinner in 
branch 'master':
bpo-37802: Fix a compiler warning in longobject.c (GH-16517)
https://github.com/python/cpython/commit/6314abcc08f5d0f3d3a915dc9455ea223fa65517


--
nosy: +vstinner

___
Python tracker 

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



[issue37802] micro-optimization of PyLong_FromSize_t()

2019-10-01 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +16107
pull_request: https://github.com/python/cpython/pull/16517

___
Python tracker 

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



[issue37802] micro-optimization of PyLong_FromSize_t()

2019-09-12 Thread Gregory P. Smith


Change by Gregory P. Smith :


--
resolution:  -> fixed
stage: patch review -> commit review
status: open -> closed

___
Python tracker 

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



[issue37802] micro-optimization of PyLong_FromSize_t()

2019-09-12 Thread Gregory P. Smith


Gregory P. Smith  added the comment:


New changeset c6734ee7c55add5fdc2c821729ed5f67e237a096 by Gregory P. Smith 
(Sergey Fedoseev) in branch 'master':
bpo-37802: Slightly improve perfomance of PyLong_FromUnsigned*() (GH-15192)
https://github.com/python/cpython/commit/c6734ee7c55add5fdc2c821729ed5f67e237a096


--
nosy: +gregory.p.smith

___
Python tracker 

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



[issue37802] micro-optimization of PyLong_FromSize_t()

2019-08-25 Thread Sergey Fedoseev


Sergey Fedoseev  added the comment:

Previous benchmarks results were obtained with non-LTO build.

Here are results for LTO build:

$ python -m perf timeit -s "from itertools import repeat; _len = repeat(None, 
0).__length_hint__" "_len()" --compare-to=../cpython-master/venv/bin/python 
--duplicate=1000
/home/sergey/tmp/cpython-master/venv/bin/python: . 14.9 ns 
+- 0.2 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 13.1 ns +- 
0.5 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 14.9 ns +- 
0.2 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 13.1 ns +- 0.5 ns: 
1.13x faster (-12%)

$ python -m perf timeit -s "from itertools import repeat; _len = repeat(None, 
2**10).__length_hint__" "_len()" --compare-to=../cpython-master/venv/bin/python 
--duplicate=1000
/home/sergey/tmp/cpython-master/venv/bin/python: . 22.1 ns 
+- 0.1 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 20.9 ns +- 
0.4 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 22.1 ns +- 
0.1 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 20.9 ns +- 0.4 ns: 
1.05x faster (-5%)

$ python -m perf timeit -s "from itertools import repeat; _len = repeat(None, 
2**30).__length_hint__" "_len()" --compare-to=../cpython-master/venv/bin/python 
--duplicate=1000
/home/sergey/tmp/cpython-master/venv/bin/python: . 23.3 ns 
+- 0.0 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 21.6 ns +- 
0.1 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 23.3 ns +- 
0.0 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 21.6 ns +- 0.1 ns: 
1.08x faster (-8%)

$ python -m perf timeit -s "from itertools import repeat; _len = repeat(None, 
2**60).__length_hint__" "_len()" --compare-to=../cpython-master/venv/bin/python 
--duplicate=1000
/home/sergey/tmp/cpython-master/venv/bin/python: . 24.4 ns 
+- 0.1 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 22.7 ns +- 
0.1 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 24.4 ns +- 
0.1 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 22.7 ns +- 0.1 ns: 
1.08x faster (-7%)

--

___
Python tracker 

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



[issue37802] micro-optimization of PyLong_FromSize_t()

2019-08-10 Thread Greg Price


Change by Greg Price :


--
nosy: +Greg Price

___
Python tracker 

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



[issue37802] micro-optimization of PyLong_FromSize_t()

2019-08-09 Thread Sergey Fedoseev


Change by Sergey Fedoseev :


--
keywords: +patch
pull_requests: +14924
stage:  -> patch review
pull_request: https://github.com/python/cpython/pull/15192

___
Python tracker 

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



[issue37802] micro-optimization of PyLong_FromSize_t()

2019-08-09 Thread Sergey Fedoseev


New submission from Sergey Fedoseev :

Currently PyLong_FromSize_t() uses PyLong_FromLong() for values < PyLong_BASE. 
It's suboptimal because PyLong_FromLong() needs to handle the sign. Removing 
PyLong_FromLong() call and handling small ints directly in PyLong_FromSize_t() 
makes it faster:

$ python -m perf timeit -s "from itertools import repeat; _len = repeat(None, 
2).__length_hint__" "_len()" --compare-to=../cpython-master/venv/bin/python 
--duplicate=1
/home/sergey/tmp/cpython-master/venv/bin/python: . 18.7 ns 
+- 0.3 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 16.7 ns +- 
0.1 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 18.7 ns +- 
0.3 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 16.7 ns +- 0.1 ns: 
1.12x faster (-10%)

$ python -m perf timeit -s "from itertools import repeat; _len = repeat(None, 
2**10).__length_hint__" "_len()" --compare-to=../cpython-master/venv/bin/python 
--duplicate=1
/home/sergey/tmp/cpython-master/venv/bin/python: . 26.2 ns 
+- 0.0 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 25.0 ns +- 
0.7 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 26.2 ns +- 
0.0 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 25.0 ns +- 0.7 ns: 
1.05x faster (-5%)

$ python -m perf timeit -s "from itertools import repeat; _len = repeat(None, 
2**30).__length_hint__" "_len()" --compare-to=../cpython-master/venv/bin/python 
--duplicate=1
/home/sergey/tmp/cpython-master/venv/bin/python: . 25.6 ns 
+- 0.1 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 25.6 ns +- 
0.0 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 25.6 ns +- 
0.1 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 25.6 ns +- 0.0 ns: 
1.00x faster (-0%)


This change makes PyLong_FromSize_t() consistently faster than 
PyLong_FromSsize_t(). So it might make sense to replace PyLong_FromSsize_t() 
with PyLong_FromSize_t() in __length_hint__() implementations and other similar 
cases. For example:

$ python -m perf timeit -s "_len = iter(bytes(2)).__length_hint__" "_len()" 
--compare-to=../cpython-master/venv/bin/python --duplicate=1
/home/sergey/tmp/cpython-master/venv/bin/python: . 19.4 ns 
+- 0.3 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 17.3 ns +- 
0.1 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 19.4 ns +- 
0.3 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 17.3 ns +- 0.1 ns: 
1.12x faster (-11%)

$ python -m perf timeit -s "_len = iter(bytes(2**10)).__length_hint__" "_len()" 
--compare-to=../cpython-master/venv/bin/python --duplicate=1
/home/sergey/tmp/cpython-master/venv/bin/python: . 26.3 ns 
+- 0.1 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 25.3 ns +- 
0.2 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 26.3 ns +- 
0.1 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 25.3 ns +- 0.2 ns: 
1.04x faster (-4%)

$ python -m perf timeit -s "_len = iter(bytes(2**30)).__length_hint__" "_len()" 
--compare-to=../cpython-master/venv/bin/python --duplicate=1
/home/sergey/tmp/cpython-master/venv/bin/python: . 27.6 ns 
+- 0.1 ns
/home/sergey/tmp/cpython-dev/venv/bin/python: . 26.0 ns +- 
0.1 ns
Mean +- std dev: [/home/sergey/tmp/cpython-master/venv/bin/python] 27.6 ns +- 
0.1 ns -> [/home/sergey/tmp/cpython-dev/venv/bin/python] 26.0 ns +- 0.1 ns: 
1.06x faster (-6%)

--
components: Interpreter Core
messages: 349285
nosy: sir-sigurd
priority: normal
severity: normal
status: open
title: micro-optimization of PyLong_FromSize_t()
type: performance
versions: Python 3.9

___
Python tracker 

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