私はOpenCLでこのコードを持っています:
__kernel void vector_add(__global float *C) {
int i = get_global_id(0);
float t =3.5f;
C[i] = t;
}
GPU で実行すると、変数 C の戻り値は 3.5 なので、問題ありません。しかし、CPU で実行すると、戻り値は 3.0 です。これは、任意の float 値で発生します。
しかし、このコードを実行すると:
__kernel void vector_add(__global const float A, __global float *C) {
int i = get_global_id(0);
C[i] = A;
}
そして、変数 A に 3.5 の値を渡しました。これは CPU と GPU で正常に実行されます。
なぜこれが起こるのですか?