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