OpenCL プログラミングについて質問したいことがあります。ウェーブフロントの 4 分の 1 が各サイクル クロックに対して命令を発行でき、ウェーブフロントを呼び出すには 4 サイクル クロックが必要であることを理解しています。VLIW アーキテクチャで命令を完了するには、8 サイクル クロックが必要です。したがって、別の波面を呼び出すことが解決策です。2 つの波面を呼び出すと、8 サイクル クロックになります。したがって、ウェーブフロント A が実行された後 (4 サイクル クロック)、ウェーブフロント B が実行されます (別の 4 サイクル クロック)。ウェーブフロント B が実行された後 (合計サイクル クロックは 8)、ウェーブフロント A は別の命令で再度実行されます。
質問は:
処理要素ごとに 4 つの ALU が別の命令を実行するために既に使用されている場合、どのように ALU は別の命令を実行しますか??
例: サイクル 1 で、作業項目 0 ~ 15 が命令「ADD」の実行を開始します。各プロセッシング エレメントの最初の ALU (SIMD/計算ユニットの合計 16 PE) は、「ADD」命令を計算します。
これは、ウェーブフロントのサイクル 2、3、および 4 で発生します (各 PE には、「ADD」命令を実行するためにビジー状態を維持する 4 つの ALU があります)。サイクル 5 では、ウェーブフロント 2 の 4 分の 1 が命令「SUBTRACT」の実行を開始します。最初のウェーブフロントから「ADD」命令を計算するためにビジーであるため、処理要素の ALU はどのように命令を計算するか (8 サイクル クロックかかるため、最初のサイクルのウェーブフロントの 4 分の 1 に対する命令「ADD」の実行は未完了であることを思い出してください)??
更新: 8 サイクル クロックは、書き込み後の読み取りのレイテンシを意味します。