gprofcan only report call times and counts by function, the best way to get finer-grained information on where the program is spending its time is to re-factor large functions into sequences of calls to smaller ones. Beware however that this can introduce artifical hot spots since compiling with -pg adds a significant overhead to function calls. An alternative solution is to use a non-intrusive profiler, e.g. oprofile.
gprof -l -C objfile | sort -k 3 -n -r
This listing will show you the lines in your code executed most often,
but not necessarily those that consumed the most time.
for i in `seq 1 100`; do fastprog mv gmon.out gmon.out.$i done gprof -s fastprog gmon.out.* gprof fastprog gmon.sum
If your program is completely deterministic, all the call counts will be simple multiples of 100 (i.e. a function called once in each run will appear with a call count of 100).