1

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

任何帮助将不胜感激。如果您想让我发布更多信息,请告诉我。

4

1 回答 1

3

我很想知道有多少性能提升是可能的,所以写了一个新函数来gmpy2计算sin一个完全在 C 中的列表。不幸的是,没有太大的改进。

%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),因此线程将无济于事。

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

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

于 2014-10-28T05:23:22.297 回答