如何在OpenCL中跨多个设备创建只读内存缓冲区?

时间:2017-10-25 14:12:08

标签: opencl gpu nvidia amd

这对于NVIDIA设备来说确实是一个问题。对于AMD卡,可以同时执行单个上下文中的多个命令队列,但是,NVIDIA OpenCL does not support this。必须在多个线程中创建多个上下文对象,以便同时在多个设备上运行内核。

创建多个上下文的缺点是必须多次创建所有cl_mem对象,每个上下文对应一个。

之类的东西
     gmedia=(cl_mem *)malloc(workdevice*sizeof(cl_mem));
     for(i=0;i<workdevice;i++){
        OCL_ASSERT(((gmedia[i]=clCreateBuffer(mcxcontext[i],RO_MEM, sizeof(cl_uint)*(dimxyz),media,&status),status)));
        ...
     }
如果有一个要复制的大型数组,这将变得非常耗费时间和内存。就我而言,内存复制开销占主导地位,并在启动内核之前消耗更多的GB内存。当我尝试通过8个GPU启动此内核时(我总共有11个GPU),代码因内存限制而崩溃。

我想知道是否有办法在OpenCL的多个设备上有效地共享只读缓冲区?

或者,有没有办法在使用NVIDIA OpenCL的多个设备上启动同时执行?

感谢

0 个答案:

没有答案