我正在阅读这篇文章 http://www.dyn-lab.com/articles/cl-gl.html
现在,如果OpenCl内核对象具有整个内存R / W访问权限& OpenGL可以通过CPU-GPU交互来访问内存中的数据以传输数据,它如何减少CPU / GPU空闲时间,因为GPU从主存储器本身访问数据然后内存总线访问会导致CPU保持空闲(比如缓存没有命中)如果某些CPU指令想要内存访问。
可能是我误解了这个概念!帮助我理解冲突。
答案 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(并行)处理能力。