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

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

5.2.1. 流水线循环

流水线是一种并行形式,其中循环的多个迭代如同组装线一样并发执行。
以如下具有3个阶段3次迭代的基础循环为例。其中一个循环阶段被定义为一个时钟周期内循环中发生的操作。
图 29. 具有3个阶段和3次迭代的基础循环


如果该循环的每个阶段需要一个时钟周期来执行,则该循环的延迟为9个周期。
下图显示具有3个阶段和4次迭代的流水线式基本循环中循环的流水线。
图 30. 具有3个阶段和4次迭代的流水线式循环


流水线式循环中因3次迭代而有5个时钟周期的延时(4次迭代为6个时钟周期),但无面积权衡取舍。第2个时钟周期期间,流水线式循环的Stage 1正在处理迭代2,Stage 2正在处理迭代1,且Stage 3为无效。

该循环的流水线循环初始化间隔为1。II等于1说明开始每个连续的循环迭代之间存在一个时钟周期的延迟。

Intel® HLS Compiler Pro Edition尝试以默认方式进行流水线循环,且循环流水线与循环展开由不同常量迭代计数约束。

并非所有循环都可以如具有3个阶段和4次迭代的流水线式循环中的循环一样流水线化,尤其是循环中的迭代依赖之前迭代中算得的值。

例如,考虑是否循环的Stage 1依赖于之前循环迭代的Stage 3期间计算得到的值。该情况下,第二次(橙色)迭代要等到第一次(蓝色)迭代达到Stage 3才能开始执行。这种依赖关系称为loop-carried dependency(循环携带依赖)。

本实例中,循环将以II=3流水线化。但由于II与循环迭代中延迟相同,因此实际上该循环根本不会对循环进行流水线处理。可使用如下公式估算循环的总体延迟:

其中是循环执行的周期数,而是单个循环迭代执行需要的周期数。

Intel® HLS Compiler Pro Edition支持无需展开内部循环的嵌套循流水线化。在计算嵌套循环的延迟时,请递归应用该公式。此递归意味着在II>1时,对内部循环造成的问题比对外部循环更加严重。因此,即使算法的外部循环中II>1,算法仍能在内部循环中II=1的情况下很好地执行大部分工作。