CUDA vs FPGA?
我正在开发一个重型3Dgraphics计算产品, 在很大程度上是最接近的点和范围search 。 一些硬件优化将是有用的。 虽然我对此知之甚less,但我的老板(谁没有软件经验)主张FPGA(因为它可以量身定制),而我们的初级开发者则主张使用CUDA的GPGPU,因为它便宜,热和开放。 虽然我觉得我在这个问题上缺乏判断力,但我相信CUDA也是因为我担心灵活性而走的路,我们的产品还处于强劲的发展之中。
因此,改写这个问题,是否有任何理由去FPGA? 还是有第三个select?
我调查了同一个问题。 在与FPGA工作人员聊天后,我得到:
- FPGA对于实时系统来说非常好,即使是1ms的延迟也可能太长。 这不适用于你的情况;
- FPGA可以非常快速,特别适用于定义明确的数字信号处理(例如雷达数据),但是好的甚至比专业的GPGPU更昂贵和专业。
- FPGA编程非常繁琐。 由于有编译的硬件configuration组件,可能需要几个小时。 这似乎更适合电子工程师(通常是从事FPGA工作的人),而不是软件开发人员。
如果你可以让CUDA为你工作,那么这可能是目前最好的select。 它肯定比FPGA更灵活。
其他选项包括来自ATI的Brook,但是直到发生大事情时,它才不如CUDA那样被采用。 之后,仍然有所有传统的HPC选项(x86 / PowerPC / Cell的集群),但它们都非常昂贵。
希望有所帮助。
我们做了一些FPGA和CUDA的比较。 有一件事CUDA闪耀,如果你能真正以SIMD的方式制定你的问题,并可以访问内存联合。 如果内存访问不合并(1),或者如果在不同的线程中有不同的控制stream,GPU可能会大幅度损失其性能,而FPGA可能会超越它。 另一件事是当你的手术很小,但你有很大的数量。 但是你不能(例如由于同步)不能在一个内核的循环中启动它,那么你的GPU内核的调用时间超过了计算时间。
此外,FPGA的function可能会更好(取决于您的应用程序的情况,也就是说,当其计算所有时间时,GPU只是更便宜(以瓦特/触发器为单位))。
FPGA的缺点也有一些缺点:IO可能是一个(我们在这里有一个应用程序,我们需要70 GB / s,没有问题的GPU,但要获得这个数据量的FPGA需要传统的devise更多的引脚比可用)。 另一个缺点是时间和金钱。 FPGA比最好的GPU贵得多,开发时间也非常高。
(1)从不同线程同时访问内存必须是顺序地址。 有时真的很难实现。
我会去与CUDA。
我从事image processing工作,并且多年来一直在尝试硬件附件。 首先,我们有i860,然后是Transputer,然后是DSP,然后是FPGA,直接编译为硬件。
不可避免的是,当硬件板被真正debugging和可靠的时候,代码已经移植到他们身上了 – 普通的CPU已经超越了它们,或者主机架构改变了,我们不能使用旧的板子,或者董事会的制造者破产了。
通过坚持像CUDA这样的东西,你不会被绑定到FPGA板的一个小的专业制造商。 graphics处理器的性能提升速度快于CPU,并由游戏玩家提供资金支持。 这是一项主stream技术,因此将来可能会与多核处理器合并,从而保护您的投资。
FPGA的
- 你需要什么:
- 学习VHDL / Verilog(并相信我你不会)
- 购买硬件testing,合成工具许可证
- 如果你select一个好的框架(例如: RSoC )
- 开发devise(可能需要几年时间)
- 如果你不这样做:
- DMA,hw驱动程序,超昂贵的综合工具
- 大量有关公共汽车的知识,内存映射,综合
- build立硬件,购买ip核心
- 开发devise
- 例如,带有芯片Xilinx virtex-6的平均FPGA pcie卡的成本超过3000美元
- 结果:
- 如果你不是由政府支付,你没有足够的资金。
GPGPU(CUDA / OpenCL)
- 你已经有了testing。
- 比较FPGA的东西:
- 一切都有据可查。
- 一切都很便宜
- 一切正常
- 一切都很好地整合到编程语言
- 还有GPU云。
- 结果:
- 你只需要下载SDK,你就可以开始。
基于FPGA的解决scheme可能比CUDA更昂贵。
CUDA有一个相当实用的代码库和一个SDK ,包括一个BLAS后端 。 试着find一些类似于你正在做的事情的例子,也许还要看看GPU Gems系列书籍,来衡量CUDA将如何适合你的应用程序。 从物stream的angular度来看,CUDA比任何专业的FPGA开发工具都要容易得多,而且要便宜得多。
有一次,我曾考虑过CUDA的索赔储备模拟build模。 学习网站上有相当多的系列讲座。 在Windows上,您需要确保CUDA正在没有显示器的卡上运行,因为graphics子系统有一个看门狗定时器,可以在任何超过5秒的时间内运行任何进程。 这在Linux上不会发生。
任何具有两个PCI-e x16插槽的插槽都应该支持这一点。 我用了一台HP XW9300,你可以很便宜地拿起ebay。 如果这样做,请确保它具有两个CPU(不是一个双核CPU),因为PCI-e插槽位于不同的Hypertransport总线上,并且机器中需要两个CPU来使两个总线处于活动状态。
显然这是一个复杂的问题。 这个问题可能还包括单元处理器。 对于其他相关问题,可能没有一个答案是正确的。
根据我的经验,任何以抽象方式实现的实现,即编译的高级语言与机器级别的实现,将不可避免地具有性能成本,尤其是在复杂的algorithm实现中。 FPGA和任何types的处理器都是如此。 专门devise用于实现复杂algorithm的FPGA比执行处理元件通用的FPGA性能更好,从input控制寄存器,数据I / O等方面来说,其程度是可以改变的。
另一个一般的例子,FPGA可以有更高的性能,在级联过程中,过程输出成为另一个input,不能同时完成。 FPGA中的级联过程很简单,可以显着降低内存I / O要求,而处理器内存将用于有效地级联两个或多个存在数据依赖关系的进程。
GPU和CPU也是如此。 在不考虑高速缓冲存储器或主存储器系统的固有性能特性而开发的CPU上执行的C中执行的algorithm将不如执行的那样好。 当然,不考虑这些性能特征简化了实现。 但在性能成本。
没有GPU的直接经验,但知道其固有的内存系统性能问题,它也将受到性能问题。
我是一位CUDA开发人员,在FPGA方面有非常小的经验,但是我一直在试图找出两者之间的比较。
到目前为止我所得出的结论是:
GPU具有更高的(可访问的)峰值性能它具有更好的FLOP / W比率。 它更便宜它正在更快地发展(很快你就会有一个“真正的”TFLOP可用)。 编程更容易(阅读文章而不是个人意见)
请注意,我说的是真实/可访问的,以区别于您在GPGPU广告中看到的数字。
但是当你需要对数据进行随机访问时,GPU不是更有利。 这将有希望改变与新的Nvidia Fermi架构有一个可选的l1 / l2caching。
我的2美分
这是一个从2008年开始的旧线程,但是从那时起,重新计算FPGA编程所发生的一切将是一件好事:1. FPGA中的C门是许多公司的主stream开发,与Verilog / SystemVerilog HDL相比节省了大量时间。 在C门到系统级devise是难的部分。 2. FPGA上的OpenCL有4年以上的历史,包括Microsoft(Asure)和Amazon F1(Ryft API)的浮点和“云”部署。 使用OpenCL系统devise相对容易,因为在主机和计算设备之间定义了非常明确的内存模型和API。
软件人员只需要学习一些关于FPGA架构的知识,就可以用GPU和CPU来做一些不可能的事情,这是因为他们是固定芯片而没有宽带接口(100Gb +)。 不再可能缩小芯片几何尺寸,也不能从单芯片封装中提取更多的热量而不熔化,所以这看起来像单芯片封装的道路的末端。 我的论文是,未来属于多芯片系统的并行编程,而FPGA有很大的机会领先于游戏。 如果您对演出等有疑虑,请查看http://isfpga.org/ 。
你在部署什么? 谁是你的客户? 在甚至不知道这些问题的答案的情况下,除非您正在构build一个实时系统,并且您的团队中具有硬件描述语言(如VHDL和Verilog)知识的电气/计算机工程师,否则我不会使用FPGA。 它有很多,它比传统的编程需要一个不同的思维框架。
其他人给出了很好的答案,只是想增加一个不同的观点。 以下是我在ACM Computing Surveys 2015(其固定链接位于此处 )发表的调查报告 ,该报告将GPU与FPGA和CPU的能效指标进行了比较。 大多数论文报道:FPGA比GPU更节能,而CPU比CPU更节能。 由于功耗预算是固定的(取决于散热能力),因此FPGA的能效意味着可以在与FPGA相同的功耗预算内进行更多的计算,从而在FPGA上获得比在GPU上更好的性能。 当然,正如其他人所提到的那样,也要考虑FPGA的局限性。
FPGA在高性能计算领域已经不受青睐,因为它们是编程的一大障碍。 CUDA是因为它编程好得多,仍然会给你一些好的performance。 我将与HPC社区一起去,并在CUDA中做。 它更容易,更便宜,更易于维护。
在最新的GTC'13上,许多HPC人士同意CUDA将留在这里。 FGPA是麻烦的,CUDA正在变得更加成熟,支持Python / C / C ++ / ARM。无论哪种方式,这是一个过时的问题
那些有软件偏见的人不会喜欢FPGA,因为他们需要学习HDL或至less了解systemC。
对于那些具有硬件偏见的FPGA来说,将是第一个考虑的select。
事实上,要牢固把握这两者,才能做出客观的决定。
OpenCL可以在FPGA和GPU上运行,甚至可以将CUDA移植到FPGA。
FPGA和GPU加速器可以一起使用
所以这不是什么更好的情况。 还有关于CUDA和OpenCL的争论
再次,除非你已经对你的具体应用程序进行了优化和基准testing,你不能100%确定地知道。
由于其商业性质和资源,许多人将只与CUDA一起使用。 其他人将会使用openCL,因为它的多function性。