什么是着色器 (Shader)占用率(Occupancy)? 为什么我们应该关心它?
Posted ShaderJoy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是着色器 (Shader)占用率(Occupancy)? 为什么我们应该关心它?相关的知识,希望对你有一定的参考价值。
我通过 Twitter DMs 看到了一个很好的问题,关于占用率是什么以及为什么它对着色器性能很重要,我将把我的答案扩展到一篇快速的博客文章中。
首先是一些上下文环境,GPU,当其运行着色程序时,将 64 或 32 个像素或顶点(在 AMD 上称为 wavefronts
,在 NVidia 上称为 warps
)一起批处理,并一次性对所有的程序执行一条指令 。
通常,从内存中获取数据的指令有很大的延迟(例如,发出指令和返回结果之间的时间很长),因为必须访问缓存或 RAM 来获取数据。
在等待数据时,这种延迟可能会导致 GPU 停顿。
当遇到 GPU 会发出的(即请求数据)内存指令时,并在着色程序中继续执行随后的指令。
当它需要使用数据时,它会停下来检查数据是否可用。
如果数据准备好了,GPU 就使用它,如果数据没有准备好,GPU 就需要停止执行并等待它。
作为一个例子,检查以下半虚构的着色器,其中我们做一些数学运算,并从纹理读取 uvScale
:
Texture1D Materials : register(t0);
PSIn
以上是关于什么是着色器 (Shader)占用率(Occupancy)? 为什么我们应该关心它?的主要内容,如果未能解决你的问题,请参考以下文章