是否值得将FFT计算卸载到嵌入式GPU?

问题描述 投票:10回答:5

我们正在考虑从专用的数字信号处理芯片移植应用程序以在通用x86硬件上运行。该应用程序执行了许多傅里叶变换,从简要的研究来看,似乎FFT非常适合在GPU而不是CPU上进行计算。例如,此页面具有一些Core 2 Quad和GF 8800 GTX基准测试,这些基准测试显示使用GPU时的计算时间减少了10倍:

http://www.cv.nrao.edu/~pdemores/gpu/

但是,在我们的产品中,尺寸限制将我们限制在较小的尺寸,例如PC104或Mini-ITX,从而限制了相当有限的嵌入式GPU。

仅将适当的PCIe总线上的多肉图形卡卸载到GPU上,还是什至嵌入式GPU可以提供性能改进?

embedded fft gpu gpgpu
5个回答
11
投票

[在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加速8 0 0.00006 3.352705 0.00688116 0.000001 0.000065 7.882117 0.01021732 0.000001 0.000075 17.10887 0.01469564 0.000002 0.000085 36.080118 0.026744128 0.000004 0.000093 76.724324 0.040122256 0.000007 0.000107 153.739856 0.066754512 0.000015 0.000115 320.200892 0.1346141024 0.000034 0.000125 657.735381 0.2705122048 0.000076 0.000156 1155.151507 0.4843314096 0.000173 0.000215 1834.212989 0.8045588192 0.000483 0.00032 2664.042421 1.51001116384 0.001363 0.000605 3035.4551 2.25541132768 0.003168 0.00114 3450.455808 2.78004165536 0.008694 0.002464 3404.628083 3.528726131072 0.015363 0.005027 3545.850483 3.05604262144 0.033223 0.012513 3016.885246 2.655183524288 0.072918 0.025879 3079.443664 2.8176671048576 0.173043 0.076537 2192.056517 2.2609042097152 0.331553 0.157427 2238.01491 2.1060814194304 0.801544 0.430518 1715.573229 1.861814

正如其他海报所建议的那样,往GPU中传输数据或从GPU中传输数据是您的重中之重。较小的FFT可以在CPU上执行,某些实现/大小完全在高速缓存中。这使CPU成为小型FFT(低于1024点)的最佳选择。另一方面,如果您需要用最少的往返于GPU的数据处理大量工作,那么GPU将击败CPU。

我建议您使用FFTW,如果您想实现快速的FFT实施,或者使用英特尔数学库,如果您想要更快的(商业)实施。对于FFTW,使用FFTW_Measure标志执行计划将为您的特定硬件测量和测试最快的FFT例程。我将在this question中对此进行详细介绍。

对于GPU实施,您无法比NVidia CUDA提供的更好。自从我在7800GTX上进行实验以来,GPU的性能已显着提高,因此建议您为自己的特定需求提供SDK。


5
投票

您需要将数据往返于GPU内存的成本与使用GPU所带来的任何速度优势进行比较。尽管有可能使I / O和计算有所重叠,但是如果I / O带宽要求大于计算带宽,则可能仍然会遭受痛苦。如果您有其他可以在FFT数据驻留在GPU内存中时执行的其他计算,那么这可以帮助减轻I / O成本。


3
投票

我想补充您关于嵌入式GPU的问题。


2
投票

8800大约有100个核心,运行频率约为半GHz。我不认为目前任何用于小型化的嵌入式GPU都没有那么多着色器/计算内核。


1
投票

一个问题可能是获取您需要的技术信息,以在GPU上加载和执行代码以及与CPU进行通信和交换数据。 Nvidia为此专门提供了一个称为CUDA的API。因此,选择具有支持CUDA的Nvidia GPU的主板,您可能可以以很少的成本进行试验和基准测试,甚至可以在常规台式PC上进行原型制作。

© www.soinside.com 2019 - 2024. All rights reserved.