高级 API 性能:着色器

news2024/11/15 17:51:19

着色器通过使您能够控制渲染过程的各个方面,在图形编程中发挥着关键作用。它们在 GPU 上运行,负责操作顶点、像素和其他数据。

  • 常规着色器
  • 计算着色器
  • 像素渲染
  • 顶点着色器
  • 几何体、域和外壳着色器

常规着色器

这些提示适用于所有类型的着色器。

推荐

  • 避免扭曲发散常量缓冲区视图(CBV)和即时常量缓冲区(ICB)读取。
    • 当扭曲中的线程统一访问数据时,恒定缓冲区读取最有效。如果需要发散读取,请使用着色器资源视图(SRV)。
    • SRV 应优先于 CBV 的典型情况包括:
      • 骨骼或蒙皮数据
      • 查找表,如预先计算的随机数
  • 要优化缓冲区和组共享内存,请使用手动位打包。在创建用于打包数据的结构时,请考虑字段可以容纳的值的范围,并选择可以包含该范围的最小数据类型。
  • 通过提供预期运行时行为的提示来优化控制流。
    • 确保启用编译标志-为 DXC 绑定的所有资源(或 D3DCOMPILE_all_resources_bound 在 FXC)如果可能的话。这样可以实现一组更大的驱动程序端优化。
    • 考虑在适当的情况下使用 FLATEN 和 BRANCH 关键字。
      • 条件分支可能会阻止编译器提升长延迟指令,例如纹理获取。
      • FLATTEN 关键字提示编译器可以在对语句求值之前自由地提升和启动加载操作。
  • 使用根签名 1.1 指定静态数据和描述符,使驱动程序能够进行最佳着色器优化。
  • 尽量减少寄存器的使用。寄存器分配可能会限制占用率,并可能迫使驱动程序将寄存器溢出到内存中。
  • 加载单通道纹理四边形时,首选使用聚集指令。
    • 与由连续样本指令构建的等效操作相比,这将使预期延迟减少近 4 倍。
  • 比起原始缓冲区,更喜欢结构化缓冲区。
    • 结构化缓冲区具有更严格的对齐要求,这使驱动器能够调度更高效的加载指令。
  • 考虑在数学密集型着色器(例如,物理模拟和去噪器)中使用超越函数(exp、log、sin、cos、sqrt)的数值近似或预计算查找表。
  • 为了在 TEX 单元中促进快速路径,最高可加速 2 倍,在某些情况下使用点过滤:
    • 点过滤已经是精确表示的低分辨率纹理。
    • 正在以其本机分辨率访问的纹理。

不推荐

  • 不要认为半精度浮点运算总是比全精度浮点运算快,反之亦然。
    • 在 NVIDIA Ampere GPU 上,执行 FP32 和执行 FP16 指令一样高效。在精确格式之间转换的开销可能会以净损失告终。
    • NVIDIA Turing GPU 可能受益于使用 FP16 数学,因为 FP16 的发布速率是 FP32 的两倍。

计算着色器

计算着色器用于从数据处理和模拟到机器学习的通用计算。

推荐

  • 如果可能进行跨线程通信,请考虑在组共享内存上使用 wave 内部函数。
    • Wave 内部函数不需要显式的线程同步。
    • 从 SM 6.0 开始,HLSL 本机支持 warp wide wave intrinsic,而无需使用特定于供应商的 HLSL 扩展。只有在缺少预期功能时,才考虑使用特定于供应商的 API。有关详细信息,请参阅 在 HLSL 中解锁 GPU Intrinsics。
    • 要增加原子吞吐量,请使用 wave 指令跨扭曲合并原子操作。
  • 为了最大化缓存位置并提高 L1 和 L2 命中率,请尝试对全屏计算过程进行线程组 ID 刷新。
  • 一个好的起点是以对应于两到八次翘曲的线组大小为目标。例如,全屏通道的线程组大小为 8x8x1 或 16x16x1。确保对着色器进行评测,并根据评测结果调整尺寸。

不推荐

  • 不要使线程组的大小难以按平台和 GPU 架构进行缩放。
    • 专业化常数可以在 Vulkan 中用于在管道创建时设置维度,而 HLSL 要求在着色器编译时知道线程组大小。
  • 注意线程组启动延迟。
    • 如果您的 CS 具有在大多数情况下预计会提前退出的提前退出条件,则最好选择更大的线程组维度,并减少启动的线程组总数。

像素渲染

像素着色器,也称为片段着色器,用于按像素计算效果。

推荐

  • 与像素着色器中的手动深度测试相比,更喜欢使用深度边界测试或模具和深度测试。
  • 深度和模板测试可能会丢弃整个 16×16 光栅瓦片,直至单个像素。确保 Early-Z 已启用。
  • 注意可能迫使驾驶员禁用 Early-Z 测试的使用模式:
    • 有条件的 z 写入,如剪辑和丢弃
      • 另一种选择是考虑使用 null 混合操作
    • 像素着色器深度写入
    • 写入无人机资源
  • 如果扭曲之间的延迟差异很大,请考虑将全屏过程转换为计算着色器。

不推荐

  • 不要广泛使用光栅顺序视图(ROV)技术。
    • 保证订单不是免费的。
    • 始终与高级混合操作和原子学等替代方法进行比较。

顶点着色器

顶点着色器用于在逐顶点的基础上计算效果。

推荐

  • 更喜欢使用压缩顶点格式。
  • 与 CBV 相比,更倾向于使用 SRV 对数据进行蒙皮。这是 CBV 读数不同的典型情况。

几何体、域和外壳着色器

几何体、域和外壳着色器用于控制、评估和生成几何体,从而使镶嵌能够创建曲面和对象的动态生成。

推荐

  • 使用 NVIDIA Turing 中引入的网格着色功能替换几何体、域和外壳着色器。
  • 使用以下配置启用快速几何体路径:
    • 固定拓扑:扩展或减少顶点数量。
    • 固定基元类型:输入基元类型等于输出基元类型。
    • 不可变的逐顶点属性:应用程序无法更改顶点属性,只能将它们从输入复制到输出。
    • 每基元属性可变:应用程序可以为整个基元计算一个值,然后将其传递到片段着色器阶段。例如,它可以计算三角形的面积。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[产品管理-10]:NPDP新产品开发 - 8 - 波士顿矩阵(当下与未来)在产品市场战略方面的应用

目录 一、波士顿矩阵 理论基础 产品类型划分 分析步骤 重要性 注意事项 二、波士顿矩阵的应用实例 示例背景 数据收集与准备 绘制波士顿矩阵 产品线分类 制定战略对策 一、波士顿矩阵:现在 VS 未来 波士顿矩阵理论,又称市场增长率-相对市场份…

读构建可扩展分布式系统:方法与实践04应用服务

1. 应用服务 1.1. 任何系统的核心都在于实现应用需求的特定业务逻辑 1.2. 服务是可扩展软件系统的核心 1.2.1. 它们将契约定义为一个API,向客户端声明它们的能力 1.3. 应用服务器高度依赖于编程语言,但通常都会提供多线程编程模型,允许服…

Ubuntu系统使用Docker部署Jupyter Notebook并实现笔记云同步

文章目录 前言1. 选择与拉取镜像2. 创建容器3. 访问Jupyter工作台4. 远程访问Jupyter工作台4.1 内网穿透工具安装4.2 创建远程连接公网地址4.3 使用固定二级子域名地址远程访问 前言 本文主要介绍如何在Ubuntu系统中使用Docker本地部署Jupyter Notebook,并结合cpol…

Netty(零散记录)

Netty: 1、Netty三种IO 2、Netty和Reactor的 1、Netty对Reactor的支持 Netty的线程模型时基于Reactor模型实现的,Netty对Reactor三种模式都有非常好的支持,并做了一定的改善,一般情况下,在服务端会采用主从架构模型…

Leetcode面试经典150题-739.每日温度

应读者私信要求,本题协商题目的具体内容 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0…

计算机毕业设计 二手闲置交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【目标检测数据集】厨房常见的水果蔬菜调味料数据集4910张39类VOC+YOLO格式

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4910 标注数量(xml文件个数):4910 标注数量(txt文件个数):4910 标注…

SSH公私钥后门从入门到应急响应

目录 1. SSH公私钥与SSH公私钥后门介绍 1.1 SSH公私钥介绍 1.1.1 公钥和私钥的基本概念 1.1.2 SSH公私钥认证的工作原理(很重要) 1.2 SSH公私钥后门介绍 2. 如何在已拿下控制权限的主机创建后门 2.1 使用 Xshell 生成公钥与私钥 2.2 将公钥上传到被需要被植入后门的服务…

Qt_显示类控件

目录 一、QLabel 1、QLabel属性介绍 2、textFormat文本格式 3、pixmap标签图片 3.1 resizeEvent 4、QFrame边框 5、alignment文本对齐 6、wordWrap自动换行 7、indent设置缩进 8、margin设置边距 9、buddy设置伙伴 二、QLCDNumber 1、QLCDNumber属性介绍 2、实…

再次探讨最小生成树Prim算法

二次复习Prim算法时得到了一些新的启示。正常初次学算法时都特别注意代码,但是慢慢的发现,随着代码能力的增强,代码反而不是这么重要,重要的是算法的思路。既在自己的脑子中能有这个算法的图解。 下面展示一下二次学习的思路&…

秋韵虫趣.

文章目录 虫鸣概览虫坛文化蟀种纷呈中华蟋蟀宁阳蟋蟀刻点铁蟋长颚斗蟋 油葫芦棺头蟋中华灶蟋小素蟋树皮蟋蟀 花生大蟋斑腿针蟋其他鸣虫树蟋,又名竹蛉、邯郸梨片蟋,又名金钟、天蛉、绿蛣蛉、银琵琶凯纳奥蟋,又名石蛉,鳞蟋黄蛉蟋&am…

基于A2C与超启发式的航天器星载自主任务规划算法-笔记

1. Actor-Critic 模块 主要文件:AC.py, PolicyNet.py, ValueNet.py作用:该模块实现了 A2C(Advantage Actor-Critic)强化学习算法。其中,ActorCritic 类是核心,它同时管理策略网络(Actor&#x…

misc合集(1)

[Week3] 这是一个压缩包 有密码,提示QmFzZUNURj8/Pz8/P0ZUQ2VzYUI base64解密是BaseCTF??????FTCesaB 猜测这应该是⼀个轴对称的密码 python ⽣成了密码字典,再通过 ARCHPR 进⾏字典爆破 lowercase abcdefghijklmnopqrstuvwxyz uppercase l…

Vue生命周期;Vue路由配置;vue网络请求;vue跨域处理

一&#xff0c;Vue生命周期 <template><div > <h1 click"changeText">{{ info }}</h1></div> </template><script> export default {name: HelloWorld,data(){return{info:"介绍组件生命周期"}},methods:{chang…

Android源码导入Android Studio

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 需要先把 Android 源码编译一遍 然后执行下面指令就可以导入android源码了 关于 Android 源码编译可以参考这篇文章【LineageOS源码下载和编译&#xf…

GitLab CI_CD 从入门到实战笔记

第1章 认识GitLab CI/CD 1.3 GitLab CI/CD的几个基本概念 GitLab CI/CD由以下两部分构成。 &#xff08;1&#xff09;运行流水线的环境。它是由GitLab Runner提供的&#xff0c;这是一个由GitLab开发的开源软件包&#xff0c;要搭建GitLab CI/CD就必须安装它&#xff0c;因…

搜索二叉树BSTree的原理及实现

目录 一、简介 二、功能的实现 节点的实现 这里为什么模板参数采用的是K而不是T呢&#xff1f; 树体的实现 非递归版本 Insert函数 Find函数 Erase函数 递归版本 中序遍历 FindR InsertR EraseR 构造函数 析构函数 拷贝构造 赋值重载 一、简介 BSTree&#x…

Python 数学建模——Prophet 时间序列预测

文章目录 前言原理使用方法&#xff08;初级&#xff09;代码实例Prophet 高级应用add_seasonality 添加自定义周期性add_regressor 添加外生变量交叉检验 前言 Prophet 是 Facebook 团队开发的一个时间序列分析工具&#xff0c;相比传统的 ARMA 时间序列分析&#xff0c;能够综…

nodejs 007:错误npm error Error: EPERM: operation not permitted, symlink

完整错误信息 npm error Error: EPERM: operation not permitted, symlink npm warn cleanup Failed to remove some directories [ npm warn cleanup [ npm warn cleanup C:\\Users\\kingchuxing\\Documents\\IPFS\\orbit-db-set-master\\node_modules\\ipfs-cli, npm…

岭回归:带示例的分步介绍

由 AI 生成&#xff1a;DNA、基因组、摘要、岭回归 一、说明 岭回归是一种在独立变量高度相关的情况下估计多元回归模型系数的方法。 [ 1 ]它已用于计量经济学、化学和工程学等许多领域。[ 2 ]也称为Tikhonov 正则化&#xff0c;以Andrey Tikhonov命名&#xff0c;是一种解决不…