Лучший способ в Python для расчета FFT и IFFT с CPU и GPU? - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужны две функции fft и ifft в python для двумерной матрицы с n-кодом из комплекса dtype128.

Но я проверил возможные решения онлайн:

  1. Очевидно, что Numbaне поддерживает ни одного FFT.кроме numba.cuda

  2. pyfft, не загружался в visual studio и имел только fft на ifft.см. примеры здесь https://pypi.org/project/pyfft/0.3.3/#cuda

  3. similiar reikna.fft не имеет IFFT

(В основном из этого поста Улучшение производительности FFT в Python )

с момента появления pyfftw https://pypi.org/project/pyFFTW/, это не давало никакого преимущества перед numpy.

по сравнению с numpy, scipy составлял около 5% -10% быстрее и лучше.

Похоже, упоминалось о nufft, см. https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with-numpy-and-numba/, но, опять же, он не загружается в visual studio.

Другой вариант оставил Pycuda, но он казался намного сложнее (даже по сравнению с Pyfft, и у меня сейчас нет времени, чтобы разобраться в основном с другим языком.)

Но обратите внимание, что, поскольку в scipy fft и ifft, по-видимому, не реализованы параллельные вычисления, он намного медленнее, чем fft и ifft в matlab, примерно в 2-2,5 раза.

Так что, кажется, единственная оставшаяся опция записываетfft и использовать numba для перевода его в код с параллами c: (алгоритм) 2D преобразование Фурье в C и (амплитуда) амплитуда результатов fft numpy умножается на период выборки? .Также см. Формулы Matlab: https://www.mathworks.com/help/matlab/ref/fft2.html и https://www.mathworks.com/help/matlab/ref/ifft2.html.

Вопрос 1. Какой наилучший способ использовать процессор или графический процессор для вычисления fft и ifft (в 2D и 3D)?Как план Пифта (GPU), или вычисление Paralla CPU?

Вопрос 2: Не могли бы вы предоставить некоторые ссылки на статьи или алгоритмы, или есть существующие пакеты, которые просты в использовании (для visual studio)?как псевдокод: https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm#Pseudocode

...