从OpenGL/DirectX程序员的角度来看,“GPU缓存”是什么?

3

Maya宣传视频解释了GPU缓存如何影响应用程序的运行速度。在像Cinder这样的框架中,我们在每个帧更新时重新绘制所有要出现在场景中的几何体,并将其发送到显卡上。那么从程序员的角度来看,GPU缓存背后是什么?这种技术背后有哪些OpenGL/DirectX API?如何将我的网格“缓存”到GPU内存中?


这可能是指为了后-T&L缓存局部性而优化三角网格。在过去,这个缓存是一个相对较小的FIFO队列,按照条带顺序排序顶点是必要的,以实现最佳利用率。这是一些更复杂的建模软件可以做到的事情,但在当今几乎没有那么相关了。 - Andon M. Coleman
2个回答

4
据我所知,OpenGL或DirectX没有直接指定在GPU缓存中存储和跟踪什么内容和不存储的方法。但是,有一些方法应该遵循和维护,以便充分利用缓存。其中一些包括:
  • 批处理。
  • 直接将数据上传到GPU。
  • 对索引进行排序,以最大化网格上顶点的局部性。
  • 尽量减少状态更改。
  • 尽量减少着色器更改。
  • 尽量减少纹理更改。
  • 尽可能使用最大纹理压缩。
  • 尽可能使用mipmapping(以最大化texel采样局部性)。
还要注意,没有单一的GPU缓存。有多个(顶点、纹理等)独立缓存。
来源:

OpenGL超级手册-内存带宽和顶点

GPU Gems-图形管道性能

GDC 2012- 优化DirectX图形


2
首先,Maya 使用的“GPU缓存”术语指的是为了在 Maya 中对网格进行设备无关存储和渲染而进行优化,而不是简单地存储在显卡上的图形数据。对于显卡制造商来说,“GPU缓存”的概念是不同的(在这种情况下,它更像是L1或L2 CPU高速缓存)。
回答你的最后一个问题:使用OpenGL术语,通常会创建顶点缓冲对象(VBO)。这些将在显卡上存储数据。然后,当您想要绘制时,可以简单地指示显卡使用这些缓冲区。
这将避免从主(CPU)内存复制网格数据到图形(GPU)内存的开销。如果需要多次绘制网格而不改变网格数据,则性能更好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接