NVIDIA 技术博客:高级 API 性能:内部函数

nvdev 2024-03-01 15:04:01

这篇文章最初发表在 NVIDIA 技术博客上。有关此类的更多内容,请参阅最新的 内容创建/渲染 新闻和教程。

Intrinsics 可被视为特定硬件指令的更高级别的抽象。它们提供对低级操作或特定于硬件的功能的直接访问,从而提高性能。这样,就可以在线程束中的线程间执行操作,也称为线程束中的线程波前.

推荐

  • Wave 内联函数可以显著加快着色器的运行速度。以下是一些优化技巧:
    • 许多排序或归约算法可以使用更少的共享内存或不使用共享内存,并减少内存障碍,从而显著提升性能。
    • 可以使用不同类型的 shuffle 和 ballot 指令。
    • 将波形指令与 GroupSize 或 WorkGroup 值大于线程束或子组大小(32 个线程)的波形指令结合使用,可以减少所需的内存屏障和共享内存访问。
    • 有关更多信息,请参阅线程之间的读取:着色器内部函数在 HLSL 中解锁 GPU 内部架构
  • 使用GroupSize和WorkGroup线程束大小的乘数(32 * N),64 通常是最佳点。
    • 使用 intrinsicGroupSize和WorkGroup32 可能是避免使用共享内存的更好选择。
  • 当供应商特定的扩展不适用或难以实现时,使用原生 HLSL 代码。
    • 一些指令可以使用最新的着色器模型版本来实现。

以下代码示例是 SM6 的示例:

float(4) NvShflXor (float(4) input, uint LaneMask) { float(4) output = WaveReadLaneAt(input, WaveGetLaneIndex() ^ LaneMask); return output; }

 

阅读原文

...全文
27 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,214

社区成员

发帖
与我相关
我的任务
社区描述
NVIDIA 开发者技术交流
人工智能 企业社区
社区管理员
  • nvdev
  • 活动通知
  • AI_CUDA_Training
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧