Gprof: Difference between revisions

From Alliance Doc
Jump to navigation Jump to search
(Marked this version for translation)
No edit summary
Line 2: Line 2:
<translate>
<translate>
=GNU Profiler (gprof) = <!--T:1-->
=GNU Profiler (gprof) = <!--T:1-->
== What is Gprof ? ==
== What is gprof? ==
[https://sourceware.org/binutils/docs/gprof/ Gprof] is a profiling software which collects information and statistics on your code. Generally, it searches for functions and subroutines in your program and insert timing instructions for each one. Then executing such modified program creates a raw data file which can be interpreted by Gprof and turned into profiling statistics.
[https://sourceware.org/binutils/docs/gprof/ gprof] is a profiling software which collects information and statistics on your code. Generally, it searches for functions and subroutines in your program and insert timing instructions for each one. Then executing such modified program creates a raw data file which can be interpreted by gprof and turned into profiling statistics.


<!--T:2-->
<!--T:2-->
[https://sourceware.org/binutils/docs/gprof/ Gprof]  comes with the GNU compiler (such as GCC or GFORTRAN) and is available with the <tt>gcc</tt> module on Compute Canada clusters.
[https://sourceware.org/binutils/docs/gprof/ gprof]  comes with the GNU compiler (such as GCC or GFORTRAN) and is available with the <tt>gcc</tt> module on Compute Canada clusters.


== Preparing your application == <!--T:3-->
== Preparing your application == <!--T:3-->
Line 14: Line 14:


=== Compile your code === <!--T:4-->
=== Compile your code === <!--T:4-->
To get useful information from [https://sourceware.org/binutils/docs/gprof/ Gprof] , you first need to compile your code with debugging information enabled. With the GNU compilers, you do so by adding the <tt>-pg</tt> option during compilation. This option tells the compiler to generate extra code to write profile information suitable for the analysis. If it is not part of your compiler options then no call-graph data will be gathered. When you run gprof hoping to get the profiling data you may get the following error:
To get useful information from [https://sourceware.org/binutils/docs/gprof/ gprof] , you first need to compile your code with debugging information enabled. With the GNU compilers, you do so by adding the <tt>-pg</tt> option during compilation. This option tells the compiler to generate extra code to write profile information suitable for the analysis. If it is not part of your compiler options then no call-graph data will be gathered. When you run gprof hoping to get the profiling data you may get the following error:
<pre>
<pre>
gprof: gmon.out file is missing call-graph data
gprof: gmon.out file is missing call-graph data
Line 21: Line 21:
Once your code has been compiled with the proper options, you then execute it:
Once your code has been compiled with the proper options, you then execute it:
{{Command|/path/to/your/executable arg1 arg2}}
{{Command|/path/to/your/executable arg1 arg2}}
You should run your code the same way as you would do it without Gprof profiling; the execution line does not change.
You should run your code the same way as you would do it without gprof profiling; the execution line does not change.
Once the binary has been executed and finished without any errors, a new file <tt>gmon.out</tt> is created in the current working directory. Note that if your code changes current directory, then <tt>gmon.out</tt> will be created in the new working directory. Furthermore, your program should have sufficient permissions for this file to be created.
Once the binary has been executed and finished without any errors, a new file <tt>gmon.out</tt> is created in the current working directory. Note that if your code changes current directory, then <tt>gmon.out</tt> will be created in the new working directory. Furthermore, your program should have sufficient permissions for this file to be created.


=== Get the profiling data === <!--T:5-->
=== Get the profiling data === <!--T:5-->
In this step the Gprof tool is executed again with the binary name and the above mentioned <tt>gmon.out</tt> as argument. This should create an analysis file with all the desired profiling information.
In this step the gprof tool is executed again with the binary name and the above mentioned <tt>gmon.out</tt> as argument. This should create an analysis file with all the desired profiling information.
{{Command|gprof /path/to/your/executable gmon.out > analysis.txt}}
{{Command|gprof /path/to/your/executable gmon.out > analysis.txt}}
We can see that the new file <tt>analysis.txt</tt> has been created in the current working directory.
We can see that the new file <tt>analysis.txt</tt> has been created in the current working directory.
</translate>
</translate>

Revision as of 20:08, 7 October 2020

Other languages:

GNU Profiler (gprof)[edit]

What is gprof?[edit]

gprof is a profiling software which collects information and statistics on your code. Generally, it searches for functions and subroutines in your program and insert timing instructions for each one. Then executing such modified program creates a raw data file which can be interpreted by gprof and turned into profiling statistics.

gprof comes with the GNU compiler (such as GCC or GFORTRAN) and is available with the gcc module on Compute Canada clusters.

Preparing your application[edit]

Switch to GNU compiler[edit]

Load the appropriate GNU compiler. For example, for GCC:

Question.png
[name@server ~]$ module load gcc/7.3.0

Compile your code[edit]

To get useful information from gprof , you first need to compile your code with debugging information enabled. With the GNU compilers, you do so by adding the -pg option during compilation. This option tells the compiler to generate extra code to write profile information suitable for the analysis. If it is not part of your compiler options then no call-graph data will be gathered. When you run gprof hoping to get the profiling data you may get the following error:

gprof: gmon.out file is missing call-graph data

Execute your code[edit]

Once your code has been compiled with the proper options, you then execute it:

Question.png
[name@server ~]$ /path/to/your/executable arg1 arg2

You should run your code the same way as you would do it without gprof profiling; the execution line does not change. Once the binary has been executed and finished without any errors, a new file gmon.out is created in the current working directory. Note that if your code changes current directory, then gmon.out will be created in the new working directory. Furthermore, your program should have sufficient permissions for this file to be created.

Get the profiling data[edit]

In this step the gprof tool is executed again with the binary name and the above mentioned gmon.out as argument. This should create an analysis file with all the desired profiling information.

Question.png
[name@server ~]$ gprof /path/to/your/executable gmon.out > analysis.txt

We can see that the new file analysis.txt has been created in the current working directory.