簡體   English   中英

如何分析 clang 編譯的 OpenMP 卸載代碼

[英]How do I profile OpenMP offloading code compiled by clang

我目前正在使用 LLVM/clang-16(從 github 存儲庫構建)進行 OpenMP 卸載。 使用 clang 中的內置分析工具(使用LIBOMPTARGET_PROFILE=profile.jsonLIBOMPTARGET_INFO等環境變量)我能夠確認我的代碼是在我的 GPU 上執行的,但是當我嘗試使用nvprofncu (來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM