インテルのみ表示可能 — GUID: mwh1391807511509
Ixiasoft
7.2.1. 連続メモリー・アクセス
連続したメモリーアクセスの最適化は、カーネルにおけるグローバルロードおよびストア動作のアクセスパターンを静的に分析します。 カーネル呼び出し全体で発生する順次ロードまたはストア動作の場合、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラーグローバルメモリー内の連続した位置にカーネルがアクセスするように指示します。
次の式を検討してみましょう。
__kernel void sum ( __global const float * restrict a,
__global const float * restrict b,
__global float * restrict c )
{
size_t gid = get_global_id(0);
c[gid] = a[gid] + b[gid];
}
アレイaからのロード動作は、Work-ItemのグローバルIDの直接関数であるインデックスを使用します。配列インデックスをWork-ItemのグローバルIDに基づいて設定することにより、オフライン・コンパイラーは連続したロード動作を指示できます。これらのロード動作は、入力配列から順番にデータを検索し、必要に応じてパイプラインに読み取ったデータを送ります。次に、連続ストア動作は、計算パイプラインを出る結果の要素をグローバルメモリー内のシーケンシャルな場所に格納します。
ヒント: オフライン・コンパイラーがロード動作に対してより積極的な最適化を実行できるように、読み出し専用グローバルバッファーにconst修飾子を使用します。
次の図は、連続したメモリーアクセス最適化の例を示しています。
図 79. フラッシュメモリー・アクセス
連続したロードおよびストア動作は、アクセス速度の向上およびハードウェア・リソースの必要性の低減につながるため、メモリーアクセス効率を向上させます。データは、パイプラインの計算部分に同時に出入りし、計算とメモリーアクセスの間に重複が可能です。可能な場合、グローバルメモリーにアクセスするロードおよびストア動作の連続するメモリー位置をインデックスするWork-ItemIDを使用します。グローバルメモリーへの順次アクセスは、理想的なアクセスパターンを提供するため、メモリー効率を向上させます。