仅对英特尔可见 — GUID: wqe1590076710233
Ixiasoft
8.4.1. 启用 Intel® HLS Compiler来推断数据通路缓冲区容量要求
许多情况下, Intel® HLS Compiler可自动将缓冲区容量添加到任务系统设计的数据通路中以实现设计的最大吞吐量。遵循最佳实践有助于 Intel® HLS Compiler在需要时将数据通路缓冲容量有效添加到设计中。
component foo() { // Parse/compute data for tasks ihc::launch<task1>(data1); ihc::launch<task2>(data2); auto r1 = ihc::collect<task1>(); auto r2 = ihc::collect<task2>(); // Usage of r1, r2 }
该图中,Entry代表2个独立启动调用,并且Exit代表2个独立收集调用。
Entry仅在两个任务可以接收数据(即,两个任务都具有可用缓冲容量)时,才为他们提供接收工作。同样的,Exit仅当两个结果都可用时才使用此结果。
如果Task1和Task2具有相同数量的流水线级,则数据通路将以全吞吐量执行。调用程序函数中需要一些数据通路容量,以确保调用程序可时持续发布launch调用指令,与此同时collect调用指令等待任务函数完成。编译器自动添加此数据通路缓冲容量。
如果两个任务的流水线深度不同,设计就会遇到瓶颈,因为流水线深度要较浅的任务在等待其他任务完成时,不够缓冲容量来存储完成的结果。这样,就可向任务中较浅流水线深度的launch或collect调用指令添加缓冲容量。有关添加启动/收集缓冲容量的详细信息,请参阅必要时对设计明确添加缓冲容量。
Intel® HLS Compiler尝试自动平衡数据通路缓冲容量,但其仅可在设计遵循具体实践时才能自动添加数据通路容量。
- 组件或任务函数应执行以下操作之一:
- 自主完成所有工作,且无需启动其他任务。
- 作为发布ihc::launch或ihc::collect调用的协调器运行,但不做任何工作。
- 如果吞吐量是您设计中的优先考虑内容,就请避免使用同一任务函数的多个ihc::launch或ihc::collect调用指令,否则,就只能通过在循环中迭代来重复使用函数的调用指令。
- 将同一任务函数的ihc::launch和ihc::collect调用指令保留在相同块内。
使用Graph Viewer查看 High-Level Design Reports中设计的块结构来确定您的调用指令位于相同块中。
- 避免使用“if条件”限制ihc::launch和ihc::collect调用指令。
如果使用“if条件”限制ihc::launch和ihc::collect调用指令,则请对ihc::launch和ihc::collect调用指令使用相同的“if条件”。