インテルのみ表示可能 — GUID: mwh1391807504031
Ixiasoft
6.3. 複数のコンピューティング・ユニット
より高いスループットを達成するために、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラーはカーネルごとに複数のコンピューティング・ユニットを生成できます。 オフライン・コンパイラーは、各計算単位を一意のパイプラインとして実装します。一般に、各カーネルコンピューティング・ユニットは複数のワークグループを同時に実行することができます。
全体のカーネルスループットを向上させるために、FPGAのハードウェア・スケジューラーはワークグループを追加の使用可能なコンピューティング・ユニットにディスパッチします。コンピューティング・ユニットは、フル・キャパシティーに達していない限り、ワークグループ割り当てに使用できます。
各作業グループは、実行を完了するのに同じ時間がかかるものとします。オフライン・コンパイラーが2つのコンピューティング・ユニットを実装する場合、各コンピューティング・ユニットは作業グループの半分を実行します。ハードウェア・スケジューラーがワークグループをディスパッチするため、このプロセスを独自のコードで管理する必要はありません。
オフライン・コンパイラーは、カーネルの最適な計算単位数を自動的に決定しません。カーネル実装のコンピューティング・ユニットの数を増やすには、以下のコードサンプルに示すように、 num_compute_units属性を使用してオフライン・コンパイラーが作成するコンピューティング・ユニットの数を指定する必要があります。
__attribute__((num_compute_units(2)))
__kernel void sum (__global const float * restrict a,
__global const float * restrict b,
__global float * restrict answer)
{
size_t gid = get_global_id(0);
answer[gid] = a[gid] + b[gid];
}
コンピューティング・ユニットの数を増やすと、スループットが向上します。ただし、以下の図に示すように、コンピューティング・ユニット間のグローバルメモリー帯域幅が増加するという犠牲を払って実行します。また、ハードウェア・リソースの使用率も向上します。
図 75. 複数の計算単位によるデータフロー