Re: Differences performance Julia / PyPy on very similar codes

David Edelsohn <[email protected]>
Newsgroups gmane.comp.python.pypy
Message-ID <CAGWvnynQ5v5fkq1ymToUnj2Ey2jFgcQaiTcimabt3Jqa8tVJ8A@mail.gmail.com>
Does Julia based on LLVM auto-vectorize the code?  I assume yes
because you specifically mention SIMD design of the data structure.

Have you tried NumPyPy?  Development on NumPyPy has not continued, but
it probably would be a better comparison of what PyPy with
auto-vectorization could accomplish to compare with Julia.

Thanks, David

On Fri, Dec 18, 2020 at 2:56 PM PIERRE AUGIER
<[email protected]> wrote:
>
> Hi,
>
> I post on this list a message written in PyPy issue tracker (https://foss.heptapod.net/pypy/pypy/-/issues/3349#note_150255). It is about some experiments I did on writing efficient implementations of the NBody problem https://github.com/paugier/nbabel to potentially answer to this article https://arxiv.org/pdf/2009.11295.pdf.
>
> I get from a PR an [interesting optimized implementation in Julia](https://github.com/paugier/nbabel/blob/master/julia/nbabel4_serial.jl). It is very fast (even slightly faster than in Pythran). One idea is to store the 3 floats of a 3d physical vector, (x, y, z), in a struct `Point4D` containing 4 floats to better use simd instructions.
>
> I added a pure Python implementation inspired by this new Julia implementation (but with a simple `Point3D` with 3 floats because with PyPy, the `Point4D` does not make the code faster) and good news it is with PyPy a bit faster than our previous PyPy implementations (only 3 times slower than the old C++ implementation).
>
> However, it is much slower than with Julia (while the code is very similar). I coded a simplified version in Julia with nearly nothing else that what can be written in pure Python (in particular, no `@inbounds` and `@simd` macros). It seems to me that the comparison of these 2 versions could be interesting. So I again simplified these 2 versions to keep only what is important for performance, which gives
>
> - https://github.com/paugier/nbabel/blob/master/py/microbench_pypy4.py
> - https://github.com/paugier/nbabel/blob/master/py/microbench_ju4.jl
>
> The results are summarized in https://github.com/paugier/nbabel/blob/master/py/microbench.md
>
> An important point is that with `Point3D` (a mutable class in Python and an immutable struct in Julia), Julia is 3.6 times faster than PyPy. Same code and nothing really fancy in Julia so I guess that PyPy might be missing some optimization opportunities. At least it would be interesting to understand what is slower in PyPy (and why). I have to admit that I don't know how to get interesting information on timing and what is happening with PyPy JIT in a particular case. I only used cProfile and it's of course clearly not enough. I can run vmprof but I'm not able to visualize the data because the website http://vmprof.com/ is down. I don't know if I can trust values given by IPython `%timeit` for particular instructions since I don't know if PyPy JIT does the same thing in `%timeit` and in
  the function `compute_accelerations`.
>
> I also feel that I really miss in pure Python an efficient fixed size homogeneous mutable sequence (a "Vector" in Julia words) that can contain basic numerical types (as Python `array.array`) but also instances of user-defined classes and instances of Vectors. The Python code uses a [pure Python implementation using a list](https://github.com/paugier/nbabel/blob/master/py/vector.py). I think it would be reasonable to have a good implementation highly compatible with PyPy (and potentially other Python implementations) in a package on PyPI. It would really help to write PyPy compatible numerical codes. What would be the good tool to implement such package? HPy? I wonder whether we can get some speedup compared to the pure Python version with lists. For very simple classes like `Point3d` an
 d `Point4d`, I wonder if the data could be saved continuously in memory and if some operations could be done without boxing/unboxing.
>
> However, I really don't know what is slower in PyPy / faster in Julia.
>
> I would be very interested to get the points of view of people knowing well PyPy.
>
> Pierre
> _______________________________________________
> pypy-dev mailing list
> [email protected]
> https://mail.python.org/mailman/listinfo/pypy-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.