类似于神威系统上的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
选项,还将获得更多信息,包括更准确的调用关系等。