[英]How do I produce a graphical code profile report for C++ code compiled with Clang LLVM?
[英]How do I profile OpenMP offloading code compiled by clang
我目前正在使用 LLVM/clang-16(從 github 存儲庫構建)進行 OpenMP 卸載。 使用 clang 中的內置分析工具(使用LIBOMPTARGET_PROFILE=profile.json
和LIBOMPTARGET_INFO
等環境變量)我能夠確認我的代碼是在我的 GPU 上執行的,但是當我嘗試使用nvprof
或ncu
(來自NVIDIA Nsight 工具套件)我收到一條錯誤/警告,指出探查器未檢測到任何 kernel 啟動:
> ncu ./saxpy
Time of kernel: 0.000004
==WARNING== No kernels were profiled.
==WARNING== Profiling kernels launched by child processes requires the --target-processes all option.
這是我的測試代碼:
#include <iostream>
#include <omp.h>
#include <cstdlib>
void saxpy(float a, float* x, float* y, int sz) {
double t = 0.0;
double tb, te;
tb = omp_get_wtime();
#pragma omp target teams distribute parallel for map(to:x[0:sz]) map(tofrom:y[0:sz])
{
for (int i = 0; i < sz; i++) {
y[i] = a * x[i] + y[i];
}
}
te = omp_get_wtime();
t = te - tb;
printf("Time of kernel: %lf\n", t);
}
int main() {
auto x = (float*) malloc(1000 * sizeof(float));
auto y = (float*) calloc(1000, sizeof(float));
for (int i = 0; i < 1000; i++) {
x[i] = i;
}
saxpy(42, x, y, 1000);
return 0;
}
使用以下命令編譯:
> clang++ -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda main.cpp -o saxpy --cuda-path=/opt/nvidia/hpc_sdk/Linux_x86_64/22.11/cuda/10.2 --offload-arch=sm_61 -fopenmp-offload-mandatory
我需要做什么才能啟用分析? 我看到其他人使用ncu
for clang 編譯的 OpenMP 卸載代碼而沒有額外的步驟,但也許我完全遺漏了一些東西。
通過查看在使用LIBOMPTARGET_DEBUG=1
執行程序時生成的調試 output,在收到其他論壇的幫助后,我能夠解決此問題。 程序在通過ncu
(或nsys
)啟動時找不到 OpenMP CUDA 運行時庫的必要文件。
解決方法是將這些庫的路徑添加到LD_LIBRARY_PATH
環境變量(例如export LD_LIBRARY_PATH=/opt/llvm/lib:$LD_LIBRARY_PATH
)。
NVIDIA 現在已經意識到這個問題,並且正在“調查為什么會這樣”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.