我有一个python代码,在清理并制定更智能的计算策略后,基本上可以归结为剩下一个瓶颈。这个瓶颈占用了运行时间的85%。因此,我使用了这段代码中昂贵的部分并将其转换为cython。在运行Windows的笔记本电脑和台式机中,这种策略都非常有效。与纯numpy实施相比,切换到cython的速度要快2.6倍,而该部分昂贵。据我所知,在计算昂贵部分时,只使用了一个内核,这也是目的。
现在,我必须在工作中使用与Linux中相同的代码。除了输入/输出之外,代码基本上是相同的,但是运行时比较不包括输入和输出部分。
在工作Linux环境中,cython确实也加快了昂贵部分的速度,但与numpy相比,仅为1.3倍。尝试numba jit也会产生相同的观察结果(这是否意味着cython的gcc编译器和msvc编译器不是cython的罪魁祸首?)。
Python代码是相同的。输入数据集是相同的。参数也相同。我知道工作Linux与Windows环境之间存在很多差异,因此很难缩小范围。但是对于初学者来说,我会检查numpy,numba,llvmlite和cython版本
laptop/desktop: work-linux
numpy 1.16.2 1.16.4
numba 0.43.1 0.44.1
llvmlite 0.28.0 0.29.0
cython 0.29.6 0.29.11
两者都是python 3.7.3。工作版本是较新的,但我认为这样小的版本更改之间不会有太大的区别。
我真正的问题是,我什至应该开始寻找在linux工作环境中cython / numba性能下降的地方。我不知道为什么会这样。
编辑:为了进一步阐明我的问题。我知道这很复杂,numpy可以链接到不同的库,任何指针如何将其挖掘出来?同样,如果numpy是更快的cython,这也不是简单的“怎么办”。在这里测试的3台机器中,笔记本电脑是运行速度最低的计算机,内存最少,而我的台式机是最快的计算机,工作计算机位于中间位置,但即使是笔记本电脑运行时的cython / numba,这也是昂贵部分的1.5倍以上工作机器(这对我来说很奇怪)并不能说服我numpy的工作版本那么好。我在笔记本电脑/台式机上安装的anaconda直接来自anaconda站点,而不会造成任何麻烦。任何我可以解决的可靠建议将不胜感激。