我是靠谱客的博主 迷你西牛,最近开发中收集的这篇文章主要介绍gprof性能分析工具使用介绍和Amdahl定律gprof2  Amdahl定律,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

gprof

1.1 简介

gprof实际上只是一个用于读取profile结果文件的工具。gprof采用混合方法来收集程序的统计信息,他使用检测方法,在编译过程中在函数入口处插入计数器用于收集每个函数的被调用情况和被调用次数;也使用采样方法,在运行时按一定间隔去检查程序计数器并在分析时找出程序计数器对应的函数来统计函数占用的时间。 java的性能分析工具叫做gprof。

Gprof具有以下优缺点: 

1)优点:

a) GNU工具,人手一个;

b)混合方法采集信息。 

2)缺点:

a)  需要编译选项支持:

             i. 使用gcc/cc编译和链接时需要加入-pg选项

             ii.使用ld链接时需要用/lib/gcrt0.o代替crt0.o作为第一个input文件

             iii. 如果要调试libc库需要使用-lc_p代替-lc参数

b) 调试多线程程序只能统计主线程的信息(所以不能用于kingbase)。

 

1.2使用方法

1.2.1 编译程序

使用gcc/cc编译和链接时需要加入-pg选项

使用ld链接时需要用/lib/gcrt0.o代替crt0.o作为第一个input文件

如果要调试libc库需要使用-lc_p代替-lc参数 

1.2.2运行程序生成统计信息

正常运行编译好的程序,程序正常结束后会在当前目录生成统计信息文件gmon.out。

程序必须正常退出(调用exit或从main中返回)才能生成统计信息。

当前目录下如果有另外叫gmon.out的文件,内容将被本次运行生成的统计信息覆盖,多次运行统一程序请将前一次的gmon.out改名。 

1.2.3使用gprof查看统计结果

命令格式:

gprof options [executable-file [profile-data-files...]] [> outfile]

常用参数介绍:

symspec表示需要加入或排除的函数名,和gdb指定断点时的格式相同。

 

1)  输出相关:

a)-A[symspec]或--annotated-source[=symspec]:进行源码关联,只关联symspec指定的函数,不指定为全部关联。

b) -I dirs或--directory-path=dirs:添加搜索源码的文件夹,修改环境变量GPROF_PATH也可以。

c) -p[symspec]或--flat-profile[=symspec]:默认选项,输出统计信息,只统计symspec指定的函数,不指定为全部统计。

d) -P[symspec]或--no-flat-profile[=symspec]:排除统计symspec指定的函数

e) -q[symspec]或--graph[=symspec]:默认选项,输出函数调用信息,只统计symspec指定的函数,不指定为全部统计。

f) -Q[symspec]或--no-graph[=symspec]:排除统计symspec指定的函数

g)-b或--brief:不输出对各个参数含义的解释;

 

2)  分析相关:

a)-a或--no-static:定义为static的函数将不显示,函数的被调用次数将被计算在调用它的不是static的函数中;

b) -m num或--min-count=num:不显示被调用次数小于num的函数;

c) -z或--display-unused-functions:显示没有被调用的函数;

 

1.3 一个例子

编译测试文件:

gcc –g –o test test.c –pg

执行程序:

./test

查看统计信息:

gprof -b -A -p -q test gmon.out > pg

 

1.4 gprof产生的信息解析

 %                        the percentage of the total running time of the
time                     program used by this function.
                           函数使用时间占所有时间的百分比。
cumulative          a running sum of the number of seconds accounted
 seconds             for by this function and those listed above it.
                           函数和上列函数累计执行的时间。
 self                    the number of seconds accounted for by this
seconds             function alone.  This is the major sort for this
                          listing.
                          函数本身所执行的时间。
calls                   the number of times this function was invoked, if
                          this function is profiled, else blank.
                          函数被调用的次数
 self                   the average number of milliseconds spent in this
ms/call               function per call, if this function is profiled,
                         else blank.
                          每一次调用花费在函数的时间microseconds。
 total                  the average number of milliseconds spent in this
ms/call               function and its descendents per call, if this 
                          function is profiled, else blank.
                          每一次调用,花费在函数及其衍生函数的平均时间microseconds。
name                 the name of the function.  This is the minor sort
                          for this listing. The index shows the location of
                          the function in the gprof listing. If the index is
                          in parenthesis it shows where it would appear in
                          the gprof listing if it were to be printed.
                          函数名

2  Amdahl定律

阿姆达尔曾致力于并行处理系统的研究。对于固定负载情况下描述并行处理效果的加速比s,阿姆达尔经过深入研究给出了如下公式:
S=1/(1-a+a/n)
其中,a为并行计算部分所占比例,n为并行处理结点个数。这样,当1-a=0时,(即没有串行,只有并行)最大加速比s=n;当a=0时(即只有串行,没有并行),最小加速比s=1;当n→∞时,极限加速比s→ 1/(1-a),这也就是加速比的上限。例如,若串行代码占整个代码的25%,则并行处理的总体性能不可能超过4。这一公式已被学术界所接受,并被称做“阿姆达尔定律”,也称为“安达尔定理”(Amdahl law)。
其实就是T old/Tnew.

最后

以上就是迷你西牛为你收集整理的gprof性能分析工具使用介绍和Amdahl定律gprof2  Amdahl定律的全部内容,希望文章能够帮你解决gprof性能分析工具使用介绍和Amdahl定律gprof2  Amdahl定律所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部