使用相同的GPU memeoy对象

时间:2015-12-16 10:06:19

标签: opencl

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

(我使用的是opencl C ++包装器cl.hpp和beignet英特尔开源库。)

2 个答案:

答案 0 :(得分:1)

如果两个线程都使用相同的有序命令队列,它将正常工作;它只是变成了一个关于哪个线程首先将它们的工作排列在一起的竞赛。从OpenCL运行时的角度来看,它只是队列中的命令。

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

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

答案 1 :(得分:0)

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

同时运行多个内核的目的是什么?请检查this answer类似的问题。