Intrinsic
NVIDIA GPU intrinsics 提供了一种在 CUDA 或其他支持的编程模型中直接访问底层 GPU 硬件功能的方式.
Intrinsics 是更高级的抽象,允许开发者在 C/C++ 代码中使用类似函数调用的方式来访问 GPU 指令.
PTX
PTX (Parallel Thread Execution) 是一种低级并行线程执行的虚拟指令集架构,作为 CUDA 程序的中间表示。CUDA 编译器将 CUDA 代码编译成 PTX 代码,然后 PTX 代码再由驱动程序即时编译 (JIT) 成目标 GPU 的机器码。
PTX 是一种汇编级别的指令集,更接近底层硬件。所以手写 PTX 是复杂,
DeepSeek 项目展示了如何使用 PTX 绕过 CUDA 的限制,从而实现更高效的 GPU 编程。这种方法不仅提升了性能,还展示了在有限算力资源下如何进行创新和突破.
实际应用中,需要根据具体的算法和硬件特性进行更深入的优化。
直接编写 PTX 代码通常只在对性能有极致要求的场景下使用。在大多数情况下,使用高级CUDA C/C++代码,并结合NVIDIA提供的性能分析工具(如Nsight Systems和Nsight Compute)进行优化,可以获得更好的开发效率和可维护性。
关系
当在 CUDA 代码中使用 intrinsics 时,CUDA 编译器会将这些 intrinsics 转换为相应的 PTX 指令。如,一个 warp shuffle intrinsic 可能会被编译成 shfl PTX 指令。
例如,在 CUDA 中,你可以使用 __shfl_xor_sync intrinsic 来执行 warp shuffle 操作。这个 intrinsic 会被编译成 PTX 指令 shfl.xor,该指令在 warp 内的不同线程之间交换数据。