我想知道是否可以使用clEnqueueWriteBuffer两次写入相同的opencl缓冲区。因为我使用循环写入相同的缓冲区,并且从循环的第二次迭代中,缓冲区中存在的值(当内核开始执行时)不正确。我检查了主机端内存并且数据是正确的。
我使用以下命令写入缓冲区
ciErr1 = clEnqueueWriteBuffer(queue1, l_shipDate_buf, CL_FALSE, 0, l_shipDate_buf_size, l_shipDate_tiled_buf, 1, eventList+8, &eventList[1]);
缓冲区是使用:
创建的l_shipDate_buf = clCreateBuffer(context, CL_MEM_READ_ONLY, l_shipDate_buf_size, NULL, &ciErr1);
答案 0 :(得分:0)
不,使用CL_FALSE你正在对设备进行非阻塞传输 - 我相信此时OpenCL会退出所有的排序保证,所以如果你将clEnqueueWriteBuffer两次带到同一个缓冲区中CL_FALSE数据可以按任何顺序到达 - 在这种情况下,您需要使用事件来强制排序。如果你已经在使用事件强制在两次写入之间进行排序,那么出现了一些可怕的错误,你应该发布你的循环