向同一个OpenCL缓冲区写入两次



我想知道是否可以使用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);

否,使用CL_FALSE,您正在向设备进行非阻塞传输-我相信此时OpenCL会放弃所有排序保证,因此,如果您使用CL_FALSE向同一缓冲区两次clEnqueueWriteBuffer,数据可以以任何顺序到达-在这种情况下,您需要使用事件强制排序。如果您已经在使用事件来强制两次写入之间的排序,那么出现了严重的错误,您应该发布循环

最新更新