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; } |
?