1

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

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

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

4

1 回答 1

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

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

于 2013-06-13T06:14:49.577 回答