|
|
1.1 ! root 1: .TI F77/TIMING "Sep. 15, 1984" ! 2: Timing Programs, Profiles ! 3: ! 4: UNIX divides the processor time charged to a job into user time and ! 5: system time. User time is the time the processor spends computing ! 6: for the process; system time is the time the processor spends ! 7: executing system calls (I/O requests, forks, execs, etc.) ! 8: on your behalf. ! 9: ! 10: Both kinds of time can vary according to the system load ! 11: because processor time spent handling interrupts is charged ! 12: to the current user even if the activity was caused by some ! 13: other user or some system function. ! 14: In practise the user time varies much less than the system time. ! 15: The times are kept in 60th of a second units. ! 16: You are charged for both user time and system time. ! 17: ! 18: Program segments may be timed using the dtime() library subroutine ! 19: (see "man 3f dtime"): ! 20: ! 21: .nf ! 22: dimension tarray(2) ! 23: ... ! 24: call dtime(tarray) ! 25: ... program segment to be timed ... ! 26: call dtime(tarray) ! 27: print 8000, tarray ! 28: 8000 format(" user time = ",f8.3," system time = ",f8.3) ! 29: .fi ! 30: ! 31: Dtime() in this example will put the user time used by the ! 32: program segment in tarray(1) and the system time used in tarray(2). ! 33: ! 34: It is best to exclude I/O operations from the segment being timed. ! 35: Since the times are kept in units of a 60th of a second and vary by ! 36: system load, do not try to time any computation that takes less than 10 ! 37: or 20 seconds. If the computation is fast, put it in a loop and ! 38: time 10 or 100 repetitions. ! 39: ! 40: It is also possible to profile an entire program and find out ! 41: how often each subprogram was called and how much time it used. ! 42: First compile the program with the '-p' flag, run it and then ! 43: execute the prof utility to print out the profile: ! 44: ! 45: .nf ! 46: % f77 -p prog.f ! 47: prog.f: ! 48: MAIN: ! 49: sub1: ! 50: sub2: ! 51: sub3: ! 52: Loading a.out ... ! 53: % ! 54: % a.out ! 55: ... program output ... ! 56: % prof ! 57: ! 58: %time cumsecs #call ms/call name ! 59: 41.1 3.37 2 1683.48 _sub1_ ! 60: 34.2 6.17 1 2800.24 _sub2_ ! 61: 12.2 7.17 1 1000.09 _MAIN__ ! 62: 11.8 8.13 2 483.37 _sub3_ ! 63: 0.4 8.17 _fstat ! 64: 0.2 8.18 _x_putc ! 65: .fi ! 66: ! 67: In this example, sub1 was called twice and used 3.37 seconds of processor ! 68: time (41% of the total), sub2 was called once and used ! 69: 6.17 - 3.37 = 2.80 seconds (34%), etc. Prof keeps track of the sum ! 70: of user and system times. The last two lines of the output are for ! 71: library routines which were not compiled with the profile option. ! 72: ! 73: For more extensive profiling statistics, use the '-pg' option and the ! 74: gprof command. See "man f77" and "man gprof" for details. ! 75: ! 76: It is also possible to time entire commands. You can do it directly ! 77: by invoking the C Shell's builtin time command: ! 78: ! 79: .nf ! 80: % time a.out ! 81: 6.5u 4.6s 0:23 48% 12+47k 690+688io 17pf+0w ! 82: .fi ! 83: ! 84: This is partially documented in "man csh" and more fully in "An ! 85: Introduction to the C shell", section 2.8. It tells us the command ! 86: used 6.5 seconds of user time, 4.6 seconds of system time and took 23 ! 87: seconds of real (clock) time to finish. During those 23 seconds, it ! 88: used 48% of the cpu cycles( 48% = (6.5+4.6)/23. ). On the average, it ! 89: used 12k bytes of program space and 47k bytes of data space. The ! 90: program did 690 disk reads and 688 disk writes, had 17 page faults and ! 91: did not have any pages swapped out. ! 92: ! 93: A second method for timing a program is to use /bin/time: ! 94: ! 95: .nf ! 96: % /bin/time a.out ! 97: 46.0 real 5.5 user 3.8 sys ! 98: .fi ! 99: ! 100: It is similar to the C shell time, but gives much less information. ! 101: Note that both commands are named time. If you type "man time", ! 102: you will be told about /bin/time rather than the command built ! 103: into the C shell. ! 104: ! 105: A third way is to set the C shell variable "time" to a minimum. ! 106: Thereafter, if a command takes more than that amount of cpu time ! 107: (system plus user time), ! 108: the statistics will automatically be listed using the same format as ! 109: the C shell time command. This is reversed by the unset time command. ! 110: ! 111: .nf ! 112: % set time = 4 ! 113: % a.out ! 114: 5.7u 4.3s 0:59 16% 12+47k 703+654io 4pf+0w ! 115: % ! 116: % unset time ! 117: % a.out ! 118: %
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.