インテル®高位合成 (HLS) コンパイラー プロ・エディション: ベスト・プラクティス・ガイド

ID 683152
日付 12/16/2019
Public
ドキュメント目次

6.1. 複数ループの並列実行

HLSタスクを使用すると、順次ループの実行が、ループネストのコンテキスト内でパイプライン方式で可能になります。
たとえば、次のコードサンプルでは、1番目のループと2番目のループは、コンポーネント foo() の異なる呼び出しを実行できます。これは、呼び出しのパイプライン処理が、 インテル®HLSコンパイラー プロ・エディションによって次のように実行できる場合です。
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() の同じ呼び出しでは、2つのループの並列実行はできません。タスクのシステムで用意されている方法によってこれが実現できます。それには、ループのうちの1つを非同期タスクに移動します。非同期タスクの1番目のループでは、2番目のループの実行が、1番目のループと同時にできます。
void offloaded_work() {
  // first loop
  for (int i = 0; i < n; i++) {
    // Do something
  }
}

component void foo() {
  ihc::launch(offloaded_work);
  // second loop
  for (int i = 0; i < m; i++) {
    // Do something else
  }
  ihc::collect(offloaded_work);
}

チュートリアル <quartus_installdir>/hls/examples/tutorials/system_of_tasks/parallel_loop で 、複数ループの並列実行方法についての詳細を参照してください。