我正在开发的产品重3D图像计算, 大程度上最近的点和范围搜索.一些硬件的优化将是有益的。虽然我知道一些关于这一点,我的老板(有没有软件的经验)倡导者FPGA(因为它可以量身定做的),同时我们的青年开发人员提倡器与CUDA,因为其价格便宜、热和开放。虽然我觉得我缺乏判断在这个问题,我相信CUDA是要走的路还因为我担心灵活性、我们的产品仍然在强有力的发展。

因此,改写这个问题,是否有任何原因去FPGA?还是有第三选择吗?

有帮助吗?

解决方案

我不久前调查了同样的问题。在与从事 FPGA 工作的人交谈后,我得到以下结论:

  • FPGA 非常适合实时系统,在实时系统中,即使 1 毫秒的延迟也可能太长。这不适用于您的情况;
  • FPGA 的速度非常快,特别是对于明确定义的数字信号处理用途(例如,雷达数据),但好的产品甚至比专业 GPGPU 更昂贵、更专业;
  • FPGA 的编程相当麻烦。由于需要编译硬件配置组件,因此可能需要几个小时。与软件开发人员相比,它似乎更适合电子工程师(通常是从事 FPGA 工作的工程师)。

如果您能让 CUDA 为您服务,那么它可能是目前最好的选择。它肯定比 FPGA 更灵活。

其他选择包括 ATI 的 Brook,但在大事发生之前,它根本没有像 CUDA 那样被广泛采用。之后,仍然有所有传统的 HPC 选项(x86/PowerPC/Cell 集群),但它们都相当昂贵。

希望有帮助。

其他提示

我们做了FPGA和CUDA之间的一些比较。有一两件事,其中CUDA眼前一亮,如果你能真的制定以SIMD方式的问题,可以访问存储器合并。如果内存访问没有合并(1),或者如果您在不同的线程不同的控制流的GPU可以大大失去其性能和FPGA可以超越它。另一件事是,当你操作realtive小,但你有一个庞大的它量。但是你不能(例如,由于同步)没有启动它在一个循环中的一个内核,那么你的调用次数为GPU内核超过了计算时间。

另外FPGA的功率可能会更好(取决于你的应用scenarion,即所述GPU仅便宜(瓦/触发器计)时,其计算的所有时间)。

Offcourse的FPGA也有一些缺点:IO可以是一个(我们在这里度过了一个应用程序中,我们需要70 GB /秒,为GPU没问题,但要获得这个数据量成你所需要的常规设计FPGA更销比可用)。另一个缺点是时间和金钱。一个FPGA比最好的GPU更昂贵和发展的时间是非常高的。

(1)从不同的线程对存储器必须是顺序地址Simultanously存取。这是真的有时难以实现。

我会去与CUDA。结果 我在图像处理工作,并一直在努力多年的附加硬件。首先,我们有1860,那么晶片机,然后DSP,FPGA就和直接编图到硬件。结果 什么innevitably情况是,由当时的硬件板真的调试和可靠的代码已经被移植到了他们 - 普通的CPU已经推进到击败他们,或托管机器架构改变,我们不能用老板,或电路板的制造商破产。

通过坚持像CUDA你是不依赖于FPGA开发板的一个小型专业制造商。 GPU的性能自动为提高快于CPU和由游戏玩家提供资金。这是一个主流技术,因此可能会与多核CPU融合的未来,因此保护您的投资。

FPGA

  • 您需要什么:
    • 学习 VHDL/Verilog(相信我你不会)
    • 购买测试硬件、综合工具许可证
    • 如果你选择一些好的框架(例如: 无线系统芯片)
      • 开发设计(可能需要数年时间)
    • 如果您不这样做:
      • DMA、硬件驱动程序、超昂贵的综合工具
      • 有关总线、内存映射、硬件综合的大量知识
      • 构建硬件,购买IP核
      • 开发设计
  • 例如,带有 Xilinx virtex-6 芯片的 FPGA PCIe 卡的平均成本超过 3000 美元
  • 结果:
    • 如果政府不向您支付费用,您就没有足够的资金。

GPGPU(CUDA/OpenCL)

  • 您已经有了要测试的硬件。
  • 与 FPGA 相比:
    • 一切都有据可查。
    • 一切都很便宜
    • 一切正常
    • 一切都很好地集成到编程语言中
  • 还有GPU云。
  • 结果:
    • 你只需要下载sdk就可以开始。

基于FPGA的解决方案是可能的方式比CUDA更昂贵。

显然,这是一个复杂的问题。这个问题可能还包括Cell处理器。 而且有可能不是一个单一的答案这是其他有关问题是正确的。

在我的经验,在抽象的方式做任何实现,即编译高级语言与机器级执行,难免会产生性能成本,尤其在复杂的算法实现。这是两个FPGA的任何类型的处理器如此。一个FPGA专门设计成实现一个复杂的算法将执行比FPGA其处理元件是通用的更好,允许它从输入控制寄存器,数据的程度的可编程的I / O等

另一个一般实施例,其中一个FPGA可以是高得多的性能在级联工艺,其中工艺的输出成为输入到另一个并且它们不能同时进行。在FPGA级联过程是简单的,并且可以显着降低存储器I /同时处理器存储器O要求将被用来有效地级联,其中有数据依赖关系的两个或多个过程。

同样,可以说一个GPU和CPU的。以及一种实现该确实不考虑高速缓冲存储器或主存储器系统的固有性能特征开发了CPU上执行用C语言实现的算法将不执行。当然,不考虑这些性能特性,简化了实施。但在性能成本。

由于采用了具有GPU没有直接经验,但知道其固有的存储系统的性能问题,它也将受到性能问题。

这是一个古老的线程始于2008年,但它是很好的讲述所发生的FPGA编程从那时起: 1. C到FPGA中的门是主流的发展对于许多企业与节约大量的时间对的Verilog / SystemVerilog的HDL。在C到门系统级设计是最困难的部分。 2.对OpenCL的FPGA是有4年以上,包括由微软(的Asure)和亚马逊F1(Ryft API)浮点和“云”的部署。与OpenCL的系统设计是相对容易的,因为主机和计算设备之间的很好定义的存储器模型和API的。

软件人员只需要学习一点有关FPGA架构,能够做的事情,甚至没有可能的GPU和CPU两个固定硅的原因,并没有宽带(100Gb的+)接口连接到外面的世界。在缩小芯片的几何形状不再是可能的,也没有融化它提取的单芯片封装更多的热量,所以这看起来像一个封装芯片的路的尽头。我在这里的观点是,未来属于并行多芯片系统的编程和FPGA有很大的机会成为领先的游戏。请查看 http://isfpga.org/ 如果您对性能等的担忧。

CUDA有一个相当可观的代码基础的实例和一个 SDK, 包括 一BLAS后端.试图找到一些例子相似的你在做什么,或许也看的 GPU宝石 系列的书籍,以衡量如何以及CUDA将配合你的应用。我想说从物流观点看,CUDA是容易的工作很多,很便宜,比任何专业FPGA开发的工具包。

在一点上,我没有看到CUDA为权利要求的储备模拟模型。有一个相当好的系列讲座连接断开网站,为学习。在窗,需要确保CUDA上运行卡片没有显示器的图形的子系统具有一个监视时,即将核武器的任何运行的过程超过5秒钟。这不会发生在Linux。

任何mahcine有两个PCI-e×16槽应该支持这一点。我用了惠普XW9300,你可以拿掉ebay相当便宜。如果你这样做,确保它具有两个CPU的(不是一个双重核CPU)作为PCI-e隙生活在单独的较,巴士,你需要两个CPU是在机器中有两个法活动。

我是个CUDA开发与FPGA非常LITTEL经验:S,但我一直在努力寻找两者之间的比较

我到目前为止已经得出结论:

在GPU具有远远更高的(可访问的)的峰值性能 它有一个更有利的FLOP /瓦比。 这更便宜 它正在开发更快(相当很快你就会从字面上有一个“真实”的TFLOP可用)。 这是比较容易的程序(这个不是个人意见阅读文章)

请注意,我是说真正的/访问从您将在GPGPU商用看到数字区分。

但是当你需要做的随机访问数据的GPU是不是更有利。希望这将与具有可选的L1 / L2高速缓存中的新的Nvidia Fermi架构改变。

我的2美分

FPGA不会受到那些拥有软件偏压,因为它们需要学习的HDL或至少明白systemC的青睐。

有关那些具有硬件偏压FPGA将被认为是第一个选项。

在现实两者牢固地掌握需要&然后可以由一个客观的决定。

的OpenCL被设计成在两个FPGA和GPU的运行,即使CUDA可以移植到FPGA。

FPGA&GPU加速器可以一起使用

所以它不是什么是更好的一方或另一方的情况。还有约CUDA VS的OpenCL辩论

同样,除非你已经优化和基准既能您的具体应用,你可以不知道100%的把握。

许多人会简单地用CUDA去,因为它的商业性质和资源。其他人将与OpenCL的去,因为它的多功能性。

你在部署上?谁是你的客户?甚至没有知道这些问题的答案,除非你正在建设一个实时系统,我不会使用FPGA,并有拥有的硬件描述语言,如VHDL和Verilog的知识在你的团队电器/电脑工程师。有很多给它,它需要心境也比传统的编程不同的帧。

FPGA已经在HPC领域失宠,因为他们对编程horrorterror。 CUDA是因为它是很多很多更好的编程,将仍然会给你一些不错的表现。我会去什么HPC社区已与消失,这样做在CUDA。它更容易,更便宜,它更易于维护。

别人给予很好的答案,只是想补充一个不同的观点。这里是我的调查的发表在ACM计算概观2015(它是永久的此处),其上的能量效率度量比较了FPGA GPU和CPU。大多数报纸报道:FPGA是更节能的GPU相比,这又是更多的能量比CPU高效。由于功率预算是固定的(取决于冷却能力),FPGA的能量效率是指一种能与FPGA相同的功率预算范围内做更多的计算,从而得到与FPGA比GPU更好的性能。当然,也占了FPGA的限制,如其他人所说。

  • FPGA 的并行性比 GPU 高出三个数量级。好的 GPU 具有数千个内核,而 FPGA 可能具有数百万个可编程门。
  • 虽然 CUDA 核心必须执行高度相似的计算才能提高工作效率,但 FPGA 单元真正相互独立。
  • FPGA 可以非常快地处理某些任务组,并且通常用于毫秒已经被视为较长持续时间的情况。
  • GPU 核心比 FPGA 单元更强大,并且更容易编程。它是一个核心,当 FPGA 单元只能执行相当简单的布尔逻辑时,它可以进行除法和乘法运算。
  • 由于 GPU 核心是 , ,用C++编程是高效的。即使也可以用 C++ 对 FPGA 进行编程,但效率很低(只是“高效”)。必须使用 VDHL 或 Verilog 等专业语言 - 它们很难掌握且具有挑战性。
  • 软件工程师的大多数真实且经过考验的本能对于 FPGA 来说都是无用的。你想要一个 for循环 有这些门吗?你来自哪个星系?你需要转变为电子工程师的思维方式来理解这个世界。

在最新GTC'13许多HPC人认为CUDA是在这里停留。 FGPA的是烦琐的,CUDA是已经非常更加成熟的Python支撑/ C / C ++ / ARM ..无论哪种方式,这是一个问题过时

编程在CUDA一个GPU绝对容易。如果你没有在HDL FPGA编程的经验,将几乎肯定吃不消一个挑战你的,但你可以将它们与OpenCL的这有点儿类似于CUDA编程依然。然而,这是很难实现并可能很多比编程的GPU更昂贵。

<强>哪一个更快吗

GPU运行速度更快,但FPGA可以更有效。

GPU具有在高于FPGA都不能达到的速度行驶的潜力。但是,只有算法是专门适用于这一点。如果该算法是不是最佳的时,GPU将失去大量的性能。

在另一方面FPGA运行慢得多,但你可以实现特定问题的硬件,这将是非常有效和得到的东西在更短的时间内完成。

这有点像用叉子非常快与用勺子吃它更慢吃你的汤。

这两种设备基础它们对并行化的性能,但在每一个稍微不同的方式。如果该算法能不能形成很多执行相同的操作(关键字:SIMD)件时,GPU会更快。如果该算法可以作为一个长的管道来实现,该FPGA会更快。另外,如果你想使用浮点,FPGA会不会很快乐:)

我献给我的整个硕士论文到这个话题。 算法加速上FPGA与OpenCL的

scroll top