説明
このルールは、オーバーヘッドとなるような、あまりにも頻繁に呼び出される演算ユニットをチェックします。
説明
ワークグループは、複数の演算ユニット (CU) に処理を分割する強力なメカニズムを提供します。ただし、ワーク サイズが小さすぎるカーネルを作成すると、各 CU の呼び出しに起動時間がかかるため、オーバーヘッドが発生します。AMD では、グローバルとローカルのワーク サイズの適切なバランスを見つけて、全体的なパフォーマンスを最適化することをお勧めしています。
グローバル ワーク サイズを (1024, 1024, 1) を検討してみます (AMD では推奨しません)。
__kernel __attribute__ ((reqd_work_group_size(4, 4, 1)))
void madd(__global int* a, __global int* b, __global int* c) {
int i = get_global_id(1)*get_global_size(0) + get_global_id(0);
c[i] = a[i] + b[i];
}
これに対し、AMD では次を推奨しています。
__kernel __attribute__ ((reqd_work_group_size(<b>256</b>, <b>256</b>, 1)))
void madd(__global int* a, __global int* b, __global int* c) {
int i = get_global_id(1)*get_global_size(0) + get_global_id(0);
c[i] = a[i] + b[i];
}