インテルのみ表示可能 — GUID: mwh1391806064852
Ixiasoft
インテルのみ表示可能 — GUID: mwh1391806064852
Ixiasoft
5.4.3.1. チャネルのワークアイテムのシリアル実行
カーネルにチャネルを実装すると、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーは、カーネルの動作は計算ユニットに同時に最大1つのインフライトのワークグループを持っているのと同等であるということを適用します。コンパイラーもまた、カーネルがチャネルをシリアル実行することを保証します。よってカーネルは、IDの小さいワークアイテムから実行します。ワークアイテムは識別子 (x、y、z、group) を持ちます。このx、y、zはローカルの3D識別子であり、groupはワークグループの識別子です。
ワークアイテムID (x0、y0、z0、group0) は、次の条件のいずれかが当てはまる場合、ID (x1、y1、z1、group1) よりも小さいとみなされます。
- group0 < group1の場合
- group0 = group1、 z0 < z1の場合
- group0 = group1、 z0 = z1、 y0 < y1の場合
- group0 = group1、 z0 = z1、 y0 = y1、 x0 < x1の場合
インクリメンタルIDをともなうワークアイテムは、シーケンシャルに実行されます。例えば、ID (x0、y0、z0、group0) をともなうワークアイテムは、チャネル書き込み呼び出しをまず実行します。その後、ID (x1、y0、z0、group0) をともなうワークアイテムが呼び出しを実行します。この順序を定義することで、システムが外部モデルと検証可能になるよう保証しています。
複数のワークアイテムをともなうループのチャネル実行
次のように、複数のワークアイテムがあるループの本体にチャネルが存在する場合、各ループの反復は後続の反復の前に実行されます。これは、ワークグループの各ワークアイテムのループ反復0が、ワークグループの各ワークアイテムの反復1の前に実行されることを意味します。
__kernel void ordering (__global int * data, int X) { int n = 0; while (n < X) { write_channel_intel (req, data[get_global_id(0)]); n++; } }