Profiling
Note: All the programs mentioned in this lecture are in:/home/cs352/SUMMER02/lecture21progs/
- Profiling allows us to see where our program spent its time and which functions called which other functions while it was executing. - We can do profiling using gprof. - Using -pg option in gcc turns on profiling info. - After compilation, run the program to completion to get the file gmon.out which contains profiling info in a gprof readable form. - Now we can give the command "gprof a.out > profilinginfo" the profiling info about the program a.out will be written into file "profilinginfo". (In this case we don't have to write the name of the executable, i.e. a.out, since without the executable name, it considers a.out by default.) Note: Your program must exit normally: by returning from main or by calling exit - Two kinds of analysis are performed: - The flat profile: Shows the total amount of time your program spent executing each function. % time This is the percentage of the total execution time your program spent in this function. These should all add up to 100%. cumulative seconds This is the cumulative total number of seconds the computer spent executing this functions, plus the time spent in all the functions above this one in this table. self seconds This is the number of seconds accounted for by this function alone. The flat profile listing is sorted first by this number. calls This is the total number of times the function was called. If the function was never called, or the number of times it was called cannot be determined (probably because the function was not compiled with profiling enabled), the calls field is blank. self ms/call This represents the average number of milliseconds spent in this function per call, if this function is profiled. Otherwise, this field is blank for this function. total ms/call This represents the average number of milliseconds spent in this function and its descendants per call, if this function is profiled. Otherwise, this field is blank for this function. This is the only field in the flat profile that uses call graph analysis. name This is the name of the function. The flat profile is sorted by this field alphabetically after the self seconds and calls fields are sorted. - The call graph: Shows how much time was spent in each function and its children. % time This is the percentage of the total time that was spent in this function, including time spent in subroutines called from this function. The time spent in this function is counted again for the callers of this function. Therefore, adding up these percentages is meaningless. self This is the total amount of time spent in this function. This should be identical to the number printed in the seconds field for this function in the flat profile. children This is the total amount of time spent in the subroutine calls made by this function. This should be equal to the sum of all the self and children entries of the children listed directly below this function. called This is the number of times the function was called. If the function called itself recursively, there are two numbers, separated by a `+'. The first number counts non-recursive calls, and the second counts recursive calls. NOTE: The same fields will have different meanings for the parents of the function and its children(always interpreted with regard to child being called inside the parent...)