仅对英特尔可见 — GUID: aqp1615327854547
Ixiasoft
当影响“II”的关键路径是退出条件的计算而非循环携带的依赖关系时, Intel® HLS Compiler可以通过在计算退出条件时推测性地继续执行循环迭代来尝试放宽此调度约束。
如果确定满足退出条件,则这些额外迭代的影响被抑制。
通常,在程序确定是开始下一个循环迭代还是继续执行函数的其余部分之前,必须评估循环迭代的退出条件。此要求意味着循环启动间隔 (II) 不能低于计算退出条件所需的周期数。推测的迭代可以帮助降低循环 II,因为循环内的操作可以在评估退出条件的同时发生在函数流水线中。
这种推测性执行可以实现更低的II和更高的吞吐量,但也可能会在循环调用之间产生额外的开销(相当于推测的迭代次数)。较大的循环行程计数(trip count)有助于最大限度地减少这种开销。
对于任何推测的迭代,在迭代的循环退出条件已评估之前,都不会完成循环外部具有副作用的指令(例如,写入存储器或者流)。对于已满足循环退出条件时正在进行但仍未完成的循环迭代,副作用数据将被丢弃。
虽然推测的迭代可以改善循环“II”,但它们会占用流水线直至完成。在所有推测的迭代完成之前,无法启动新的循环调用。例如,在内循环的所有推测迭代完成之前,外循环的下一次迭代无法开始。
- 术语提示
- 循环调用是启动一系列循环迭代。一次循环迭代是循环体的一次执行。
图 19. 无推测执行的循环编制
图 20. 有推测执行的循环编制