Разработав подпрограммы FFT как на аппаратном обеспечении x86, так и на графических процессорах (до CUDA, 7800 GTX Hardware ), я обнаружил, что по моим собственным результатам при меньших размерах FFT (ниже 2 ^ 13) процессор Быстрее. Выше этих размеров графический процессор был быстрее. Например, БПФ размером 2 ^ 16 вычислялось в 2-4 раза быстрее на GPU, чем эквивалентное преобразование на CPU. См. Таблицу времен ниже (время в секундах, сравнение Pentium 4 с частотой 3 ГГц и 7800 GTX. Эта работа была проделана еще в 2005 году на столь старом оборудовании и, как я уже говорил, не CUDA. Более новые библиотеки могут показывать большие улучшения)
N FFTw (s) GPUFFT (s) GPUFFT MFLOPS GPUFFT Speedup
8 0 0.00006 3.352705 0.006881
16 0.000001 0.000065 7.882117 0.010217
32 0.000001 0.000075 17.10887 0.014695
64 0.000002 0.000085 36.080118 0.026744
128 0.000004 0.000093 76.724324 0.040122
256 0.000007 0.000107 153.739856 0.066754
512 0.000015 0.000115 320.200892 0.134614
1024 0.000034 0.000125 657.735381 0.270512
2048 0.000076 0.000156 1155.151507 0.484331
4096 0.000173 0.000215 1834.212989 0.804558
8192 0.000483 0.00032 2664.042421 1.510011
16384 0.001363 0.000605 3035.4551 2.255411
32768 0.003168 0.00114 3450.455808 2.780041
65536 0.008694 0.002464 3404.628083 3.528726
131072 0.015363 0.005027 3545.850483 3.05604
262144 0.033223 0.012513 3016.885246 2.655183
524288 0.072918 0.025879 3079.443664 2.817667
1048576 0.173043 0.076537 2192.056517 2.260904
2097152 0.331553 0.157427 2238.01491 2.106081
4194304 0.801544 0.430518 1715.573229 1.861814
Как подсказывают другие авторы, передача данных в / из графического процессора - это ваш удар. Меньшие БПФ могут выполняться на CPU, некоторые реализации / размеры полностью в кеше. Это делает процессор лучшим выбором для небольших БПФ (ниже ~ 1024 баллов). Если, с другой стороны, вам нужно выполнять большие объемы работы с данными с минимальным перемещением в / из графического процессора, то графический процессор будет опережать процессор.
Я бы предложил использовать FFTW, если вам нужна быстрая реализация FFT, или Intel Math Library, если вы хотите еще более быструю (коммерческую) реализацию. Для FFTW выполнение планов с использованием флага FFTW_Measure будет измерять и тестировать самую быструю подпрограмму FFT для вашего конкретного оборудования. Я подробно расскажу об этом в этом вопросе .
Для реализаций GPU вы не можете получить лучшее, чем то, которое предоставляет NVidia CUDA. Производительность графических процессоров значительно возросла с тех пор, как я провел свои эксперименты на 7800GTX, поэтому я бы посоветовал дать их SDK возможность удовлетворить ваши конкретные требования.