dataflow可谓是FPGA性能体现的绝佳表现方式,数据在硬件中能流动起来,靠的就是dataflow!
下面我们将探究SDAccel OpenCL开发方式下两种dataflow的实现方式:pipe传输方式与function传输方式。
以及SDAccel HLS 开发方式下两种dataflow的编程风格:loop与stream
SDAccel Dataflow 那点事儿(一)
SDAccel Dataflow 那点事儿(二)
SDAccel Dataflow 那点事儿(三)
SDAccel Dataflow 那点事儿(四)
dataflow pipe 方式简介
对于OpenCL来说,Dataflow的对象除了function的方式之外,还有Kernel的方式,因此,Dataflow在OpenCL中还有一种在Kernel与Kernel之间的传输方式,也就是通过pipe传输。pipe的传输机制采用的其实是FIFO的方式,因此在使用pipe传输的过程中需要设置FIFO的深度,也就是在传输过程中有多少的缓存深度。
代码实现
- 实现示意图
1 |
|
- host端代码
1 |
|
- device端代码
1 |
|
关于Pipe不支持结构体的解决办法
当前针对SDAccel 2017.2 版本测试发现关于Pipe的Dataflow方式是不支持结构体类型的,因此对于借助向量化的数据来说,结构体的数据类型传输会造成一定的困难,基于此问题,我们采用Python脚本加宏定义的方式进行代码生成,进而实现结构体的Pipe传输
- 结构体类型的向量加法
1 |
|
- 宏定义模式
1 |
|
- Python 脚本
1 |
|
实验结果
- 非结构体类型Pipe硬件仿真波形图

- 结构体类型Pipe硬件仿真波形图




参考
xilinx github SDAccel_Examples/getting_started/dataflow/
ug1253 SDx Pragma Reference Guide 2017.2
ug1207 SDAccel Environment Optmizaton Guide
