I've been fiddling with extending some of the strategies in PyPy. My first port of call has been to provide fast paths in IntegerListStrategy.find, which is the basis of "x in l" and "l.index(x)". Previously this was very fast if you looked up an integer, but rather slow if you tried up looking anything else. Since we know exactly what the type of every element in such a list is, there seem to be quite a few opportunities for optimisation. I have left the code for the common case (looking up an int in an int list) as before; but have provided various fast paths. Looking up floats and longs is now much faster; for many other types (e.g. strings or user objects whose class does not override __eq__) these return immediately. I have modified FloatListStrategy similarly.
I attach the simple benchmark I used to test the changes. Before the patch here are the results: ===> Integer lists 1 in l: 6.935 's' in l: 10.585 0 in l: 0.002 1.0 in l: 22.527 1L in l: 70.244 object() in l: 10.587 t1() in l: 14.433 t2() in l: 181.644 ===> Float lists 1 in l: 17.131 's' in l: 44.034 0.8 in l: 0.002 1.0 in l: 9.372 1L in l: 96.680 object() in l: 70.232 t1() in l: 165.662 t2() in l: 181.558 After applying the patch: ===> Integer lists 1 in l: 6.928 's' in l: 0.001 0 in l: 0.001 1.0 in l: 6.929 1L in l: 6.928 object() in l: 0.002 t1() in l: 17.411 t2() in l: 139.246 ===> Float lists 1 in l: 9.387 's' in l: 0.001 0.8 in l: 0.001 1.0 in l: 9.388 1L in l: 9.388 object() in l: 0.002 t1() in l: 129.031 t2() in l: 139.265 There is one slowdown ("t1() in l" for integer lists), which I can't explain, but overall the pattern of speed-ups is clear. As you might expect, this patch doesn't make much difference to the speed.pypy.org benchmarks. The patch itself is here: https://bitbucket.org/pypy/pypy/commits/599ed4285a6de348c7e7e732e303336d3160ce78 I welcome any comments on this. I don't pretend to know PyPy's internals inside out, and I may have made one or more stupid changes in doing this. If I have made a mistake, I'd love to know before I press on with other possible changes! Laurie _______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev