【问题标题】:Writing to the same OpenCL buffer twice两次写入同一个 OpenCL 缓冲区
【发布时间】:2015-12-15 16:41:01
【问题描述】:

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

【问题讨论】:

    标签: opencl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 2016-09-16
      • 2016-12-03
      • 2019-05-05
      相关资源
      最近更新 更多