如何更快地进行gmpy数组操作?

时间:2014-10-28 03:33:27

标签: python multiprocessing jit gmpy

在尝试使用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或多处理可能会有所帮助,但我还没弄清楚如何做到这一点。

非常感谢任何帮助。如果您希望我发布更多信息,请告诉我。

1 个答案:

答案 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),因此线程无法提供帮助。

多处理可能有所帮助,但您可能需要并行执行需要几秒(或更长)时间的代码部分,以克服将数据传递到另一个进程的开销。

基于软件的任意精度浮点只比本机浮点慢。