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

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

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了解更多有关如何并行运行多个循环。