Po opracowaniu procedur FFT zarówno na sprzęcie x86, jak i na procesorach graficznych (przed CUDA, 7800 GTX Hardware) odnalazłem z moich własnych wyników, że przy mniejszych rozmiarach FFT (poniżej 2^13) procesor był szybszy. Powyżej tych rozmiarów procesor graficzny był szybszy. Na przykład, FFT 2^16 obliczył 2-4x szybciej na GPU niż równoważne przekształcenie na CPU. Zobacz tabelę czasów poniżej (Wszystkie czasy są podane w sekundach, porównując 3GHz Pentium 4 z 7800GTX.) Ta praca została wykonana w 2005 roku, więc stary sprzęt i jak powiedziałem, bez CUDA Nowsze biblioteki mogą pokazywać większe ulepszenia)
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
Jak sugerują inne plakaty, transfer danych do/z GPU jest hitem, który bierzesz. Mniejsze FFT mogą być wykonywane na CPU, niektóre implementacje/rozmiary całkowicie w pamięci podręcznej. To sprawia, że procesor jest najlepszym wyborem dla małych FFT (poniżej ~ 1024 punktów). Jeśli z drugiej strony musisz wykonywać duże partie pracy na danych przy minimalnych ruchach do/z GPU, wtedy GPU pokona procesor CPU.
Proponuję użyć FFTW, jeśli chcesz szybką implementację FFT lub bibliotekę matematyki Intel, jeśli chcesz jeszcze szybszą (komercyjną) implementację. W przypadku FFTW wykonywanie planów przy użyciu flagi FFTW_Measure będzie mierzyć i testować najszybszą możliwą procedurę FFT dla określonego sprzętu.Zajmę się szczegółami na ten temat w this question.
W przypadku implementacji GPU nie można uzyskać lepszej wersji niż wersja NVIDIA CUDA. Wydajność procesorów graficznych znacznie się zwiększyła od czasu moich eksperymentów na 7800GTX, więc sugerowałbym, aby ich SDK spełniał określone wymagania.
Nie sądzę, że te tablice są już ograniczone; nie [jeśli mają na przykład Sandybridge i7] (http://www.silentpcreview.com/zotac-h67itx) – sehe
@musiem, że obsługa Mini-ITX (a nawet PC104) ma modele obsługujące najnowsze procesory , moje pytanie brzmi, czy ich na pokładzie * G * PUs warto martwić się. Mini-ITX często dostarcza gniazdo PCIe, ale rozmiar naszego produktu ogranicza moduł przetwarzania do pojedynczej płytki o mniej więcej rozmiarze Mini-ITX i nie pozwala nam na dodanie dodatkowej karty graficznej wystającej z płyty głównej. –
Jak duże są twoje FFT? Czy twój algorytm pozwala ci robić to w "trybie wsadowym", gdzie obliczysz wiele z nich (wszystkie tego samego rozmiaru) w tym samym czasie? –