什么是着色器 (Shader)占用率(Occupancy)? 为什么我们应该关心它?

我通过 Twitter DMs 看到了一个很好的问题,关于占用率是什么以及为什么它对着色器性能很重要,我将把我的答案扩展到一篇快速的博客文章中。

首先是一些上下文环境,GPU,当其运行着色程序时,将 64 或 32 个像素或顶点(在 AMD 上称为 wavefronts,在 NVidia 上称为 warps)一起批处理,并一次性对所有的程序执行一条指令 。

通常,从内存中获取数据的指令有很大的延迟(例如,发出指令和返回结果之间的时间很长),因为必须访问缓存或 RAM 来获取数据。

在等待数据时,这种延迟可能会导致 GPU 停顿

当遇到 GPU 会发出的(即请求数据)内存指令时,并在着色程序中继续执行随后的指令。

当它需要使用数据时,它会停下来检查数据是否可用。

如果数据准备好了,GPU 就使用它,如果数据没有准备好,GPU 就需要停止执行并等待它。

作为一个例子,检查以下半虚构的着色器,其中我们做一些数学运算,并从纹理读取 uvScale:

Texture1D	Materials : register(t0);
 
PSIn

猜你喜欢

转载自blog.csdn.net/panda1234lee/article/details/125197647