New submission from Antoine Pitrou <pit...@free.fr>:

This is an experiment which turns out to yield little benefits, except on 
micro-benchmarks such as:

$ ./python -m timeit -s "a=[1,2,3]" 
"a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];a[0];a[1];a[-1];"

-> before: 1000000 loops, best of 3: 1.14 usec per loop
-> after: 1000000 loops, best of 3: 0.759 usec per loop

On IRC, Raymond pointed out that the long representation is not very friendly 
to direct manipulation for small ints, but even then it's not obvious it would 
benefit a lot: a large amount of time is certainly spent accessing the Python 
stack, manipulating reference counts, decoding opcodes and checking array 
bounds.

The conclusion could be that such special-casing is futile when the body of 
code it avoids executing isn't big enough. Also, adding runtime checks has its 
own performance cost (more CPU instructions to execute, possible pipeline 
flushes due to branch misprediction, and pollution of branch prediction caches).

----------
components: Interpreter Core
files: evalsubscr.patch
keywords: patch
messages: 115888
nosy: mark.dickinson, pitrou, rhettinger
priority: low
severity: normal
status: open
title: Fast path for small int-indexing of lists and tuples
type: performance
versions: Python 3.2
Added file: http://bugs.python.org/file18799/evalsubscr.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue9800>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to