在x86硬件和GPU上開發FFT例程(在CUDA之前,7800 GTX Hardware)我從我自己的結果中發現,使用更小尺寸的FFT(低於2^13),CPU更快。超過這些尺寸的GPU速度更快。例如,2^16大小的FFT在GPU上計算的速度比CPU上的等效轉換快2-4倍。看下面的時間表(所有時間都是幾秒鐘的時間,比較一下3GHz Pentium 4和7800GTX,這項工作早在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
正如其他海報所建議的那樣,將數據傳輸到GPU或從GPU傳輸數據是您所需要的。較小的FFT可以在CPU上執行,一些實現/大小完全在緩存中。這使得CPU成爲小FFT的最佳選擇(低於1024點)。另一方面,如果您需要在GPU上執行大量的數據處理工作,並且GPU的移動量最小,那麼GPU將會勝過CPU。
如果您想要快速的FFT實現,我會建議使用FFTW,或者如果您想要更快的(商業)實現,則建議使用英特爾數學庫。對於FFTW,使用FFTW_Measure標誌執行計劃將測量並測試特定硬件的最快可能的FFT程序。我在this question中詳細介紹了這一點。
對於GPU實現,您無法比NVidia CUDA提供的更好。自從我在7800GTX上進行實驗以來,GPU的性能有了顯着提高,所以我建議讓他們的SDK適合您的具體要求。
我不認爲這些板子已經如此有限了;不是[如果他們使用Sandybridge i7,例如](http://www.silentpcreview.com/zotac-h67itx) – sehe
@sehe我知道Mini-ITX(甚至PC104)支持的模型支持最近的CPU ,我的問題是他們的* G * PU是否值得打擾。 Mini-ITX通常提供一個PCIe插槽,但是我們的產品尺寸限制了處理模塊的大小爲Mini-ITX尺寸,並且不允許我們在主板上添加額外的顯卡。 –
你的FFT有多大?您的算法是否允許您在「批處理模式」下執行這些操作,並且同時計算大量(大小相同)? –