Hacker News new | past | comments | ask | show | jobs | submit login

FYI: pypy3 is 10x faster than CPython on this benchmark.

  ~> python fib.py
  4825.7598876953125 ms
  ~> pypy3 fib.py
  514.7459506988525 ms



Numba version:

    @numba.jit
    def fib(n):
      if n == 1 or n == 0:
        return 1
      return fib(n - 1) + fib(n - 2)
first run:

498.46601486206055 ms.

second run:

89.19310569763184 ms.

For completeness, with njit:

    @numba.njit
    def fib(n):
      if n == 1 or n == 0:
        return 1
      return fib(n - 1) + fib(n - 2)
first run:

152.62889862060547 ms

second run:

86.35592460632324 ms


Weird. On Mac I get 282 ms from pypy3, but 233 ms from numba.

    from numba import jit
    @jit
    def fib(n: int) -> int:


Even on subsequent runs?


Yeah, that's the weird part.


Also, add a couple of type annotations to the program:

  import time

  def fib(n: int) -> int:
    if n == 1 or n == 0:
      return 1

    return fib(n - 1) + fib(n - 2)

  t0 = time.time()
  fib(35)
  t1 = time.time()
  print(f"{(t1 - t0) \* 1000} ms")
The run:

  ~> mypyc fib.py
And boom:

  ~> python
  >>> import fib
  332.64994621276855 ms
(FYI, mypyc is a compiler that's part of the mypy package).


Wouldn't just straight running this through cython make more sense? Or numba?


Here are some timings using three different approaches using Cython, and also numba: https://share.cocalc.com/share/df81e09e5b8f16f28b3a2e818dcdd...

Numba wins and is about twice as fast as my most clever Cython code. Naive Cython is pretty bad, but more clever Cython is reasonably good (though not as good as numba).


Well, a point in mypyc’s favor is that the above code is still syntactically valid Python code.


Both numba and cpython work with python code AFAIK.

I don't know that cpython would take advantage of mypy annotations and you can make a cpython program not python-compatible, but you don't have to.


there's a backslash in the print statement that crashes it




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: