opengl - 从 OpenGL/DirectX 程序员的角度来看, "GPU Cache"是什么?

标签 opengl directx gpu

Maya promo video解释 GPU 缓存如何影响用户使应用程序运行得更快。在像 Cinder 这样的框架中,我们在每帧更新时重新绘制我们想要在场景中的所有地理结构,并将其发送到显卡。那么我从程序员的角度来谈谈 GPU 缓存背后的原因是什么?这些技术背后有哪些 OpenGL/DirectX API?如何在 GPU 内存中“缓存”我的网格?

最佳答案

据我所知,OpenGL 或 DirectX 无法直接指定在 GPU 缓存上存储和跟踪什么内容,什么内容不存储。然而,为了充分利用缓存,应该遵循和维护一些方法。其中一些包括:

  • 批量,批量,批量。
  • 将数据直接上传到 GPU
  • 对索引进行排序以最大化网格中的顶点局部性。
  • 将状态更改保持在最低限度。
  • 将着色器更改保持在最低限度。
  • 将纹理变化保持在最低限度。
  • 尽可能使用最大纹理压缩。
  • 尽可能使用 mipmapping(以最大化纹素采样局部性)

同样重要的是要记住,不存在单个 GPU 缓存。有多个(顶点、纹理等)独立的缓存。

来源:

OpenGL SuperBible - Memory Bandwidth and Vertices

GPU Gems - Graphics Pipeline Performance

GDC 2012 - Optimizing DirectX Graphics

关于opengl - 从 OpenGL/DirectX 程序员的角度来看, "GPU Cache"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23273790/

相关文章:

c++ - vbo 显示相同的对象

visual-studio-2010 - DirectX SDK 2010 年 6 月号

c# - C# 中多态覆盖的问题

gpu - 释放cuda pytorch的内存分配?

c# - 如何在 OpenTK .NET Core 中设置 OpenGL API 版本?

c++ - 将 glTexSubimage2d 与动态大小的纹理数组一起使用

opengl - 具有纹理对象和采样器的多重纹理理论

c++ - 尝试在 DirectX 11 中加载 Obj 文件时 vector 下标超出范围

gpu - 有没有办法强制 Bazel 串行运行测试

c++ - CUDA 并行化嵌套 for 循环