インテルのみ表示可能 — GUID: npn1500574869050
Ixiasoft
7.6. ループパイプラインのメモリー依存性の最小化
インテル® FPGA SDK for OpenCL™ Offline Compiler は、同じスレッドからのメモリーアクセスがプログラムの命令に従うことを保証します。 NDRangeカーネルをコンパイルするときは、障壁を使用して同じワークグループ内のスレッド間でメモリーアクセスを同期させます。
ループの依存関係は、メモリーアクセスに関連するレイテンシーのためにSingle Work-Itemカーネルにボトルネックを招く可能性があります。オフライン・コンパイラーは、依存メモリー動作が完了するまでメモリー動作を延期します。これは、ループ開始間隔(II)に影響を与える可能性があります。オフライン・コンパイラーは、最適化レポートのメモリー依存性を示します。
ループパイプライニングのメモリー依存性の影響を最小限に抑えるには:
- オフライン・コンパイラーが誤った依存関係を想定していないことを確認します。
スタティック・メモリー依存分析が依存関係が存在しないことを証明できない場合、オフライン・コンパイラーは依存関係が存在するとみなし、依存関係を強制するようにカーネル実行を変更します。メモリーシステムがストールフリーであれば、依存関係の影響は小さくなります。
- ロード・ストア・ユニットに対するデータ依存性を伴う読出し動作後の書込みは、わずか2クロック・サイクル(II = 2)が必要です。他のストールフリーのシナリオでは、最大7クロックサイクルかかることがあります。
- 読み出し後書き込み(制御依存)動作は、オフライン・コンパイラーによって完全に解決できます。
- 依存関係がないと確信できる場合、カーネルコードのループの前に#pragma ivdep行を追加してスタティック・メモリー依存解析を無効にします。