インテルのみ表示可能 — GUID: ewa1454512708517
Ixiasoft
インテルのみ表示可能 — GUID: ewa1454512708517
Ixiasoft
12.1.1.8. RTLモジュールと外部メモリーの通信
RTLモジュールと外部メモリーの通信は、通信が必要かつ避けられない場合にのみ行うようにしてください。
次の例は、OpenCLライブラリーへの容易な統合を行うためのRTLモジュールのコード構築方法を示しています。
複雑なRTLモジュール | 簡潔化されたRTLモジュール |
---|---|
// my_rtl_fn does: // out_ptr[idx] = fn(in_ptr[idx]) my_rtl_fn (in_ptr, out_ptr,idx); |
int in_value = in_ptr[idx]; // my_rtl_fn now does: out = fn(in) int out_value = my_rtl_fn (in_value); out_ptr[idx] = out_value; |
左側の複雑なRTLモジュールは、外部メモリーから値を読み出し、その値にスカラー関数を実行し値をグローバルメモリーに書き戻します。このようなRTLモジュールは、OpenCLライブラリーに統合する際の記述が困難です。さらに、このRTLモジュールの検証は難しく、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーにおいて非常に控えめなポインター分析が行われます。
右側の簡潔化されたRTLモジュールは、複雑なRTLモジュールと全体的には同じ機能を提供します。ただし、簡潔化されたRTLモジュールは、グローバルメモリーに接続せずにスカラーからスカラーの計算のみを行います。この簡潔なRTLモジュールをOpenCLライブラリーに統合することで、オフライン・コンパイラーは作成されるOpenCLカーネルをより容易に分析できるようになります。
RTLモジュールは、外部メモリーと通信するためのAvalon®-MMポートを必要とする場合があります。このAvalon-MMポートは、OpenCLカーネルの他のグローバルロードおよびストアユニットの接続先と同じアービトレーション・ネットワークに接続します。
RTLモジュールがメモリーポインターを引数として受け取ると、オフライン・コンパイラーは次のメモリーモデルを強制します。
- RTLモジュールがポインターへ書き込む場合、OpenCLカーネルの他の部分はこのポインターに対する読み書きはできません。
- RTLモジュールがポインターから読み取る場合、OpenCLカーネルの他の部分および他のRTLモジュールもまた、このポインターから読み取ることができます。
- MEM_INPUT属性のaccessフィールドを設定することで、RTLモジュールのメモリーポインターの使用方法を指定できます。値を検証する方法がないため、アクセスを行うための値が正しく設定されていることを確認してください。