私はこのような解決策を見てきました:
kernel dp_square (const float *a,
float *result)
{
int id = get_global_id(0);
result[id] = a[id] * a[id];
}
と
kernel dp_square (const float *a,
float *result, const unsigned int count)
{
int id = get_global_id(0);
if(id < count)
result[id] = a[id] * a[id];
}
id <countのチェックは重要ですか?カーネル作業項目が使用できない項目を処理しようとするとどうなりますか?最初の例にない理由は、プログラマーがグローバルサイズが処理される要素の数と等しいことを確認するだけであるということでしょうか(これは正常です)。