On Wed, May 07, 2025 at 03:52:33PM +0200, PIERRE AUGIER via NumPy-Discussion 
wrote:
> > "If the goal is to run psycopg3 fast in PyPy, there are at least three 
> > paths:
> > 
> >    use a cffi backend: this is likely to be the fastest one
> >    (in case psycopg uses Cython and doesn't call directly any CPython C 
> > API): use
> >    the Cython HPy backend, once it's ready
> >    (in case psycopg uses the CPython C API directly): rewrite it to use HPy
> >    instead."
[cut]

> Could you explain a bit more? Or provide a link? CFFI with PyPy? or CFFI with 
> CPython?

Yes: _if_ the above 2022 quote from the psycopg3 issue is still valid,
and my benchmarks show that the CPython C-API is faster than the PyPy
CFFI, then (according to the quote), HPy is slower than PyPy CFFI and
therefore much slower than CPython C-API.

All of that under the assumption that there are many API calls.


Stefan Krah


> Is there a proper reproducible benchmark?

Here are the benchmarks for _decimal:

bench.py
========================================================================
import time
import platform

if platform.python_implementation() == "CPython":
    import _decimal as C
else: # PyPy
    import __decimal as C

def pi(D):
    lasts, t, s, n, na, d, da = D(0), D(3), D(3), D(1), D(0), D(0), D(24)
    while s != lasts:
        lasts = s
        n, na = n+na, na+8
        d, da = d+da, da+32
        t = (t * n) / d
        s += t
    return s


print("\n# 
======================================================================")
print("#                   Calculating pi, 10000 iterations")
print("# 
======================================================================\n")

prec = 9
print("\nPrecision: %d decimal digits\n" % prec)
start = time.time()
C.getcontext().prec = prec
for i in range(10000):
    x = pi(C.Decimal)
print("result: %s" % str(x))
print("time: %fs\n" % (time.time()-start))
========================================================================


### NOTE: only execute git clean -xdf in a throwaway repository! ###
git clone https://github.com/python/cpython
cd cpython
git checkout v3.9.0
./configure && make -j32
cd ..
./cpython/python bench.py
[cut]
time: 0.169412s


cd cpython
git clean -xdf
git checkout v3.13.0
./configure && make -j32
cd ..
./cpython/python bench.py
[cut]
time: 0.238405s  # Massive slowdown compared to 3.9.


wget https://downloads.python.org/pypy/pypy3.11-v7.3.19-linux64.tar.bz2
tar xvf pypy3.11-v7.3.19-linux64.tar.bz2
cd pypy3.11-v7.3.19-linux64/lib/pypy3.11/
../../bin/pypy _decimal_build.py  # Builds _decimal_cffi using libmpdec.
cd ../../..
./pypy3.11-v7.3.19-linux64/bin/pypy bench.py
[cut]
time: 2.433634s



_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to