我可以在C源代码级别中分析OpenACC内核吗?

时间:2015-09-08 09:31:39

标签: cuda gpu nvidia openacc nvvp

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

我想在C源代码级别配置我的代码。 我正在使用' nvvp'来自CUDA 7.0的分析器 当我运行nvvp时,我可以使用&t 39;分析点击'并且可以得到哪个延迟是我的代码减慢的原因。 (数据依赖,条件分支和带宽......等)

但是,我无法获得基于行的分析,但只有'内核'水平分析。 (例如main_300_gpu内核使用10s)。 所以我有点麻烦知道我在哪里修复代码。

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

我正在使用

PGI 15.7(使用pgcc)

CUDA 7.0

NVIDIA GTX 960

Ubuntu 14.04 LTS x86_64

[我的nvvp报告截图] enter image description here

enter image description here

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

在当前时间(以及使用cc5.2或更高版本的GPU上的CUDA 7.5或更高版本),nvvp探查器can associate各种采样活动 CUDA C / C ++ 源代码行。

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

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

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