仅对英特尔可见 — GUID: qos1551547167191
Ixiasoft
8.1. 并行执行多个循环
使用HLS任务,就可在循环嵌套语境下以流水线方式运行顺序循环。
例如,在以下代码实例中,如果 Intel® HLS Compiler Pro Edition可将调用流水线化,则第一和第二循环可执行组件foo()的不同调用:
component void foo() { // first loop for (int i = 0; i < n; i++) { // Do something } // second loop for (int i = 0; i < m; i++) { // Do something else } }
然而,组件foo()的同一调用无法并行执行两个循环。然而任务系统提供将循环移入异步任务的方法来实现该操作。在第一循环位于异步任务的情况下,第二循环可与第一循环同时运行。
void first_loop() {
for (int i = 0; i < n; i++) {
// Do something
}
}
void second_loop() {
for (int i = 0; i < m; i++) {
// Do something else
}
}
component void foo() {
ihc::launch<first_loop>();
ihc::launch<second_loop>();
ihc::collect<first_loop>();
ihc::collect<second_loop>();
}
查看教程 <quartus_installdir>/hls/examples/tutorials/system_of_tasks/parallel_loop了解更多有关如何并行运行多个循环。