FPGA可以执行多核PC吗?


20

我不明白如何使用FPGA加速算法。目前,我正在四核笔记本电脑上运行耗时的实时算法,以便可以并行完成四个计算。

最近我被告知FPGA可能会产生更好的性能。我不明白那是怎么回事。有人可以解释FPGA如何加速算法,以及我应该切换到Xilinx或Altera FPGA解决方案还是继续在我的四核笔记本电脑上执行计算。

附加详细信息:该算法使用通过小波包变换输入的输入来运行20个人工神经网络。

谢谢大家的出色回答。


1
您是否考虑过在台式机(或服务器)CPU上运行算法?这些通常比笔记本电脑的CPU更快。(按恒定因素,但仍要更快。)
ntoskrnl 2014年

1
考虑使用GPU进行神经网络处理。GPU有许多可以并行乘以浮点数的单元。
卡米尔

@ntoskrnl我假设他拥有i5或更好的cpu(4核),因此台式机或服务器上的性能将与时钟速度成正比。也许在Xeon上,由于巨大的缓存和更好的内存带宽,他的性能几乎无法提高(20%?),但这还不算什么。
卡米尔2014年

你有什么CPU?
卡米尔2014年

问题有趣的时间,我们得到了一个类似的问题上networkengineering.SE
迈克·潘宁顿

Answers:


23

我的一位同事基准这一点,得出的结论是,一旦你有超过100的FPGA将超越个人电脑的独立整数,将适合在FPGA任务。对于浮点任务,GPGPU始终优于FPGA。对于狭窄的多线程或SIMD操作,CPU经过了高度优化,并以比FPGA通常所能达到的时钟速度更高的时钟速度运行。

其他警告:任务必须独立。如果任务之间存在数据依赖关系,那么这将限制计算的关键路径。FPGA适用于布尔评估和整数数学以及硬件低延迟接口,但不适用于与存储器相关的工作负载或浮点数。

如果您必须将工作负载保留在DRAM中,那将是瓶颈,而不是处理器。


3
要确定DRAM是否是极限,您还必须知道FPGA具有许多小型分布式RAM(例如500个独立的9kbit RAM块),它们可以在同一时钟周期内进行读取/写入。
maxy 2014年

19

FPGA的工作原理与处理器完全不同。

对于处理器,您需要编写软件来告诉硬件该怎么做。在FPGA上,您内部描述了“硬件外观”。就像您正在为算法专门制造芯片一样。

这可以加速很多事情,并可以降低功耗。但是它有缺点:开发需要更长的时间并且要复杂得多。您需要以完全不同的方式进行思考,并且不能使用直接用于软件的算法。

对于人工神经网络,FPGA是一个不错的选择。在这个领域有很多正在进行的研究。


实际上,FPGA开发通常使用Verilog或VHDL之类的语言来描述行为而不是实现,这一事实有时有用,但有时会使异步时序逻辑的设计复杂化。如果要指定实现,则传播延迟在某种程度上是一致的,但是在行为语言中,甚至不能保证它们是肯定的。FPGA设计的关键在于,这些语言使许多(可能成百上千个)芯片不同部分同时执行简单行为变得非常容易。
2014年

13

它在很大程度上取决于算法,但是原理可以很简单地解释。

假设您的算法必须对许多8位数字求和。您的CPU仍然需要获取每条指令,从RAM或高速缓存中获取操作数,执行总和,将结果存储在高速缓存中,然后继续进行下一个操作。管道有所帮助,但是您只能执行与内核一样多的同时操作。

如果使用FPGA,则可以实现大量并行工作的简单加法器,从而可能并行处理成千上万的和。尽管单个操作可能会花费更多时间,但是您具有很高的并行度。

您也可以使用GPGPU来执行类似的任务,因为它们也由许多更简单的内核组成。


GPGPU是神经网络使用的绝佳输入!
Botnic

也有神经网络ASIC。英特尔曾经制造出一种在80年代实现16种神经元的电池。
Lior Bilia 2014年

@LiorBilia好吧,我对它们一无所知:)。我从未使用过神经网络,而很少使用FPGA
clabacchio

@clabacchio软件神经网络是一个程序,大多数情况下会对浮点数进行乘法和比较运算。我主要是说... 95%或更多。
卡米尔2014年

传统的CPU可以很好地将许多8位数字相加。在快速的机器上,执行时间将由从内存中获取数据的成本决定(99%的代码获取将来自catch)。一个更有趣的示例是使用使用需要相当“异常”的排列或位排列的方案编码的数据。例如,如果一条视频采样数据返回红色,绿色和蓝色的交错位,则FP​​GA可以轻松地重新排列这些位;传统的CPU会有更多麻烦。
2014年

6

计算设备的专业化大约分为3个级别:

CPU(就像您的笔记本电脑一样)是它们中最通用的。它可以做所有事情,但是这种多功能性的代价是速度慢,功耗高。CPU可以随时随地进行编程,指令来自RAM。用于CPU的程序快速,廉价,易于编写且非常易于更改。

FPGA(这意味着现场可编程门阵列)是中间层。顾名思义,它可以在工厂外“现场”编程。FPGA通常会被编程一次,这一过程可以描述为设置其内部结构。完成此过程后,它的行为就像一台微型计算机,专门为您为其选择的一项任务。这就是为什么它的性能要优于通用CPU的原因。对FPGA进行编程非常困难且昂贵,而对其进行调试则非常困难。

ASIC(这意味着专用集成电路)是终极专家。它是为仅一项任务而设计和生产的芯片,它可以非常快速,高效地完成任务。无法对ASIC进行重新编程,它使出厂时得到完全定义,并且在不再需要其工作时无用。只有大型公司才能负担得起设计ASIC的工作,而调试它们是好的,几乎是不可能的。

如果您考虑“核心”,请这样看:CPU具有4、6,也许8个可以完成所有任务的大核心。ASICS通常具有成千上万个内核,但只有很小的内核,仅能执行一项操作。

您可以查看比特币采矿社区。他们做SHA256哈希。

  • CPU核心i7:0.8-1.5 M哈希/秒
  • FPGA:5-300M哈希/秒
  • ASIC:每一个微型芯片12,000M哈希/秒,一个160芯片设备的2000000M(是,即2T)哈希/秒

当然,批量生产时这些ASIC婴儿的价格将近2000美元,但它使您了解了“千篇一律的交易”如何对付专家。

唯一的问题是:FPGA可以为您带来比设计所需的更多节省吗?当然,您可以尝试在20 PCS上运行它,而不是在一台笔记本电脑上运行它。


哈希是一个非常特殊的情况。请注意,基于scrypt的硬币(故意)不能通过专用硬件加速。
pjc50

1
&ASIC调试通常在发货之前进行仿真处理。因此从规格到生产通常需要6个月或更长时间。制造后诊断错误是昂贵的,但并非不可能。
pjc50

尽管很困难,但实际上可能非常困难,其中包括边界扫描,JTAG测试和使用FIB的直接技术等。因此调试它们并非不可能,您只需要知道自己在做什么即可。 。如今,由于大多数设备都是ASIC(包括ARM处理器),所以ASIC现在更多地涉及设计流程(HDL,Synthesis,P&R),而实际上它是指实际设备。
占位符

@ pjc50是的,这就是我的意思-在特殊情况下,速度差异很大。但是,scrypt asics仍然拥有CPU和GPU。不是由百万因素(如SHA),但仍远超过100
Agent_L

@placeholder是的,但是即使您发现了该错误,对于已经制造的所有这些芯片也没有太大用处。我的意思是“调试”就像“消除错误”,而不仅仅是“在这里”。
Agent_L 2014年

5

是的,在某些特殊任务上,FPGA可以胜过现代CPU(例如Intel i7),但是有改善神经网络性能的更简便,更便宜的方法。

所谓便宜-是指全力以赴,不是FPGA IC的成本,而是FPGA的非常快的内存(神经网络需要它)和整个开发过程。

  1. 使用SSE-我已经看到了非常简单的神经网络实现,其性能提高了2-3倍。如果您的笔记本电脑中没有专用的GPU,那么这可能是个好主意。

    Vincent Vanhoucke和Andrew Senior提高了CPU上神经网络的速度

  2. 使用GPGPU(图形处理单元上的通用计算)-我认为您可以在GeForce 730M等中型笔记本电脑GPU上实现100-200倍的性能提升。

    这是神经网络的实现(和免费代码)。它使用Nvidia CUDA。

    GPGPU方法具有很好的可扩展性,如果您在某个时候意识到需要更多的计算能力-您可以仅使用具有更强大GPU的台式计算机,甚至可以使用具有4992内核的Nvidia Tesla K80(价格昂贵)。


1
这里的问题是定义性能。如果我们的意思是更快,那么是的,fpga可以比普通cpus更快。但是,fpga不如CPU灵活,它们被设计为仅执行预定义的任务即可有效执行。执行另一项任务将意味着更改其内部布线,从而实际实施另一种fpga
Gianluca Ghettini 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.