Intrinsics 可被视为特定硬件指令的更高级别的抽象。它们提供对低级操作或特定于硬件的功能的直接访问,从而提高性能。这样,就可以在线程束中的线程间执行操作,也称为线程束中的线程波前.
推荐
- Wave 内联函数可以显著加快着色器的运行速度。以下是一些优化技巧:
- 许多排序或归约算法可以使用更少的共享内存或不使用共享内存,并减少内存障碍,从而显著提升性能。
- 可以使用不同类型的 shuffle 和 ballot 指令。
- 将波形指令与
GroupSize
或WorkGroup
值大于线程束或子组大小(32 个线程)的波形指令结合使用,可以减少所需的内存屏障和共享内存访问。 - 有关更多信息,请参阅线程之间的读取:着色器内部函数和在 HLSL 中解锁 GPU 内部架构。
- 使用
GroupSize
和WorkGroup
线程束大小的乘数(32 * N
),64 通常是最佳点。- 使用 intrinsic
GroupSize
和WorkGroup
32 可能是避免使用共享内存的更好选择。
- 使用 intrinsic
- 当供应商特定的扩展不适用或难以实现时,使用原生 HLSL 代码。
- 一些指令可以使用最新的着色器模型版本来实现。
以下代码示例是 SM6 的示例:
float(4) NvShflXor (float(4) input, uint LaneMask)
{
float(4) output = WaveReadLaneAt(input, WaveGetLaneIndex() ^ LaneMask);
return output;
}