我有一条核管道:
1)内核A将数据写入缓冲区X
2)通过clEnqueueReadBuffer将缓冲区X复制到主机
3)以clEnqueueReadBuffer触发的回调方式处理主机数据
重复以上
使用以下标志创建缓冲区X:
CL_MEM_USE_HOST_PTR | CL_MEM_READ_WRITE; | CL_MEM_HOST_READ_ONLY我的问题是:一旦clEnqueueReadBuffer完成(我有一个由CL_COMPLETE触发的事件),内核A在不覆盖主机上处理数据的情况下再次运行是否安全?
或者在允许内核A再次运行之前,我应该处理主机上的数据吗?
因为我在代码中看到一个bug,表明在我处理主机上的数据之前,内核A运行是不安全的。
谢谢!
发布于 2015-11-04 13:34:06
这就是OpenCL 1.2规范对用CL_MEM_USE_HOST_PTR创建的缓冲区的看法。
如果指定,则表示应用程序希望OpenCL实现使用host_ptr引用的内存作为内存对象的存储位。
这意味着,同时从主机和设备访问此缓冲区是不安全的(除非两者都只是读取)。如果希望主机和设备分配是不同的,只需创建没有CL_MEM_USE_HOST_PTR标志的缓冲区即可。
https://stackoverflow.com/questions/33523133
复制相似问题