Julia性能与Python + Numba LLVM/JIT编译代码相比

hic*_*cup 13 python performance julia numba numba-pro

到目前为止我已经看过Julia的性能基准,例如http://julialang.org/,将Julia与纯Python或Python + NumPy进行比较.与NumPy不同,SciPy使用BLAS和LAPACK库,在这里我们获得了最佳的多线程SIMD实现.如果我们假设Julia和Python在调用BLAS和LAPACK函数时是相同的(在引擎盖下),当使用Numba或NumbaPro代码不调用BLAS或LAPACK函数时,Julia的性能与CPython相比如何?

我注意到的一件事是Julia使用LLVM v3.3,而Numba使用llvmlite,它建立在LLVM v3.5上.Julia的旧LLVM是否会阻止在较新的体系结构上实现最佳的SIMD实施,例如Intel Haswell(AVX2指令)?

我对意大利面条代码和小DSP循环的性能比较感兴趣,以处理非常大的向量.由于将数据移入和移出GPU设备内存的开销,后者由CPU为我更有效地处理GPU.我只对单个Intel Core-i7 CPU的性能感兴趣,因此集群性能对我来说并不重要.我特别感兴趣的是创建DSP功能的并行化实现的轻松和成功.

这个问题的第二部分是Numba与NumbaPro的比较(忽略了MKL BLAS).target="parallel"鉴于Numba装饰师的新nogil论点,NumbaPro 真的需要@jit吗?

Isa*_*ton 8

这是一个非常广泛的问题.关于基准测试请求,您最好根据自己的需要自行运行一些小基准测试.回答其中一个问题:

我注意到的一件事是Julia使用LLVM v3.3,而Numba使用llvmlite,它建立在LLVM v3.5上.Julia的旧LLVM是否会阻止在较新的体系结构上实现最佳的SIMD实施,例如Intel Haswell(AVX2指令)?

[ 2017/01+:以下信息不再适用于当前的Julia发布]

Julia确实用LLVM 3.3关闭了avx2,因为Haswell有一些深层次的错误.

Julia使用LLVM 3.3构建当前版本和nightlies,但是您可以使用3.5,3.6和通常svn trunk构建(如果我们在某一天尚未更新某些API更改,请提交问题).为此,请设置LLVM_VER=svn(例如)Make.user,然后继续按照构建说明进行操作.


mlu*_*bin 5

请参阅此处(第 4 节)了解我个人参与的一些同行评审基准。比较是在 Julia 和 PyPy 之间进行的。

  • 我将 PyPy 排除在考虑之外,因为它不支持 SciPy、matplotlib、64 位 Windows+Python 和 Python 3.3+。2013 年,在撰写参考论文时,PyPy 也不支持 BLAS 和 LAPACK。对于科学应用,我更喜欢与 CPython+SciPy+LLVM(Numba 或 NumbaPro)进行比较。 (3认同)