背景
随着异构计算越来越火,FPGA加速卡在诸多领域的应用也越来越多。
FPGA加速卡与GPU加速卡加速原理完全不同。
GPU本质上是依靠海量的并行运算单元,提升整体的吞吐量,来吃尽内存带宽。
FPGA是通用的门阵列,按照数据结构和运算特点搭建专用运算单元,能够以更低功耗和时延实现高吞吐。
上一篇我们已经完成了环境搭建,本篇将主要介绍项目结构和工作原理
整体架构
使用GPU加速时,CPU发送数据和指令到GPU即可,无需考虑执行指令的运算核的设计,FPGA芯片运算核是需要开发的。如下图所示:主机通过PCIe连接FPGA加速卡。因此在Host端和Device端都有相应的代码。
![](https://i-blog.csdnimg.cn/blog_migrate/5e63a68c9e4f4de92b8bace46f398938.png)
传统的FPGA开发方式使用HDL语言,无法动态的修改FPGA内部的功能。FPGA加速的核心就是运算核更贴近数据,当数据结构或是处理流程变化,就需要修改运算核结构。如果每次替换运算核需要让服务器断电显然不现实,因此行业的普遍做法就是将芯片内分区,分为不可修改的静态区和可以修改的动态区。静态区内就是DMA、PCIe、DDR等基础的功能核,用户的运算核则部署到动态区中,通过AXI接口连接。
![](https://i-blog.csdnimg.cn/blog_migrate/5be7f88db4cf2db37f47b04849059bc3.png)
xilinx提供了Host端和Device端的数据交互,我们需要解决的Host的程序和Device的Kernel。
如下图所示,项目构建分为3个部分。Host端的程序、FPGA的Kernel、以及衔接Kernel和FPGA内部的Link。由于有link的存在,消除了一部分FPGA芯片规格差异,降低了Kernel的开发难度也可以在一定程度上与硬件解耦。
![](https://i-blog.csdnimg.cn/blog_migrate/2a257a79244d9a8201c395fc78f66301.png)
创建第一个工程
官方推荐的第一个DEMO工程就是向量加法,方便初学者快速掌握项目结构和运行原理。
![](https://i-blog.csdnimg.cn/blog_migrate/d1e6b00a71d710500d68be63302ef0db.png)
创建工程首先需平台文件,我这里使用的是Alveo U50。常用的还有Alveo U200 , Alveo U50
![](https://i-blog.csdnimg.cn/blog_migrate/09d37862284e12d68ba250e4bfe6306f.png)
随便取个项目名字
![](https://i-blog.csdnimg.cn/blog_migrate/d5386909ecdb2400c51a95ec37f686de.png)
导入官方提供的例程,推荐初学者选择这个,包括了HLS、OpenCL的使用以及任务并行化的使用。