3 ms·
Interesting and promising. PyPy 1.4: >>>> t1 = time.time(); a=[x*x for x in xrange(1000000)]; time.time()-t1 0.38609600067138672 >>>> t1 = time.tim
by orangecat 16y ago
Interesting and promising. PyPy 1.4:
>>>> t1 = time.time(); a=[x*x for x in xrange(1000000)]; time.time()-t1
0.38609600067138672
>>>> t1 = time.time(); a=[x*x+math.sin(x/1000000.) for x in xrange(1000000)]; time.time()-t1
0.42182803153991699
Python 2.7:
>>> t1 = time.time(); a=[x*x for x in xrange(1000000)]; time.time()-t1
0.25005197525024414
>>> t1 = time.time(); a=[x*x+math.sin(x/1000000.) for x in xrange(1000000)]; time.time()-t1
0.6075689792633057
Both running in 64-bit on a 2.53GHz Core 2 Duo. It looks like PyPy's JIT has some fixed overhead, but can heavily optimize operations once it gets going.
- d0mine 16y agoThere is something strange with the example. $ pypy -mtimeit -s'import math; sin=math.sin' \ '[x*x+sin(x/1e6) for x in xrange(1000000)]' 10 loops, best of 3: 156 msec per loop With no division it is slower (?): $ pypy -mtimeit -s'import math; sin=math.sin' \ '[x*x+sin(x) for x in xrange(1000000)]' 10 loops, best of 3: 188 msec per loop CPython shows expected behavior: $ python2.7 -mtimeit -s'import math; sin=math.sin' \ '[x*x+sin(x) for x in xrange(1000000)]' 10 loops, best of 3: 231 msec per loop $ python2.7 -mtimeit -s'import math; sin=math.sin' \ '[x*x+sin(x/1e6) for x in xrange(1000000)]' 10 loops, best of 3: 253 msec per loop CPython is faster for tiny cases: $ pypy -mtimeit '[x*x for x in xrange(1000000)]' 10 loops, best of 3: 126 msec per loop $ python2.7 -mtimeit '[x*x for x in xrange(1000000)]' 10 loops, best of 3: 67.3 msec per loop $ pypy -mtimeit '[x*x*x for x in xrange(1000000)]' 10 loops, best of 3: 123 msec per loop $ python2.7 -mtimeit '[x*x*x for x in xrange(1000000)]' 10 loops, best of 3: 118 msec per loop
- orangecat 16y agoWith no division it is slower (?) Very interesting. Looks like sin is faster for arguments less than pi/4 (~=0.7853981633974483): Edit: "Intel's sin/cos implementation sucks golfballs through gardenhoses for arguments outside of [-pi/4,pi/4]": http://stackoverflow.com/questions/523531/fast-transcendent-trigonometric-functions-for-java http://stackoverflow.com/questions/523531/fast-transcendent-... $ pypy -mtimeit -s'import math; sin=math.sin; a=0.786' '[sin(a) for x in xrange(1000000)]' 10 loops, best of 3: 395 msec per loop $ pypy -mtimeit -s'import math; sin=math.sin; a=0.785' '[sin(a) for x in xrange(1000000)]' 10 loops, best of 3: 375 msec per loop $ python -mtimeit -s'import math; sin=math.sin; a=0.786' '[sin(a) for x in xrange(1000000)]' 10 loops, best of 3: 177 msec per loop $ python -mtimeit -s'import math; sin=math.sin; a=0.785' '[sin(a) for x in xrange(1000000)]' 10 loops, best of 3: 155 msec per loop