1.8 KiB
1.8 KiB
C++ Profiling with gprof
What is gprof?
gprof is a GNU profiler that helps analyze where a program spends most of its execution time. It provides function call counts and execution time details.
Installing gprof
$ sudo apt-get install binutils
Compiling a C++ Program for Profiling
To use gprof, compile your program with the -pg flag:
$ g++ -pg -o my_program my_program.cpp
Example C++ Program
Create a file my_program.cpp with the following code:
#include <iostream>
#include <chrono>
#include <thread>
void slowFunction() {
std::this_thread::sleep_for(std::chrono::seconds(1));
}
void fastFunction() {
for (volatile int i = 0; i < 1000000; ++i);
}
int main() {
for (int i = 0; i < 5; ++i) slowFunction();
for (int i = 100; i < 200; ++i) fastFunction();
return 0;
}
Running and Profiling the Program
- Compile the program:
$ g++ -pg -o my_program my_program.cpp - Execute the program to generate
gmon.out:$ ./my_program - Analyze the profiling data:
$ gprof my_program gmon.out > profile.txt $ cat profile.txt
Understanding the Output
- Flat Profile: Shows execution time spent in each function.
- Call Graph: Displays function call relationships and their execution time.
Best Practices for Using gprof
- Use
-O2optimizations but avoid-O3, which may inline functions and reduce profiling accuracy. - Profile with realistic input data to get meaningful results.
- Optimize the slowest functions first based on the profiling report.
Conclusion
gprof is a powerful tool for detecting performance bottlenecks in C++ programs. By identifying expensive functions, developers can make targeted optimizations.