[pypy-dev] More strategies
Alex Gaynor
alex.gaynor at gmail.com
Thu Nov 7 23:30:21 CET 2013
What is t1 in this context? That's a pretty dramatic slow-down, so I'd like
to understand it better.
Alex
On Thu, Nov 7, 2013 at 2:18 PM, Laurence Tratt <laurie at tratt.net> wrote:
> 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 at python.org
> https://mail.python.org/mailman/listinfo/pypy-dev
>
--
"I disapprove of what you say, but I will defend to the death your right to
say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
"The people's good is the highest law." -- Cicero
GPG Key fingerprint: 125F 5C67 DFE9 4084
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20131107/6496bdb0/attachment.html>
More information about the pypy-dev
mailing list