内容创建/渲染

高级 API 性能:内部函数

 

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

推荐

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

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

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

 

Tags