AUTOMATED PERFORMANCE IMPROVEMENT USING CUDA LINK TIME OPTIMIZATION

MIKE MURPHY, COMPILER DEVELOPMENT
作者信息未提供

目录

为什么需要链接时优化 (LTO)

链接时优化 (LTO) 旨在解决单独编译带来的优化限制,从而提高程序的运行时性能。

单独编译的问题

链接时优化 (LTO)

LTO 将单独编译的灵活性与全程序优化的性能相结合。

如何使用 LTO

部分 LTO

LTO 结果

即时链接时优化 (JIT LTO)

离线与运行时生成的 JIT LTO IR

JIT LTO 调用

nvrtcProgram prog;
nvrtcCreateProgram(&prog, input, name, 0, nullptr, nullptr);
const char *options[2] = {"-dlto", "-dc"};
nvrtcResult result = nvrtcCompileProgram(prog, 2, options);
size_t irSize;
nvrtcGetNVMSize(prog, &irSize);
char *ltoIR = (char*)malloc(irSize);
nvrtcGetNVM(prog, ltoIR); // returns LTO IR
CUlinkState linkState;
CUjit_option jitoptions[] = {CU_JIT_OPTION_JIT_INPUT_TYPE};
void *jitoptionValues[] = {(void*)1};
cuLinkCreate(1, jitoptions, jitoptionValues, &linkState);
cuLinkAddData(linkState, CU_JIT_INPUT_NVVM,
            ltoIR, irSize, name, 0, NULL, NULL);
cuLinkAddData( /* other input */ );
size_t size;
void *linkedCubin;
cuLinkComplete(linkState, &linkedCubin, &size);
cuModuleLoadData(&mod, linkedCubin);

数学库中的 JIT LTO 回调

JIT LTO 结果: 数学库回调

JIT LTO 用例:数学库组合

数学库目前包含数千种手写内核的排列,但不能涵盖所有尺寸。通过将构建块与 JIT LTO 结合,我们可以生成用户所需的任何配置,同时获得最佳性能和最小库大小。

现状:

使用 JIT LTO:
- 单一用户配置: 统一的用户配置。
- 加载、存储、计算: 操作转换为 LTO-IR(链接时间优化中间表示)。
- JIT LTO: 在运行时(Runtime)通过 JIT LTO 处理 LTO-IR。
- SASS: 最终生成单一的 SASS 二进制文件。
- 优势: 更好的性能(Better performance),更小的二进制文件占用空间(Smaller binary footprint)。

JIT LTO 用例:数学库组合
JIT LTO 用例:数学库组合

何时使用 (或不使用) LTO

包含引用信息的 LTO

LTO 包含引用信息
LTO 包含引用信息

相关出版物链接

欲了解更多信息,请参考以下链接:

博客:

手册:
* https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#optimization-of-separate-compilation -- nvcc
* https://docs.nvidia.com/cuda/cuda/nvrtc/index.html -- nvrtc
* https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__MODULE.html#group__CUDA__MODULE -- cuLink APIs
* https://docs.nvidia.com/cuda/deploy/cuda-compatibility/ -- 兼容性保证

用例:
* https://www.nvidia.com/en-us/on-demand/session/gtcfail21-a31155?playlistId=playlist-ead11304-9931-4e91-9d5a-fb0e1ef27014 -- “JIT LTO Adoption in cuSPARSE/cuFFT: Use Case Overview” in GTC Fall 2021.
* https://www.osti.gov/biblio/1798430-enhancements-supporting-ic-usage-pem-libraries-next-gen-platforms -- 提及使用 LTO 的 LLNL 论文。