Intel®高层次综合编译器专业版: 最佳实践指南

ID 683152
日期 12/04/2023
Public
文档目录

3.3.3.1.2. 流水线

与实现具有多流水线阶段CPU类似,编译器生成深度流水线化(deeply-pipelined)硬件数据通路。请参阅FPGA硬件设计概念源代码如何成为定制硬件数据通路了解更多信息。

流水线允许并发处理许多数据项(在同一时钟周期),并同时通过保持数据通路中硬件的占用状态来对其加以有效利用。

流水线化和向量化流水线数据通路

考虑代码被映射到硬件的实例,如下:

图 13. 实例代码映射到硬件


在CPU上运行时多次调用此代码不会被流水线化。一次调用的输出完成后,才会将输入传递到代码的下一次调用。

在FPGA器件上,这种非流水线调用会导致数据通路的吞吐量差和占用率低,因为当数据通路的一些部分正在对数据进行操作时,许多其它操作处于空闲状态。下图展示了该场景下调用的吞吐量和占用情况:
图 14. 非流水线执行导致低吞吐量和低占用率


Intel® HLS Compiler尽可能地流水线化您的设计。每个周期都可以将新输入发送到数据通路,从而为您带来被完全占用的数据通路并实现更高的吞吐量,如下图所示:
图 15. 数据通路流水线化可实现高吞吐量和高占用率


您可以通过向量化流水线硬件来获得更高的吞吐量。硬件向量化可提高吞吐量,但需要更多FPGA面积来存储流水线硬件的额外副本:
图 16. 向量化流水线数据通路,实现高吞吐量和高占用率


了解需要流水线化的数据来自何处是在FPGA上实现高性能设计的关键。您可以使用以下数据源来利用流水线:

  • 组件
  • 循环迭代