我不明白如何使用FPGA加速算法。目前,我正在四核笔记本电脑上运行耗时的实时算法,以便可以并行完成四个计算。
最近我被告知FPGA可能会产生更好的性能。我不明白那是怎么回事。有人可以解释FPGA如何加速算法,以及我应该切换到Xilinx或Altera FPGA解决方案还是继续在我的四核笔记本电脑上执行计算。
附加详细信息:该算法使用通过小波包变换输入的输入来运行20个人工神经网络。
谢谢大家的出色回答。
我不明白如何使用FPGA加速算法。目前,我正在四核笔记本电脑上运行耗时的实时算法,以便可以并行完成四个计算。
最近我被告知FPGA可能会产生更好的性能。我不明白那是怎么回事。有人可以解释FPGA如何加速算法,以及我应该切换到Xilinx或Altera FPGA解决方案还是继续在我的四核笔记本电脑上执行计算。
附加详细信息:该算法使用通过小波包变换输入的输入来运行20个人工神经网络。
谢谢大家的出色回答。
Answers:
我的一位同事基准这一点,得出的结论是,一旦你有超过100的FPGA将超越个人电脑的独立,整数,将适合在FPGA任务。对于浮点任务,GPGPU始终优于FPGA。对于狭窄的多线程或SIMD操作,CPU经过了高度优化,并以比FPGA通常所能达到的时钟速度更高的时钟速度运行。
其他警告:任务必须独立。如果任务之间存在数据依赖关系,那么这将限制计算的关键路径。FPGA适用于布尔评估和整数数学以及硬件低延迟接口,但不适用于与存储器相关的工作负载或浮点数。
如果您必须将工作负载保留在DRAM中,那将是瓶颈,而不是处理器。
FPGA的工作原理与处理器完全不同。
对于处理器,您需要编写软件来告诉硬件该怎么做。在FPGA上,您内部描述了“硬件外观”。就像您正在为算法专门制造芯片一样。
这可以加速很多事情,并可以降低功耗。但是它有缺点:开发需要更长的时间并且要复杂得多。您需要以完全不同的方式进行思考,并且不能使用直接用于软件的算法。
对于人工神经网络,FPGA是一个不错的选择。在这个领域有很多正在进行的研究。
它在很大程度上取决于算法,但是原理可以很简单地解释。
假设您的算法必须对许多8位数字求和。您的CPU仍然需要获取每条指令,从RAM或高速缓存中获取操作数,执行总和,将结果存储在高速缓存中,然后继续进行下一个操作。管道有所帮助,但是您只能执行与内核一样多的同时操作。
如果使用FPGA,则可以实现大量并行工作的简单加法器,从而可能并行处理成千上万的和。尽管单个操作可能会花费更多时间,但是您具有很高的并行度。
您也可以使用GPGPU来执行类似的任务,因为它们也由许多更简单的内核组成。
计算设备的专业化大约分为3个级别:
CPU(就像您的笔记本电脑一样)是它们中最通用的。它可以做所有事情,但是这种多功能性的代价是速度慢,功耗高。CPU可以随时随地进行编程,指令来自RAM。用于CPU的程序快速,廉价,易于编写且非常易于更改。
FPGA(这意味着现场可编程门阵列)是中间层。顾名思义,它可以在工厂外“现场”编程。FPGA通常会被编程一次,这一过程可以描述为设置其内部结构。完成此过程后,它的行为就像一台微型计算机,专门为您为其选择的一项任务。这就是为什么它的性能要优于通用CPU的原因。对FPGA进行编程非常困难且昂贵,而对其进行调试则非常困难。
ASIC(这意味着专用集成电路)是终极专家。它是为仅一项任务而设计和生产的芯片,它可以非常快速,高效地完成任务。无法对ASIC进行重新编程,它使出厂时得到完全定义,并且在不再需要其工作时无用。只有大型公司才能负担得起设计ASIC的工作,而调试它们是好的,几乎是不可能的。
如果您考虑“核心”,请这样看:CPU具有4、6,也许8个可以完成所有任务的大核心。ASICS通常具有成千上万个内核,但只有很小的内核,仅能执行一项操作。
您可以查看比特币采矿社区。他们做SHA256哈希。
当然,批量生产时这些ASIC婴儿的价格将近2000美元,但它使您了解了“千篇一律的交易”如何对付专家。
唯一的问题是:FPGA可以为您带来比设计所需的更多节省吗?当然,您可以尝试在20 PCS上运行它,而不是在一台笔记本电脑上运行它。
是的,在某些特殊任务上,FPGA可以胜过现代CPU(例如Intel i7),但是有改善神经网络性能的更简便,更便宜的方法。
所谓便宜-是指全力以赴,不是FPGA IC的成本,而是FPGA的非常快的内存(神经网络需要它)和整个开发过程。