我的 openCL 程序出现一些异常行为。
在程序的主机部分中,我创建了一个双精度数组并将所有元素设置为零。该数组使用以下命令复制到 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。有谁知道是什么问题?