KernelInfo¶
簡介¶
此 LLVM IR pass 會報告為 GPU 編譯的程式碼的各種統計資訊。這些統計資訊的目標是幫助識別不良的程式碼模式以及減輕它們的方法。此 pass 在 LLVM IR 層級運作,因此理論上它可以支援任何基於 LLVM 的編譯器,用於支援 GPU 的程式語言。
預設情況下,此 pass 在 LTO 結束時執行,並且像 -Rpass=kernel-info
這樣的選項會啟用其備註。範例 opt
和 clang
命令列將在下一節中出現。
備註包括摘要統計資訊(例如,靜態 allocas 的總大小)和個別事件(例如,每個 alloca 的原始碼位置)。輸出的範例出現在 llvm/test/Analysis/KernelInfo 中的測試中。
範例命令列¶
在 LTO 結束時,分析 C 程式在 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>'