因此,重新表述问题,是否有任何理由支持FPGA?或者有第三个选择吗?
因此,重新表述问题,是否有任何理由支持FPGA?或者有第三个选择吗?
我之前调查了同样的问题。在与从事FPGA工作的人交谈后,我得出了以下结论:
如果您能让CUDA为您工作,那么它可能是目前最好的选择。它肯定比FPGA更灵活。
其他选择包括来自ATI的Brook,但除非发生重大事件,否则它不如CUDA被广泛采用。此外,还有所有传统的高性能计算选项(x86 / PowerPC / Cell集群),但它们都相当昂贵。
希望对您有所帮助。
我会选择CUDA。
我从事图像处理工作已经多年,一直在尝试硬件附加设备。首先是i860,然后是Transputer,然后是DSP,再然后是FPGA和直接编译到硬件中。
不可避免地发生的是,当硬件板真正调试和可靠,并且代码已经移植到它们上面时,常规CPU已经超越了它们,或者托管机器架构发生了变化,我们无法使用旧的板子,或者板子制造商破产了。
通过坚持使用像CUDA这样的东西,您不会被绑定在一个小型专业FPGA板制造商上。 GPU性能的提升速度比CPU快,由玩家资助。 它是一种主流技术,因此将来可能会与多核CPU合并,从而保护您的投资。
显然这是一个复杂的问题,问题可能还涉及到单元处理器。对于其他相关问题,可能没有一个正确的答案。
根据我的经验,在抽象的实现中,即使用编译后的高级语言与机器级别的实现相比,复杂算法实现不可避免地会有性能损失。这对于任何类型的FPGA和处理器都是适用的。专门设计用于实现复杂算法的FPGA将比其处理元素为通用型、允许从输入控制寄存器、数据I/O等进行编程的FPGA表现更好。
另一个常见的例子,其中一个FPGA可以具有更高的性能,是在串联进程中,其中一个处理过程的输出变为另一个进程的输入,它们无法同时完成。在FPGA中串联进程很简单,而且可以大大降低内存I/O需求,而处理器内存将被用于有效地串联两个或多个存在数据依赖关系的进程。
同样适用于GPU和CPU。使用C实现的算法在CPU上执行,如果没有考虑缓存内存或主内存系统的固有性能特征,它的性能就不会像那些有这种考虑的实现一样好。当然,不考虑这些性能特征可以简化实现。但会以性能为代价。
我没有直接使用过GPU,但知道它固有的内存系统性能问题,因此它也会面临性能问题。