2013-06-13 98 views
1
之间的数据传输

我是通过本文打算立即 http://www.dyn-lab.com/articles/cl-gl.html的OpenCL +的OpenGL以减少CPU和GPU

,如果OpenCL的内核对象具有整个存储器R/W访问&的OpenGL可以在存储器访问数据不用其他CPU-GPU交互来传输数据,它是如何减少CPU/GPU空闲时间的,因为如果GPU从主存储器本身访问数据本身,那么如果某些CPU指令需要存储器访问,则存储器总线访问将导致CPU保持闲置(如缓存未命中)。

可能是我误解了这个概念!帮助我理解冲突。

回答

1

有关使用GPU内存OpenGL和OpenCL的文章会谈:

glGenBuffers(1, &vbo); 
glBindBuffer(GL_ARRAY_BUFFER, vbo); 
glBufferData(GL_ARRAY_BUFFER, 400, NULL, GL_STATIC_DRAW); 
vbo_buff = clCreateFromGLBuffer(ctx, CL_MEM_WRITE_ONLY, 2, &err); 

明白为什么glBufferData的第三个参数设置为NULL是很重要的。这表明主机不会将数据传输到VBO。也就是说,VBO被配置为保存400个字节,但该内存不会在主机上分配。相反,将在GPU上分配400个字节,内核将通过访问只写缓冲对象vbo_buff来初始化VBO数据。

应用程序将创建并填充一次缓冲区,此时CPU /主存储器与GPU/GPU存储器之间会发生数据传输。之后,OpenGL和OpenCL在他们的本地内存上共同工作,在这些内存中共享他们的数据。您可以消除进一步的数据传输,并且可以使用更快的GPU内存和GPU(并行)处理能力。