首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python / NUMBA中的多线程FFT操作?

Python / NUMBA中的多线程FFT操作?
EN

Stack Overflow用户
提问于 2021-08-12 09:51:39
回答 1查看 90关注 0票数 0

为了在3D NumPy阵列上计算不同内核的卷积/互相关,我希望并行计算许多较小的FFT。我发现NUMBA的@njit(parallel = True)标签并不支持SciPy或NumPy的FFT / IFFT函数。

有没有可能用NUMBA多线程计算几个3DFFT,而不必自己实现FFT算法?或者在没有@njit标签的情况下,NUMBA parallel = True标签可以工作吗?我不太关心代码编译,我真正感兴趣的是多线程部分。

我知道我总是可以使用Python的内置模块进行多线程/多处理--但我想知道是否有更优雅的解决方案使用NUMBA来实现这一目的?

为了你的帮助和万事如意,

Valentin

EN

回答 1

Stack Overflow用户

发布于 2021-08-12 18:00:46

由于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代码中间计算的,这是很有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68755160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档