インテルのみ表示可能 — GUID: qos1551547167191
Ixiasoft
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 で 、複数ループの並列実行方法についての詳細を参照してください。