使用相同的 GPU 内存对象

Using of the same GPU memeoy object

假设您创建了两个线程并使它们都进入一个循环,它们都启动了相同的内核,该内核使用相同的 opencl 内存对象(在我的例子中是 cl.hpp 中的缓冲区)。它会正常工作吗? opencl是否允许运行在同一时间不同的内核具有相同的内存对象?

(我正在使用 opencl C++ 包装器 cl.hpp 和 beignet Intel 开源库。)

并发内核对相同 OpenCL 内存对象的读取操作不会导致任何功能问题。在写操作的情况下,它肯定会导致功能问题。

运行多核并发的objective是什么?请检查 this answer 类似问题。

如果两个线程都使用相同的有序命令队列,它会工作得很好;这只是关于哪个线程首先将其工作排入队列的竞赛。从 OpenCL 运行时的角度来看,它只是队列中的命令。

OpenCL 1.1(和更新版本)是线程安全的,除了给定内核的 clSetKernelArg 和 clEnqueueNDRangeKernel;你需要锁定它。

但是,如果您的线程使用两个不同的命令队列,那么您不应该使用相同的内存对象,而无需使用 OpenCL Event 对象进行同步。除非它是只读的;应该没问题。