123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- -- Time estimation
- -- This program can be used in order to estimate the
- -- time of access to Rigal data structures, as well as
- -- understand expensive and not expensive operations.
- -- Results in speed.res.
- -- Measurements are in cs - 1/100 of seconds.
- -- The computer clock gives results with resolution
- -- not more than 6 cs. So, normally you shouldn't pay attention
- -- to fluctuations less than 10 cs.
- -- MEASUREMENTS
- -- For 5000 times on LEO (IBM AT 486) computer , in 1/100 of seconds
- -- counter list-cr tree-cr list[19] tree.(19)
- -- Int/11 1600 600 4500 1000 1000
- -- Int/72 350 140 1300 220 220
- -- Comp/11 65 48 620 80 250
- -- Comp/72 11 10 125 13 35
- -- Comp/72/Win 11 15 150 16 35
- -- LEGEND:
- -- Int - interpreter. Comp - compiled program
- -- 11 - non-turbo mode. 11 times faster than IBM XT 88 /4.7 MHz
- -- 72 - turbo mode. 72 times faster than ------- " --------
- -- Win - MS-Windows version.
- #M
- -- OPEN S 'speed.res';
- OPEN S ' ';
- $EOLD:=(.0 0 0 0 0 0 0 0.);
- $CORR:=0;
- -- All tested operations are performed in loops. These loops
- -- are controlled by counter. Since we are not interested in
- -- time consumed by counter, we have to substract the time
- -- consumed by the counter ($CORR) from all experiments.
- $MAX:=20000;
- -- Useful values: Maximal 20000.
- -- Minimal 26
- #time();
- $I:=1;
- LOOP $I+:=1; IF $I=$MAX->BREAK FI; END;
- $CORR:=#time();
- S<< ' Correction = ' $CORR ' cs used by the counter ' ;
-
- $I:=1;
- LOOP $I+:=1; IF $I=$MAX->BREAK FI; $Z!.:=T; END;
- S<< ' Creation of list with ' $MAX ' elements ' #time() cs ;
- $I:=0;
- LOOP $I+:=1; IF $I=$MAX->BREAK FI; $TR++:=<.
- #CHR(#ORD(A)+ $I MOD 25)
- :T.>; END;
- S<< ' Creation of tree with ' $MAX '(different=' #LEN($TR)
- ') elements ' #time() cs ;
- -- PRINT $TR;
-
- $J:=1;
- LOOP
- $I:=1;
- LOOP $I+:=1; IF $I=$MAX->BREAK FI; $R:=$Z[$J]; END;
- S << ' Access to ' $J '-th element of list ' $MAX
- ' times ' #time() cs;
- $J:=$J+3;
- IF $J>=20->BREAK FI;
- END;
-
- $J:=0;
- LOOP
- $LET:=#CHR(#ORD(A)+ $J MOD 26);
- $I:=1;
- LOOP
- $I+:=1;
- IF $I=$MAX->BREAK FI;
- $R:=$TR.$LET;
- END;
- S << ' Access to ' $J '-th element (' $LET ') of tree ' $MAX
- ' times ' #time() cs;
- $J:=$J+3;
- IF $J>=26->BREAK FI;
- END;
-
- #CALL_PAS(1 'Press ENTER');
- ##
- #time
- /
- $E:=#CALL_PAS(89); -- Current time , 8 integers
- -- Last 2 are seconds and centi-seconds
- -- S<<$E;
- $EOLD:=LAST #M $EOLD;
- $sec:=$E[7]-$EOLD[7]; -- seconds elapsed after last #time
- IF $sec<0 -> $sec+:=60;FI;
- $td:=($E[8]-$EOLD[8])
- +100*$sec
- -LAST #M $CORR;
-
- LAST #M $EOLD:=$E;
- RETURN $td/ ##
|