0

我正在尝试使用带有 PGI 15.7 编译器的 openacc 来加速我的代码。

我想在 C 源代码级别分析我的代码。我正在使用 CUDA 7.0 中的“nvvp”分析器当我运行 nvvp 时,我可以使用“分析抽头”,并且可以了解哪个延迟是我的代码变慢的原因。(数据依赖,条件分支和带宽......等)

但是,我无法获得基于行的分析,而只能获得“内核”级别的分析。(例如 main_300_gpu 内核使用了 10 秒)。所以我很难知道我必须在哪里修复代码。

有没有办法在源代码级别分析我的代码

我在用着

PGI 15.7(使用 pgcc)

CUDA 7.0

英伟达 GTX 960

Ubuntu 14.04 LTS x86_64

[我的nvvp报告截图] 在此处输入图像描述

在此处输入图像描述

4

2 回答 2

3

您还可以尝试添加标志“-ta=tesla:lineinfo”,让编译器为探查器添加源代码关联(它与 nvcc --lineinfo 的标志相同)。尽管正如 Bob 指出的那样,代码可能经过大量转换,因此许多行信息不会直接对应于您的原始来源。

于 2015-09-14T21:56:01.023 回答
1

目前(在 CUDA 7.5 或更高版本,使用 cc5.2 或更高版本的 GPU),nvvp 分析器可以将各种采样执行活动与CUDA C/C++源代码行相关联。

但是,目前,此功能并未扩展到 OpenACC C/C++(或 Fortran)源代码行。

但是,应该仍然可以将活动与反汇编相关联,并且可以将其与由PGI nollvm 选项生成的中间 C 源文件相关联。然而,这些都与您的 OpenACC 源代码非常相似。

使用 PGI 工具分析 OpenACC 代码的另一个选项是在执行代码之前设置 PGI_ACC_TIME=1 环境变量。这将使运行时内置的轻量级分析器能够对 OpenACC 代码的执行特性进行一些分析,特别是与加速器区域相关的那些部分。输出带有注释,因此您可以参考源代码行。

于 2015-09-09T02:15:43.353 回答