KernelInfo

简介

此 LLVM IR pass 报告为 GPU 编译的代码的各种统计信息。这些统计信息的目的是帮助识别不良代码模式以及缓解这些模式的方法。该 pass 在 LLVM IR 级别运行,因此理论上它可以支持任何基于 LLVM 的、支持 GPU 的编程语言的编译器。

默认情况下,该 pass 在 LTO 结束时运行,并且像 -Rpass=kernel-info 这样的选项启用其 remarks 功能。 示例 optclang 命令行在下一节中出现。

Remarks 包括摘要统计信息(例如,静态 allocas 的总大小)和个体出现情况(例如,每个 alloca 的源位置)。输出示例出现在 llvm/test/Analysis/KernelInfo 的测试中。

示例命令行

分析 C 程序在 LTO 结束时呈现给 LLVM GPU 后端的样子

$ clang -O2 -g -fopenmp --offload-arch=native test.c -foffload-lto \
    -Rpass=kernel-info

分析指定的 LLVM IR,可能先前由类似 clang -save-temps -g -fopenmp --offload-arch=native test.c 的命令生成

$ opt -disable-output test-openmp-nvptx64-nvidia-cuda-sm_70.bc \
    -pass-remarks=kernel-info -passes=kernel-info

当在命令行上指定 LLVM pass 管线时,kernel-info 仍然默认在 LTO 结束时运行。-no-kernel-info-end-lto 禁用该行为,以便您可以显式地定位 kernel-info

$ clang -O2 -g -fopenmp --offload-arch=native test.c -foffload-lto \
    -Rpass=kernel-info \
    -Xoffload-linker --lto-newpm-passes='lto<O2>'

$ clang -O2 -g -fopenmp --offload-arch=native test.c -foffload-lto \
    -Rpass=kernel-info -mllvm -no-kernel-info-end-lto \
    -Xoffload-linker --lto-newpm-passes='module(kernel-info),lto<O2>'

$ opt -disable-output test-openmp-nvptx64-nvidia-cuda-sm_70.bc \
    -pass-remarks=kernel-info \
    -passes='lto<O2>'

$ opt -disable-output test-openmp-nvptx64-nvidia-cuda-sm_70.bc \
    -pass-remarks=kernel-info -no-kernel-info-end-lto \
    -passes='module(kernel-info),lto<O2>'