OpenCL FFT lib для графических процессоров?

есть ли общий FFT lib для работы на GPU с помощью OpenCL? Насколько мне известно, пример кода Apple для power-of-two OpenCL FFT является единственным доступным кодом?

существует ли такая библиотека для размеров преобразования, отличных от двух? Если нет, то насколько легко или сложно изменить образец Apple OpenCL?

Я смотрю на приложения для обработки изображений с размерами преобразования не-мощности двух, и мне придется сделать целую кучу FFTs, дозированный БПФ.

7 ответов


Я знаю библиотеку OpenCL FFT, которая в настоящее время разрабатывается, но они не планируют иметь размеры преобразования без мощности двух в первом выпуске.

можете ли вы предоставить какую-либо информацию о своем приложении? Это может помочь получить приоритет для этой функции, если это то, что может использовать много людей.


попробуйте clFFT, разработанный AMD. Он нацелен на графические карты AMD,но должен работать и на NVIDIA GPU. Он может преобразовывать массивы с радиусом 2, 3 и 5 (и комбинации там).

https://github.com/clMathLibraries/clFFT

доступны привязки python

https://github.com/geggo/gpyfft


вы можете скачать некоторые примеры кода OpenCL, включая FFT из shoc benchmark suite.


Null-padding можно использовать для того чтобы сделать данные произвольной длины приспосабливать для сил-2 алгоритма FFT. Подумайте, подойдет ли это вашему заявлению. Увеличение числа выборок уменьшает "размер шага" в выходной области, что означает более высокое разрешение вывода.


OpenMM (https://simtk.org/home/openmm) содержит 3D FFT для OpenCL. Он может не работать непосредственно для вас, так как он предназначен для конкретного случая: 3D FFTs, где каждое измерение достаточно мало для хранения в локальной памяти (например, сетка 100x100x100). Но он поддерживает не-мощность двух размеров (radix 2, 3, 4 и 5), поэтому вы можете его адаптировать.


VexCL обеспечивает реализацию FFT для OpenCL, которая принимает произвольные векторные выражения в качестве входных данных, позволяет выполнять многомерные преобразования (любого числа измерений) и поддерживает векторы произвольного размера. Вот это ссылке к соответствующей части его README.


посмотреть APPML-FFT библиотека. Хотя его еще за власть двух трансформирует.