神威上程序性能热点分析

类似于神威系统上的gprof使用方法。

方法1:提交作业选项

根据《神威并行程序设计与优化》所述,分析核心代码段的步骤如下。

1. 提交作业时加 --sw3runarg="-p -f" 命令行选项
2. 作业运行结束后生成: gmon.out 文件
3. 在 gmon.out 目录下执行: gprof <可执行程序> gmon.out

生成结果如下图:

方法2:显式调用

在某些编译器下,上述方法并不能奏效(没有gmon.out文件生成),推测是在编译链接时没有链接相关支持库(或许对应的库没有开发完成)。可采用在程序源代码中显式调用do_profile()函数的方法。

extern "C"{
 #include <sys/gmon.h>
  int do_profile(){
    __monstartup((u_long)0x4ff0400000ULL, (u_long)0x5000000000ULL);
    atexit(_mcleanup);
  }
}
...
int main(int argc, char* argv[]) {
  /*Invoke do_profile first*/
  do_profile();
...
}

按照正常的方式编译、运行,得到gmon.out文件。

在编译过程中打开-pg选项,还将获得更多信息,包括更准确的调用关系等。

发表评论

电子邮件地址不会被公开。 必填项已用*标注