adding flat profile result

This commit is contained in:
Jidong Xiao
2025-02-24 22:33:07 -05:00
committed by JamesFlare
parent e275aa3ad7
commit 165034d3da

View File

@@ -57,10 +57,24 @@ int main() {
$ cat profile.txt $ cat profile.txt
``` ```
## Understanding the Output ## Understanding the Output (in the profile.txt file)
- **Flat Profile**: Shows execution time spent in each function. - **Flat Profile**: Shows execution time spent in each function.
- **Call Graph**: Displays function call relationships and their execution time. - **Call Graph**: Displays function call relationships and their execution time.
The profiling results show that heavyComputation() takes significantly more execution time than lightComputation(), even though lightComputation() is called 1000 times.
The flat profile from gprof also indicates the percentage of time spent in each function, helping to identify bottlenecks. For the above test program, the flat profile is like this:
```plaintext
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
85.71 0.24 0.24 1 240.00 240.00 heavyComputation()
14.29 0.28 0.04 1000 0.04 0.04 lightComputation()
0.00 0.28 0.00 1 0.00 0.00 __static_initialization_and_destruction_0(int, int)
```
Note: The __static_initialization_and_destruction_0(int, int) function is generated by the compiler during the static initialization and destruction phases of a program, particularly for global or static variables.
## Best Practices for Using `gprof` ## Best Practices for Using `gprof`
- Use `-O2` optimizations but **avoid `-O3`**, which may inline functions and reduce profiling accuracy. - Use `-O2` optimizations but **avoid `-O3`**, which may inline functions and reduce profiling accuracy.
- Profile with realistic input data to get meaningful results. - Profile with realistic input data to get meaningful results.