一、用户程序优化
1.大部分优化的焦点:function函数和LOOP循环。
2.每个函数都能转换为特定的硬件组件。
3.循环主体的迭代是FPGA最乐见其成的范式,这个可以利用属性来提高并行度,
一般使用流水打拍和unroll展开的方式,来提升并行度执行效率。
4.图像或者阵列或者矩阵的逐像素运算是FPGA中最乐见的架构,这个是FPGA擅长处理的
二、代码的并行设计
1. 一般,HLS 编译器仅根据函数调用来推断任务级别并行度。因此,需要在硬件中并发运行的顺序代码块(例如循
环)应置于专用函数内。
2.将原始算法分解/分区为较小的组件,这些组件可通过串流来彼此进行通信。这样您就能在一定程度上掌握数据在
设计中流动的方式。较小的模块化组件的优势在于,可以按需进行赋值,从而提升并行性。
3.为了实现高性能硬件,HLS 工具必须基于顺序代码推断并行度,并利用它来实现更高的性能。
4.设计/程序需作为任务集合来构造,这些任务通过通信链接(也称为通道)来彼此发送消息。
三、阻塞模式和非阻塞模型架构图
四、控制驱动的任务级并行度和数据驱动的任务级并行度
1.数据驱动的任务级并行度
全程运行纯数据驱动,无需额外的控制逻辑;
各个task的管道是数据路径的hls::stream来通信。
2.控制驱动的任务级并行度
控制驱动的 TLP 适用于并行度建模,它依靠 C++ 的顺序语义,而非连续运行的线程。