Gprof: Difference between revisions
No edit summary |
No edit summary |
||
(7 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<languages /> | |||
<translate> | |||
=GNU Profiler (gprof) = <!--T:1--> | |||
== What is gprof? == | |||
[https://sourceware.org/binutils/docs/gprof/ gprof] is a profiling software which collects information and compiles statistics on your code. Generally, it searches for functions and subroutines in your program and inserts timing instructions for each one. Executing such a modified program creates a raw data file which can be interpreted by gprof and turned into profiling statistics. | |||
<!--T:2--> | |||
[https://sourceware.org/binutils/docs/gprof/ gprof] comes with the GNU compiler suite and is available with the <tt>gcc</tt> module on our clusters. | |||
[https://sourceware.org/binutils/docs/gprof/ | |||
== Preparing your application == <!--T:3--> | |||
=== Loading the GNU compiler === | |||
== Preparing your application == | |||
=== | |||
Load the appropriate GNU compiler. For example, for GCC: | Load the appropriate GNU compiler. For example, for GCC: | ||
{{Command|module load gcc/7.3.0}} | {{Command|module load gcc/7.3.0}} | ||
=== | === Compiling your code === <!--T:4--> | ||
To get useful information from [https://sourceware.org/binutils/docs/gprof/ | 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 to the compilation command. This option tells the compiler to generate extra code to write profile information suitable for the analysis. Without this option, no call-graph data will be gathered and 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 | ||
</pre> | </pre> | ||
=== | === Executing your code === | ||
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 | You should run your code the same way as you would 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, | 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 the current directory, <tt>gmon.out</tt> will be created in the new working directory, insofar as your program has sufficient permissions to do so. | ||
=== | === Getting the profiling data === <!--T:5--> | ||
In this step the | In this step the gprof tool is executed with the binary name and the above mentioned <tt>gmon.out</tt> as argument; the analysis file is created with all the desired profiling information. | ||
<!--T:6--> | |||
{{Command|gprof /path/to/your/executable gmon.out > analysis.txt}} | {{Command|gprof /path/to/your/executable gmon.out > analysis.txt}} | ||
</translate> |
Latest revision as of 17:48, 13 October 2020
GNU Profiler (gprof)[edit]
What is gprof?[edit]
gprof is a profiling software which collects information and compiles statistics on your code. Generally, it searches for functions and subroutines in your program and inserts timing instructions for each one. Executing such a modified program creates a raw data file which can be interpreted by gprof and turned into profiling statistics.
gprof comes with the GNU compiler suite and is available with the gcc module on our clusters.
Preparing your application[edit]
Loading the GNU compiler[edit]
Load the appropriate GNU compiler. For example, for GCC:
[name@server ~]$ module load gcc/7.3.0
Compiling 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 to the compilation command. This option tells the compiler to generate extra code to write profile information suitable for the analysis. Without this option, no call-graph data will be gathered and you may get the following error:
gprof: gmon.out file is missing call-graph data
Executing your code[edit]
Once your code has been compiled with the proper options, you then execute it:
[name@server ~]$ /path/to/your/executable arg1 arg2
You should run your code the same way as you would 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 the current directory, gmon.out will be created in the new working directory, insofar as your program has sufficient permissions to do so.
Getting the profiling data[edit]
In this step the gprof tool is executed with the binary name and the above mentioned gmon.out as argument; the analysis file is created with all the desired profiling information.
[name@server ~]$ gprof /path/to/your/executable gmon.out > analysis.txt