[pypy-dev] PyPy doesn't make code written in C faster

Carl Friedrich Bolz cfbolz at gmx.de
Thu Jul 18 11:08:56 CEST 2013


On 29/06/13 20:06, Nathan Hurst wrote:
> I don't actually see any difference between that code and normal
> python.  What makes it rpython?

Being RPython is mostly a contextual property. It does nothing "too
dynamic", so it is RPython.


>> The main changes I did from your version was generalize it to work for
>> any 3 <= n <= 36, optimize the handling of leading zeros and use a
>> StringBuilder instead of a list to build the resulting string. Plus I
>> kept the already existing fast version for powers of two alive.
> 
> All good decisions.  Is there a nice way to profile this with
> something like line_profiler?  It's possible to improve the
> asymptotics in various places, but they almost certainly aren't worth
> it.

For rbigint I just profiled the generated C source.

> Of course the real question is whether pypy now beats python2.7 on the
> all important factorial benchmark.  (And if so should we rush out a
> new release? ;)

Yes, it does, and it will be in the 2.1 release.

I also did some additional changes yesterday:

https://bitbucket.org/pypy/pypy/commits/7ceb58dbdc244439b58d8bcc2d5e41a35fa3897b

(and following commits)

I now cache the powers of base needed to split the number, because the
profile was completely dominated by calls to pow. In addition, I
compute the minimum digits based on the base, instead of using a
pessimistic bound for all bases.

Now the profile is actually dominated by calls to divmod, which is
probably expected.

Cheers,

Carl Friedrich


More information about the pypy-dev mailing list