爱喝酒的香槟 · 怎样利用digital ...· 1 周前 · |
英俊的毛衣 · 饱受战争摧残的加沙确诊首例脊髓灰质炎病例| ...· 3 月前 · |
闷骚的香烟 · 张艺兴的音乐宇宙- 知乎· 1 年前 · |
为了在3D NumPy阵列上计算不同内核的卷积/互相关,我希望并行计算许多较小的FFT。我发现NUMBA的
@njit(parallel = True)
标签并不支持SciPy或NumPy的FFT / IFFT函数。
有没有可能用NUMBA多线程计算几个3DFFT,而不必自己实现FFT算法?或者在没有
@njit
标签的情况下,NUMBA
parallel = True
标签可以工作吗?我不太关心代码编译,我真正感兴趣的是多线程部分。
我知道我总是可以使用Python的内置模块进行多线程/多处理--但我想知道是否有更优雅的解决方案使用NUMBA来实现这一目的?
为了你的帮助和万事如意,
Valentin
由于GIL (全局解释器锁),您不能并行化使用任何纯Python类型的代码(像Numba那样使用多线程)。重写你自己的FFT算法可能会非常低效。实际上,FFT库(通常由Python库使用)通常是非常优化的。
最著名和最快的是FFTW。它通过汇编关于算法参数的一小部分代码来生成算法(可能在运行时或提前)。它比几乎所有经过精心优化的人工实现都要好很多。FFTW支持并行多维FFT的计算。希望有你可以使用的库的 Python wrappers 。
或者,如果没有Python包装器是正确的,您可以编写一个简单的C/C++函数,在内部调用FFTW,该函数本身从Python调用。Cython可以很容易地做到这一点。请注意,Numba
@njit
函数似乎是
can be mixed with Cython code
。如果你的快速傅立叶变换是在一个复杂的Numba
@njit
代码中间计算的,这是很有用的。
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券
闷骚的香烟 · 张艺兴的音乐宇宙- 知乎 1 年前 |