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

时间:2014-04-24 15:49:52

标签: opengl directx gpu

Maya promo video解释了GPU缓存如何影响用户使应用程序运行得更快。在像Cinder这样的框架中,我们重新绘制我们希望在每个帧更新的场景中发送到视频卡的所有geopetry。所以我想从程序员的角度来看GPU缓存的背后是什么?这种技术背后有哪些OpenGL / DirectX API?如何"缓存"我在GPU内存中的网格?

2 个答案:

答案 0 :(得分:3)

据我所知,在OpenGL或DirectX中没有办法直接指定在GPU缓存上存储和跟踪的内容。但是,应该遵循和维护方法,以便最好地利用缓存。其中一些包括:

  • 批次,批次,批次。
  • 将数据直接上传到GPU
  • 订购索引以最大化网格中的顶点局部性。
  • 将状态更改保持在最低限度。
  • 将着色器更改保持在最低限度。
  • 将纹理更改保持在最低限度。
  • 尽可能使用最大纹理压缩。
  • 尽可能使用mipmapping(最大化texel采样位置)

请记住,没有单个GPU缓存也很重要。有多个(顶点,纹理等)独立缓存。

来源:

OpenGL SuperBible - Memory Bandwidth and Vertices

GPU Gems - Graphics Pipeline Performance

GDC 2012 - Optimizing DirectX Graphics

答案 1 :(得分:1)

首先,Maya使用的“GPU缓存”术语可能是指简单存储在卡上的图形数据是指在Maya中优化网格以进行与设备无关的存储和渲染。对于卡制造商来说,“GPU缓存”的概念是不同的(在这种情况下,它意味着更像是L1或L2 CPU缓存)。

回答你的最后一个问题:使用OpenGL术语,你通常会创建顶点缓冲对象(VBO)。这些将把数据存储在卡上。然后,当您想要绘制时,您可以简单地指示卡使用这些缓冲区。

这将避免将网格数据从主(CPU)内存复制到图形(GPU)内存中的开销。如果需要多次绘制网格而不更改网格数据,则表现更好。