Python中使用CPU和GPU计算FFT和IFFT的最佳方法?

时间:2018-12-17 04:37:03

标签: python fft ifft

我需要在python中将两个函数fft和ifft转换为dtype complex128的2d numpy矩阵。

Howevr,我在线检查了可能的解决方案:

  1. Numba显然不支持任何fft。除了numba.cuda

  2. pyfft,无法在Visual Studio中下载,并且只有ifft上的fft。在此处查看示例https://pypi.org/project/pyfft/0.3.3/#cuda

  3. 类似reikna.fft没有IFFT

(基本上来自此帖子Improving FFT performance in Python

  1. 从pyfftw https://pypi.org/project/pyFFTW/的引入开始,与numpy相比并没有任何优势。

  2. 与numpy相比,scipy快了5%-10%左右,而且更好。

  3. 似乎提到了nufft,请参见https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with-numpy-and-numba/,但同样没有在Visual Studio中下载。

  4. 另一个选项留给了pycuda,但看起来似乎很复杂(即使与pyfft相比,我现在也没有时间基本上弄清另一种语言。)

但是请注意,由于scipy的fft和ifft似乎无法实现并行计算,因此它比matlab的fft和ifft慢了大约2到2.5倍。

因此,剩下的唯一选择似乎是写fft并使用numba将其转换为并行c代码: (算法)2D Fourier Transformation in C 和 (幅度)amplitude of numpy's fft results is to be multiplied by sampling period?。 另外,请参见Matlab的公式:https://www.mathworks.com/help/matlab/ref/fft2.htmlhttps://www.mathworks.com/help/matlab/ref/ifft2.html

问题1:利用cpu或gpu计算fft和ifft(在2D和3D中)的最佳方法是什么?像pyfft的Plan(gpu)还是paralla cpu计算一样?

问题2:您能否提供一些论文或算法的链接,或者是否存在易于使用的现有软件包(适用于Visual Studio)?像伪代码:https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm#Pseudocode

0 个答案:

没有答案