在尝试使用gmpy模块时,我一直遇到速度问题。
import numpy as np
import gmpy2 as gm
N = 1000
a = range(N)
%timeit [gm.sin(x) for x in a]
# 100 loops, best of 3: 7.39 ms per loop
%timeit np.sin(a)
# 10000 loops, best of 3: 198 us per loop
我想知道我能不能以某种方式加速这个计算。我认为JIT或多处理可能会有所帮助,但我还没弄清楚如何做到这一点。
非常感谢任何帮助。如果您希望我发布更多信息,请告诉我。
答案 0 :(得分:2)
我很想知道可能会有多大的性能提升,所以为gmpy2
写了一个新函数,它完全用C计算了一个列表的sin
。不幸的是,它没有多少改善。
%timeit [gmpy2.sin(x) for x in a]
100 loops, best of 3: 4.85 ms per loop
%timeit map(gmpy2.sin, a)
100 loops, best of 3: 4.59 ms per loop
%timeit gmpy2.vector(a)
100 loops, best of 3: 4.44 ms per loop
gmpy2
未发布全球口译员锁(GIL),因此线程无法提供帮助。
多处理可能有所帮助,但您可能需要并行执行需要几秒(或更长)时间的代码部分,以克服将数据传递到另一个进程的开销。
基于软件的任意精度浮点只比本机浮点慢。