OpenCL + OpenGL减少CPU与CPU之间的数据传输GPU

时间:2013-06-13 05:38:21

标签: opengl opencl cpu gpu

我正在阅读这篇文章      http://www.dyn-lab.com/articles/cl-gl.html

现在,如果OpenCl内核对象具有整个内存R / W访问权限& OpenGL可以通过CPU-GPU交互来访问内存中的数据以传输数据,它如何减少CPU / GPU空闲时间,因为GPU从主存储器本身访问数据然后内存总线访问会导致CPU保持空闲(比如缓存没有命中)如果某些CPU指令想要内存访问。

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

1 个答案:

答案 0 :(得分:1)

本文讨论了如何在OpenGL和OpenCL中使用GPU内存:

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个字节,但不会在主机上分配此内存。相反,400字节将在GPU上分配,内核将通过访问只写缓冲区对象vbo_buff来初始化VBO数据。

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