gprof can 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
artificial 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.
     gcov program.
               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).