C++ 算子即时编译(JIT):利用 C++ 封装 NVRTC 实现在运行时动态生成针对输入形状优化的 CUDA 内核

C++ 算子即时编译(JIT):利用 C++ 封装 NVRTC 实现在运行时动态生成针对输入形状优化的 CUDA 内核 各位GPU编程爱好者、高性能计算领域的同仁们,大家好! 在当今数据驱动的世界中,高性能计算(HPC)和机器学习(ML)对计算效率的追求永无止境。图形处理器(GPU)以其大规模并行处理能力,已成为加速这些工作负载的核心。然而,要充分释放GPU的潜力,我们往往需要针对特定的硬件、数据布局乃至输入数据的“形状”进行细致的优化。传统的编译方式,即在开发阶段就将所有可能的内核配置编译好,不仅会造成巨大的二进制文件体积,也难以覆盖所有潜在的优化场景。 想象一下,我们有一个通用的矩阵乘法算法。对于一个 1024×1024 的矩阵乘法,我们可能会选择 32×32 的瓦片(tile)大小,并进行适当的循环展开。但如果输入矩阵是 128×128,或者更极端的 1024×16,那么 32×32 的瓦片可能就不是最优选择,甚至可能导致性能下降。理想情况是,我们的程序能够根据实际运行时的输入数据形状,动态地生成并编译出最适合当前形状的CUDA内核。 这就是即时编译(Just-In-Time C …