[pypy-issue] Issue #2724: some (purely maths) code is ~6 times slower in PyPy3 than in CPython 3.6 (pypy/pypy)

Sarge Borsch issues-reply at bitbucket.org
Wed Jan 3 01:02:53 EST 2018


New issue 2724: some (purely maths) code is ~6 times slower in PyPy3 than in CPython 3.6
https://bitbucket.org/pypy/pypy/issues/2724/some-purely-maths-code-is-6-times-slower

Sarge Borsch:

(AFAIK PyPy is supposed to be good at optimizing exactly these kinds of computations, so:)

The code is below.
The computational part executes in **~330 ms with CPython 3.6.4** (on average) but it takes **~1979ms under PyPy3** (detailed version below)

```
#!python

def measure(fun):  # used to measure run time of the interesting part
    from time import time
    t = time()
    result = fun()
    elapsed_ms = int(10 ** 3 * (time() - t))
    print(str(elapsed_ms) + ' ms')
    return result


def sum_digits(n):
    s = 0
    while n:
        n, r = divmod(n, 10)
        s += r
    return s


print(measure(lambda: sum_digits(11 ** 20000)))
```

PyPy3 detailed version:

```
$ pypy3 --version
Python 3.5.3 (09f9160b643e3f02ccb8c843b2fbb4e5cbf54082, Dec 26 2017, 09:50:12)
[PyPy 5.10.0 with GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)]
```
OS is macOS 10.12.6.  
both PyPy3 and CPython3 were installed from homebrew, with default options.

For most other 'number-crunching' programs PyPy3 gives ~2-6 times speedup on my machine (as expected), so it's probably not a broken build.

I tried to further isolate the cause but to no avail so far. I will probably try again in some time. Fortunately the code is not too big already.

Now, should I also test this on some previous PyPy3/2 versions?




More information about the pypy-issue mailing list