什么是着色器 (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)? 为什么我们应该关心它?的主要内容,如果未能解决你的问题,请参考以下文章

Godot Shader笔记:着色器材质ShaderMaterial

shader是啥意思

Unity Shader:几何着色器

[Unity] Shader(着色器)之固定管线

UNITY自带的SHADER放在哪个目录的

Shader是啥意思??