On Sat, Dec 18, 2021 at 10:01 AM Oscar Benjamin <oscar.j.benja...@gmail.com> wrote: > > On Fri, 17 Dec 2021 at 22:40, Chris Angelico <ros...@gmail.com> wrote: > > > > On Sat, Dec 18, 2021 at 9:24 AM Oscar Benjamin > > <oscar.j.benja...@gmail.com> wrote: > > > When I timed the result in Julia and in Python I found that the Julia > > > code was slower than the Python code. Of course I don't know how to > > > optimise Julia code so I asked one of my colleagues who does (and who > > > likes to proselytise about Julia). He pointed me to here where the > > > creator of Julia says "BigInts are currently pretty slow in Julia": > > > https://stackoverflow.com/questions/37193586/bigints-seem-slow-in-julia#:~:text=BigInts%20are%20currently%20pretty%20slow,that%20basic%20operations%20are%20fast. > > > I should make clear here that I used the gmpy2 library in Python for > > > the basic integer operations which is a wrapper around the same gmp > > > library that is used by Julia. That means that the basic integer > > > operations were being done by the same gmp library (a C library) in > > > each case. The timing differences between Python and Julia are purely > > > about overhead around usage of the same underlying C library. > > > > Point of note: "Python actually uses a hybrid approach where small > > integer values are represented inline and only when values get too > > large are they represented as BigInts" might be sorta-kinda true for > > Python 2, but it's not true for Python 3. In all versions of CPython > > to date, all integers are objects, they're not "represented inline" > > (there *are* some languages that do this intrinsically, and I think > > that PyPy can sometimes unbox integers, but CPython never will); and > > the performance advantage of Py2's machine-sized integers clearly > > wasn't worth recreating in Py3. (It would be possible to implement it > > in Py3 as an optimization, while still having the same 'int' type for > > both, but nobody's done it.) > > > > So if Python's integers are faster than Julia's, it's not because > > there's any sort of hybrid approach, it's simply because CPython is > > more heavily optimized for that sort of work. > > > > (That said: I have no idea whether a StackOverflow answer from 2016 is > > still applicable.) > > To be clear: I wasn't using Python's int type. I used the gmpy2.mpz > type which is precisely the same mpz from the same gmp library that > Julia uses. I'm told by my colleague that Julia has a lot of overhead > when using "heap types" which is possibly the cause of the problem.
Ah, interesting. What's the advantage of using mpz instead of Python's builtin int? ChrisA -- https://mail.python.org/mailman/listinfo/python-list