我正在开发一种具有大量3D图形计算的产品,在很大程度上是最接近的点和范围搜索.一些硬件优化会很有用.虽然我对此知之甚少,但我的老板(没有软件经验)主张FPGA(因为它可以定制),而我们的初级开发人员则主张GPGPU和CUDA,因为它便宜,热门和开放.虽然我觉得我在这个问题上缺乏判断力,但我相信CUDA也是要走的路,因为我担心灵活性,我们的产品仍然处于强劲发展之中.
所以,重新解释这个问题,是否有理由去使用FPGA?或者有第三种选择吗?
我们在FPGA和CUDA之间做了一些比较.如果您能够以SIMD方式真正地制定问题并且可以访问合并的内存,那么CUDA会发光.如果内存访问没有合并(1)或者如果你在不同的线程中有不同的控制流,那么GPU可能会大大降低其性能,并且FPGA可以胜过它.另一件事是当你的操作很小,但你有大量的操作.但是你不能(例如由于同步)没有在一个内核的循环中启动它,那么GPU内核的调用时间超过了计算时间.
此外,FPGA的功能可能会更好(取决于您的应用程序情况,即GPU在其计算时始终更便宜(就瓦特/翻牌而言)).
在幕后,FPGA也有一些缺点:IO可以是一个(我们这里有一个应用程序,我们需要70 GB/s,GPU没问题,但要将这些数据量传输到FPGA中,传统设计所需的引脚数量超过可用数量).另一个缺点是时间和金钱.FPGA比最好的GPU贵得多,而且开发时间非常长.
(1)从不同线程到存储器的同时访问必须是顺序地址.这有时很难实现.
我不久前调查了同样的问题.与曾经参与FPGA工作的人聊天后,这就是我得到的:
FPGA非常适合实时系统,即使1ms的延迟也可能太长.这不适用于您的情况;
FPGA可以非常快速,特别适用于明确定义的数字信号处理应用(例如雷达数据),但好的FPGA甚至比专业的GPGPU更昂贵和专业化;
FPGA的编程非常繁琐.由于要编译的硬件配置组件,可能需要数小时.它似乎更适合电子工程师(通常是那些从事FPGA工作的人)而不是软件开发人员.
如果你能让CUDA为你工作,它可能是目前最好的选择.它肯定比FPGA更灵活.
其他选择包括来自ATI的布鲁克,但直到发生重大事件,它根本不像CUDA那样被采用.之后,仍然有所有传统的HPC选项(x86/PowerPC/Cell集群),但它们都非常昂贵.
希望有所帮助.
我会选择CUDA.
我从事图像处理工作,多年来一直在尝试硬件附加组件.首先我们有i860,然后是Transputer,然后是DSP,然后是FPGA和直接编译到硬件.
不可避免地发生的事情是,当硬件板真正被调试和可靠并且代码被移植到它们时 - 常规CPU已经提前击败它们,或者托管机架构发生了变化,我们无法使用旧板,或者董事会的制造商破产了.
通过坚持像CUDA这样的东西,你不会被一个小型的FPGA板专家制造商所束缚.GPU的性能比CPU更快,并且由游戏玩家提供资金.它是一种主流技术,因此可能在未来与多核CPU合并,从而保护您的投资.
你需要什么:
学习VHDL/Verilog(相信我你不会)
购买hw进行测试,合成工具许可证
如果你选择一些好的框架(例如:RSoC)
开发设计(可能需要数年)
如果你不这样做:
DMA,hw驱动程序,超昂贵的综合工具
关于公共汽车,记忆映射,hw综合的大量知识
建立hw,购买ip核心
开发设计
例如,带有芯片Xilinx virtex-6的普通FPGA pcie卡的成本超过3000美元
结果:
如果您没有得到政府的报酬,您就没有足够的资金.
GPGPU(CUDA/OpenCL)
你已经有了测试.
与FPGA相比:
一切都记录完好.
一切都很便宜
一切正常
一切都很好地集成到编程语言中
还有GPU云.
结果:
你只需要下载sdk即可开始.