用于图像处理的 CUDA 与 FPGA;哪个更好
你问的问题不是那么容易回答的。这取决于许多因素。
我会尝试以相反的顺序给你解释:
哪一个容易实现?
CUDA 和 FPGA 之间没有直接的比较,因为 CUDA 是一种编程语言,而 FPGA 是硬件架构。可以使用 HDL(Verilog 或 VHDL)或使用 OpenCL 在更高级别对 FPGA 进行编程。另一方面,CUDA 是专为 Nvidia GPU 设计的编程语言。
所以,你可以比较:
- FPGA 到 GPU 或
- CUDA 到 OpenCL 或 HDL
在 CUDA 中编程 GPU 绝对是最简单的方法。如果您对 HDL 没有任何经验,那几乎肯定对您来说是一个太大的挑战。OpenCL for FPGA 可能是一条路。然而,它更难实施,而且可能更昂贵。
哪个更快?
GPU 运行速度更快,但 FPGA 可以更高效。
GPU 具有以高于 FPGA 所能达到的速度运行的潜力。但仅适用于特别适合的算法。如果算法不是最优的,GPU 会损失很多性能。
另一方面,FPGA 运行速度要慢得多,但您可以实现特定于问题的硬件,这将非常高效并更快地完成工作。
这有点像用叉子快速吃汤而不是用勺子慢慢吃汤。
哪一个更适合图像处理,如压缩、水印等?
GPU 是为像素级图像处理而发明的,因此您可以期待它的性能更好。压缩主要是信号处理,所以我会把赌注押在 FPGA 上。水印在 GPU 上会更快。
两种设备的性能都基于并行化,但各自的方式略有不同。如果算法可以细化成许多块执行相同的操作(关键字:SIMD),GPU 会更快。如果算法可以实现为长流水线,FPGA 会更快。另外,如果你想使用浮点,FPGA 不会很满意 :)
Altera 网站上有一些 FPGA 算法示例。其中大多数都可以击败 GPU 解决方案。
CUDA 有大量的示例和库。
资料来源:我写了一篇关于比较 FPGA (OpenCL) 和 GPU 的性能的硕士论文 FPGA 与 OpenCL 的算法加速