Stable 阵列 - 2021.2 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

stable 编译指示可用于标记数据流区域的输入变量或输出变量。其作用是移除其对应的同步,假定用户保证此移除行为确实正确无误。

void dataflow_region(int A[...], ...
#pragma HLS stable variable=A
#pragma HLS dataflow
    proc1(...);
    proc2(A, ...);

如果不使用 stable 编译指示,并假定 Aproc2 读取,那么 proc2 会成为其所在位置的数据流区域内执行的初始同步(通过 ap_start)的一部分。这意味着仅当 proc2 同样准备好重新启动后,proc1 才能重新启动,这会阻止数据流迭代重叠,从而可能导致性能下降。stable 编译指示表明无需此同步亦可保持操作正确性。

在以上示例中,如无 stable 编译指示并假定 Aproc2 读取(因为 proc2 当前绕过任务),将出现性能损失。

通过 stable 编译指示,编译器假定:
  • 如果 Aproc2 读取,那么执行 dataflow_region 时,任何其它进程或调用上下文都不会覆盖读取的存储器位置。
  • 如果 Aproc2 写入,那么执行 dataflow_region 时,任何其它进程或调用上下文在定义写入的存储器位置前都不会读取这些位置。

典型场景是仅当数据流区域尚未开始执行或者已完成执行时,调用程序才会更新或读取这些变量。