インテルのみ表示可能 — GUID: ewa1426008434078
Ixiasoft
インテルのみ表示可能 — GUID: ewa1426008434078
Ixiasoft
5.5.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, write_only pipe int __attribute__((blocking)) req) { write_pipe (req, &data[get_global_id(0)]); }