インテルのみ表示可能 — GUID: ewa1403546437449
Ixiasoft
インテルのみ表示可能 — GUID: ewa1403546437449
Ixiasoft
5.10. レジスターの推論
オフライン・コンパイラーは、プライベート配列を単一の値のレジスター、または区分的なレジスターとして推論します。区分的な実装は非常に効率的なハードウェアをもたらしますが、オフライン・コンパイラーがデータのアクセスを静的に決定できなければなりません。区分的な実装を容易にするために、アクセスポイントを配列にハードコードします。また、配列にアクセスするループを展開することで、レジスターの推論を容易にすることもできます。
配列のアクセスを静的に推論できない場合、オフライン・コンパイラーは配列をレジスターとして推論する場合があります。ただしオフライン・コンパイラーは、単一のワークアイテム・カーネルに対し、それらの配列のサイズを64バイトに制限します。複数のワークアイテムを有するカーネルには実質的にサイズ制限はありません。
次のコードを例に示します。
int array[SIZE]; for (int j = 0; j < N; ++j) { for (int i = 0; i < SIZE - 1; ++i) { array[i] = array[i + 1]; } }
array[i]へのインデックスは、ループが展開されていないため静的に推論することができません。array[SIZE]のサイズが、単一ワークアイテム・カーネルにおいて64バイト以下である場合、オフライン・コンパイラーはarray[SIZE]を単一の値としてレジスターに実装します。array[SIZE]のサイズが、単一ワークアイテム・カーネルにおいて64バイトより大きい場合、オフライン・コンパイラーは配列全体をブロックRAMに実装します。複数のワークアイテム・カーネルの場合、サイズが1キロバイト (KB) 未満である限り、オフライン・コンパイラーは単一の値としてarray[SIZE]をレジスターに実装します。