TURBO-LESSONS - A Pascal Tutorial Version 1.01 Page 79 TURBO-LESSON 17: A TIMING FUNCTION OBJECTIVES - In this lesson, you will learn about: 1. Include files 2. A timing function 3. Improving timing accuracy 4. Sources of errors in timing 1. Include files. After you have debugged and tested a subprogram, you no longer need to see the source statements anymore. It would be great if you could just use the subprogram like one of the predefined functions or procedures. You can, almost! Here's how: (1) Store the subprogram in a file. You may want to use a filename extension such as .INC to mark your "Include" files. (2) In the program where you will use the subprogram, use the special comment statement to include the file. It's form is: {$I ABC.INC } How it works: As the program is compiling, the contents of the file, ABC.INC will be compiled at the point where {$I ABC.INC } occurs in the program. ##### DO: Look at PROG17. Notice the statement {$I Time.Inc Get System time in seconds } This statement instructs the compiler to compile whatever it finds in a file named Time.Inc. The actual function, Time, is not in PROG17. All that appears in PROG17 is the include statement. Include files provide a way to keep your programs uncluttered. Œ TURBO-LESSONS - A Pascal Tutorial Version 1.01 Page 80 ##### DO: Inspect Time.Inc. For now, just note that the contents of this file are program statements that can be compiled. ##### DO: Compile PROG17. Watch the bottom left of the screen. How do you know when the include file is being compiled? Did you see the "I"? If not, compile the program again. 2. A timing function. The include file, Time.Inc, contains a function called Time which provides the time from the system clock. Since this is an include file, you don't have to know how it works, just what it does. It can be viewed like a predefined function. The function provides the system clock time converted to seconds. This makes it easy to compare two times by subtracting the earlier time from the later. ##### DO: Examine PROG17 again. PROG17 gets Start_Time from the function, Time. A FOR loop is used to repeat something you want to time. After the FOR loop is done, Stop_Time is obtained from Time. The results printed give both total elapsed time and the time for a single repetition. ##### DO: Run PROG17 using 1000 as the number of repetitions. The function, Time, is itself being timed in PROG17. Œ TURBO-LESSONS - A Pascal Tutorial Version 1.01 Page 81 ##### DO: Run the program with the 10 as the number of repetitions. Input 10 several times and compare the output. ##### DO: Run the program inputting 1 several times. Do you think the time function is accurate? 3. Improving Timing Accuracy. One way to improve the timing accuracy, in this case, is to average the time over many repetitions. ##### DO: Run the program to complete the table below. Number of Time for Repetitions One Repetition 10 50 100 500 1000 2000 5000 What conclusions can you make from the results you observed? What is the minimum number of repetitions needed for reasonably accurate results? ##### DO: Run the program, inputting the "minimum" you chose above several times. Are the results accurate? Try it again with a minimum about half as large. Are the results less accurate? Œ TURBO-LESSONS - A Pascal Tutorial Version 1.01 Page 82 4. Sources of errors in timing. Time to look at another problem! What is actually being timed in PROG17? The statement (A:=Time;)? The timing section of PROG17 follows: Start_Time := Time; FOR I := 1 to K DO A := Time; Stop_Time := Time; What period of time is actually included in Elapsed_Time? The period measured starts at the end of the execution of the statement: Start_Time := Time; and ends at the end of the execution of the statement: Stop_Time := Time; This includes the time needed to execute FOR I := 1 to K DO and Stop_Time := Time; in addition to the time for the action we want to measure: A := Time; Is this a serious problem? ##### DO: Run the program for 1000 repetitions. Record the total elapsed time and the time for one repetition for later comparison. Œ TURBO-LESSONS - A Pascal Tutorial Version 1.01 Page 83 ##### DO: Change the FOR statement to: FOR I := 1 to K DO; {Do nothing. Semicolon ends the FOR loop.} Delete or comment out the statement, (A := Time;). Run the program for 1000 repetitions. Record the total elapsed time and the time for one repetition. These are times with the (A := Time;) statement removed. How do these times compare to the times recorded in the previous exercise? Are these times at least 10 times as small as the times in the previous exercise? Do you think you are getting a reasonable measure of the Time function? ##### DO: Change the FOR statement back to its original form: FOR I := 1 to K DO After the FOR statement, add the statement: J := 2; Run the program for 1000 repetitions. Record the results. How do they compare with the times for the FOR loop? Do you know how much time is needed to execute (J := 2;)? ##### DO: Try to formulate a rule to help you decide whether you are getting reasonable results in a particular case using the Time function. Œ