openCL プログラムで異常な動作が発生しています。
プログラムのホスト部分で、double の配列を作成し、すべての要素をゼロに設定します。その配列は、次を使用して GPU にコピーされます。
memObjects[4] = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
sizeof(double) * I_numel, I, NULL);
カーネル内では、条件に応じて一部の要素が 1 に設定され、次のようにホストに読み戻されます。
errNum = clEnqueueReadBuffer(commandQueue, memObjects[4], CL_TRUE, 0,
I_numel * sizeof(double), I, 0, NULL, NULL);
ただし、ゼロになるはずだった要素の一部が、非常に小さな値 ( 6.953267903e-310 ) または非常に大きな値 ( 2.0002319483e+161 ) に変更されました!?!
double を float に変更しようとしましたが、結果は似ています。私はopenCLのnvidia実装を使用しています。バージョンは1.1です。誰が問題が何であるか知っていますか?