ʹ��GProf���Ż����C/C++����

ArticleCategory:

Software Development

AuthorImage:

Arnout Engelen

TranslationInfo:

original in en Arnout Engelen 

en to CN С �� 

AboutTheAuthor:

Arnout Engelen �Ǻ���Nijmegen��ѧ�����ϵ��ѧ����Ҳ�����簲ȫ��˾TUNIX�Ĺ�Ա���ڿ���ʱ�䣬��ϲ�����ܺʹ����������˹��

Abstract:

���Ż������ʱ��Ҫ��ס����ֵ���Ż��ĵط��Ż���û�б�Ҫ���ϼ���Сʱ���Ż�һ��ʵ����ֻ����0.04��ij���

GProf ʹ����һ���쳣�򵥵��Ƿdz���Ч�ķ������Ż�C/C++ ���򣬶����ܺ����׵�ʶ���ֵ���Ż��Ĵ��롣һ���򵥵İ�������������ʾ��GProf���ͨ��ʶ���Ż������ؼ������ݽṹ����ʵ��Ӧ���еij����3���ӵ�����ʱ�Ż���5��ġ�

��������������׷�ݵ�1982����ڱ������������ر����۴�ᣨthe SIGPLAN Symposium on Compiler Construction�����������������˸���UNIX ƽ̨�ϵ�һ����׼���ߡ�

ArticleIllustration:

Profiling with GProf

ArticleBody:

Profiling in a nutshell

�����Ҫ�����ĸ���dz��򵥣�ͨ����¼���������ĵ��úͽ���ʱ�䣬���ǿ��Լ����������������ʱ�ij���Ρ� ���ַ����������ƺ�Ҫ���Ѻܶ������������˵��ǣ�������ʵ����������Զ������ֻ��Ҫ���� gcc ����ʱ����һ������IJ���('-pg')���������������õģ��������Ѽ������Ҫ�������й����ݣ���Ȼ������'gprof'�Ը�����ķ�����Щ�����

��������: Pathalizer

��ʹ����һ����ʵ��ʹ�õij�������Ϊ���ӣ��� pathalizer��һ����: ��event2dot��һ����·�����¼��������ļ�ת��Ϊͼ�λ���dot���ļ��Ĺ��ߣ�executable which translates a pathalizer 'events' file to a graphviz 'dot' file����

�򵥵�˵������һ���ļ������ȡ�����¼���Ȼ�����Ƿֱ𱣴�Ϊͼ��(��ҳΪ�ڵ㣬�ҽ�ҳ��ҳ֮���ת����Ϊ�ߣ���Ȼ����Щͼ������Ϊһ�Ŵ��ͼ�Σ�������Ϊͼ�λ���'dot'��ʽ�ļ���

�������ʱ

�������Ǹ�����δ���Ż��ij����һ��ʱ���������ǵ�����Ҫ����ʱ�䡣���ҵļ������ʹ��event2dot����Դ�����������Ϊ���루���55000�����ݣ�������Ҫ���ֶ��ӣ�

real    3m36.316s
user    0m55.590s
sys     0m1.070s

�������

Ҫʹ��gprof ����Ҫ�������ڱ����ʱ��Ҫ����'-pg' ѡ����Ǿ����������±���Դ�����£�
g++ -pg dotgen.cpp readfile.cpp main.cpp graph.cpp config.cpp -o event2dot

�������ǿ����ٴ�����event2dot����ʹ������ǰ��ʹ�õIJ������ݡ�����������е�ʱ��event2dot���еķ������ݻᱻ�Ѽ���������'gmon.out'�ļ��У����ǿ���ͨ������'gprof event2dot | less'���鿴�����

gprof ����ʾ�����µĺ����Ƚ���Ҫ��

 % cumulative  self              self     total           
 time seconds  seconds  calls s/call s/call name    
43.32   46.03  46.03 339952989  0.00  0.00 CompareNodes(Node *,Node *)
25.06   72.66  26.63    55000   0.00  0.00 getNode(char *,NodeListNode *&)
16.80   90.51  17.85 339433374  0.00  0.00 CompareEdges(Edge *,AnnotatedEdge *)
12.70  104.01  13.50    51987   0.00  0.00 addAnnotatedEdge(AnnotatedGraph *,Edge *)
 1.98  106.11   2.10    51987   0.00  0.00 addEdge(Graph *,Node *,Node *)
 0.07  106.18   0.07        1   0.07  0.07 FindTreshold(AnnotatedEdge *,int)
 0.06  106.24   0.06        1   0.06 28.79 getGraphFromFile(char *,NodeListNode *&,Config *)
 0.02  106.26   0.02        1   0.02 77.40 summarize(GraphListNode *,Config *)
 0.00  106.26   0.00    55000   0.00  0.00 FixName(char *)
���Կ�������һ�������Ƚ���Ҫ: ����������󲿷ֵ�����ʱ��������ռ���ˡ�

�Ż�

���������Կ������������󲿷ֵ�ʱ�䶼������CompareNodes�����ϣ��� grep �鿴һ������CompareNodes ֻ�DZ�CompareEdges������һ�ζ���, ��CompareEdges��ֻ��addAnnotatedEdge���á������Ƕ���������������嵥�С������������Ӧ�������Ż��ĵط��˰ɣ�

����ע�⵽addAnnotatedEdge������һ����������Ȼ����������ʵ�֣�����ȴʵ�ڲ�����õ��������͡����Ǿ��������� g->edges �ö�����������: �⽫��ʹ�ò��Ҹ��졣

���

�������ǿ�һ���Ż�������н��:
real    2m19.314s
user    0m36.370s
sys     0m0.940s

�ڶ���

�ٴ����� gprof ������:
%   cumulative self           self    total           
 time   seconds seconds calls  s/call  s/call name    
87.01     25.25  25.25  55000    0.00    0.00 getNode(char *,NodeListNode *&)
10.65     28.34   3.09  51987    0.00    0.00 addEdge(Graph *,Node *,Node *)
��������ǰռ�ô�������ʱ�ĺ��������Ѿ�������ռ������ʱ�Ĵ�ͷ�ˣ�������һ�����Ż�һ���أ��ýڵ��ϣ����ȡ���ڵ�����

��μ�ֱ�Ǹ��޴�Ľ���:

real    0m3.269s
user    0m0.830s
sys     0m0.090s

���� C/C++ ���������

���������ܶ����������ʹ��gprof ������, ����KProf (����) �� cgprof����Ȼͼ�ν���Ŀ���������������Ҹ�����Ϊ�����е�gprof ʹ�ø����㡣

���������Եij�����з���

���������������gprof ����C/C++ �ij�����з�����������������ʵһ����������: �� Perl,���ǿ�����Devel::DProf ģ�顣��ij���Ӧ����perl -d:DProf mycode.pl����ʼ����ʹ��dprofpp���鿴���������������������gcj ���������Java ������Ҳ����ʹ��gprof��Ȼ��Ŀǰ��ֻ֧�ֵ��̵߳�Java ���롣

����

���������Ѿ������ģ����ǿ���ʹ�ó����Ҫ�������ٵ��ҵ�һ����������ֵ���Ż��ĵط�����ֵ���Ż��ĵط��Ż������ǿ��Խ�һ�����������ʱ�� 3��36�� ���ٵ����� 5�룬�������������ӿ�����һ����

References