Difference between revisions of "Parameter passing benchmark test"
Larryducie (talk | contribs) |
Larryducie (talk | contribs) |
||
Line 1: | Line 1: | ||
− | Below is the code for a test program designed benchmark the passing of large character data to a subprocedure. To call this program simply call it from a command line | + | Below is the code for a test program designed benchmark the passing of large character data to a subprocedure. To call this program simply call it from a command line. The program will perform each check and print out the average call times per 100 calls for each check. There are 2 optional parameters. the first parameter will instruct the program to perform that number of calls for each test. The second parameter will instruct the program to print the time taken to perform that number of calls. The default for the parameters is 10,000 and 100. that is, the program will call each subprocedure 10,000 times and give the average time per 100 calls. |
The results will be displayed on the terminal. | The results will be displayed on the terminal. | ||
− | |||
− | |||
== The code == | == The code == | ||
Line 10: | Line 8: | ||
d valueconst pr extpgm('VALUECONST') | d valueconst pr extpgm('VALUECONST') | ||
− | d | + | d p_ntimes 15p 5 const |
+ | d p_percall 15p 5 const | ||
d valueconst pi | d valueconst pi | ||
− | d | + | d p_ntimes 15p 5 const |
+ | d p_percall 15p 5 const | ||
d byvalue pr | d byvalue pr | ||
Line 28: | Line 28: | ||
d getchar pr 10i 0 extproc('getchar') | d getchar pr 10i 0 extproc('getchar') | ||
+ | |||
+ | d ntimes s 10i 0 inz(10000) | ||
+ | d percall s 10i 0 inz(100) | ||
+ | d group s 10i 0 inz(0) | ||
d startTime s z | d startTime s z | ||
Line 42: | Line 46: | ||
d charField s 65535a | d charField s 65535a | ||
/free | /free | ||
+ | |||
+ | // Override number of calls to make to each function... | ||
+ | if %parms >= 1; | ||
+ | ntimes = p_ntimes; | ||
+ | endif; | ||
+ | |||
+ | // Override number of calls to group over... | ||
+ | if %parms >= 2; | ||
+ | percall = p_percall; | ||
+ | endif; | ||
+ | |||
+ | group = ntimes/percall; | ||
printf('----------------------------------------------' + crlf); | printf('----------------------------------------------' + crlf); | ||
printf('Starting test...' + crlf); | printf('Starting test...' + crlf); | ||
+ | printf('' + crlf); | ||
+ | printf('Testing with total ' + %char(ntimes) + ' calls' + crlf); | ||
+ | printf('Times given per ' + %char(percall) + ' calls' + crlf); | ||
+ | printf('' + crlf); | ||
// For VARYING... | // For VARYING... | ||
Line 52: | Line 72: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 59: | Line 79: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing the literal _a_ for 65535a varying...' + crlf); | printf('Passing the literal _a_ for 65535a varying...' + crlf); | ||
Line 71: | Line 91: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 78: | Line 98: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing a 65535a varying with 100a filled...' + crlf); | printf('Passing a 65535a varying with 100a filled...' + crlf); | ||
Line 90: | Line 110: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 97: | Line 117: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing a 65535a varying with 1000a filled...' + crlf); | printf('Passing a 65535a varying with 1000a filled...' + crlf); | ||
Line 109: | Line 129: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 116: | Line 136: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing a 65535a varying with 65535a filled...' + crlf); | printf('Passing a 65535a varying with 65535a filled...' + crlf); | ||
Line 129: | Line 149: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 136: | Line 156: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing the literal _a_ for 65535a...' + crlf); | printf('Passing the literal _a_ for 65535a...' + crlf); | ||
Line 148: | Line 168: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 155: | Line 175: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing a 65535a with 100a filled...' + crlf); | printf('Passing a 65535a with 100a filled...' + crlf); | ||
Line 167: | Line 187: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 174: | Line 194: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing a 65535a with 1000a filled...' + crlf); | printf('Passing a 65535a with 1000a filled...' + crlf); | ||
Line 186: | Line 206: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t1 = (%diff(endTime : startTime : *ms)/ | + | t1 = (%diff(endTime : startTime : *ms)/group); |
startTime = %timestamp(); | startTime = %timestamp(); | ||
Line 193: | Line 213: | ||
endfor; | endfor; | ||
endTime = %timestamp(); | endTime = %timestamp(); | ||
− | t2 = (%diff(endTime : startTime : *ms)/ | + | t2 = (%diff(endTime : startTime : *ms)/group); |
printf('Passing a 65535a with 65535a filled...' + crlf); | printf('Passing a 65535a with 65535a filled...' + crlf); | ||
Line 235: | Line 255: | ||
The results so far are: | The results so far are: | ||
+ | |||
+ | (If you wish to include the timings for your machine it is recommended that you call the program with no parameters. This will ensure all benchmark tests will be easily compared (10,000 calls per subprocedure, and time per 100 calls printed) | ||
<pre> | <pre> |
Revision as of 06:12, 6 November 2007
Below is the code for a test program designed benchmark the passing of large character data to a subprocedure. To call this program simply call it from a command line. The program will perform each check and print out the average call times per 100 calls for each check. There are 2 optional parameters. the first parameter will instruct the program to perform that number of calls for each test. The second parameter will instruct the program to print the time taken to perform that number of calls. The default for the parameters is 10,000 and 100. that is, the program will call each subprocedure 10,000 times and give the average time per 100 calls.
The results will be displayed on the terminal.
The code
H dftactgrp(*no) bnddir('QC2LE')
d valueconst pr extpgm('VALUECONST')
d p_ntimes 15p 5 const
d p_percall 15p 5 const
d valueconst pi
d p_ntimes 15p 5 const
d p_percall 15p 5 const
d byvalue pr
d bigparm 65535a varying value
d byconst pr
d bigparm 65535a varying const
d byvalueC pr
d bigparm 65535a value
d byconstC pr
d bigparm 65535a const
d printf pr extproc('printf')
d * value options(*string)
d getchar pr 10i 0 extproc('getchar')
d ntimes s 10i 0 inz(10000)
d percall s 10i 0 inz(100)
d group s 10i 0 inz(0)
d startTime s z
d endTime s z
d t1 s 10i 0
d t2 s 10i 0
d msg s 52a
d i s 10i 0
d crlf c const(X'0d25')
d char100 s 100a varying inz(*all'X')
d char1000 s 1000a varying inz(*all'X')
d char65535 s 65535a varying inz(*all'X')
d varyingField s 65535a varying
d charField s 65535a
/free
// Override number of calls to make to each function...
if %parms >= 1;
ntimes = p_ntimes;
endif;
// Override number of calls to group over...
if %parms >= 2;
percall = p_percall;
endif;
group = ntimes/percall;
printf('----------------------------------------------' + crlf);
printf('Starting test...' + crlf);
printf('' + crlf);
printf('Testing with total ' + %char(ntimes) + ' calls' + crlf);
printf('Times given per ' + %char(percall) + ' calls' + crlf);
printf('' + crlf);
// For VARYING...
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalue ('a');
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconst ('a');
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing the literal _a_ for 65535a varying...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
varyingField = char100;
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalue (varyingField);
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconst (varyingField);
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing a 65535a varying with 100a filled...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
varyingField = char1000;
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalue (varyingField);
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconst (varyingField);
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing a 65535a varying with 1000a filled...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
varyingField = char65535;
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalue (varyingField);
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconst (varyingField);
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing a 65535a varying with 65535a filled...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
// For CHAR...
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalueC ('a');
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconstC ('a');
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing the literal _a_ for 65535a...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
charField = char100;
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalueC (charField);
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconstC (charField);
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing a 65535a with 100a filled...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
charField = char1000;
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalueC (charField);
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconstC (charField);
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing a 65535a with 1000a filled...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
charField = char65535;
startTime = %timestamp();
for i = 1 to %int(ntimes);
byvalueC (charField);
endfor;
endTime = %timestamp();
t1 = (%diff(endTime : startTime : *ms)/group);
startTime = %timestamp();
for i = 1 to %int(ntimes);
byconstC (charField);
endfor;
endTime = %timestamp();
t2 = (%diff(endTime : startTime : *ms)/group);
printf('Passing a 65535a with 65535a filled...' + crlf);
printf('value: ' + %editc(t1 : 'P') + ' ms | '
+ 'const: ' + %editc(t2 : 'P') + ' ms' + crlf);
printf('Test ended - press ENTER to close window...' + crlf);
printf('----------------------------------------------' + crlf);
// Read 1 char from the keyboard - to force display of screen...
i = getchar();
*inlr = *on;
/end-free
P byvalue b
D byValue pi
D bigParm 65535a varying value
P byValue e
P byConst b
D byConst pi
D bigParm 65535a varying const
P byConst e
P byvalueC b
D byValueC pi
D bigParm 65535a value
P byValueC e
P byConstC b
D byConstC pi
D bigParm 65535a const
P byConstC e
RESULTS
The results so far are:
(If you wish to include the timings for your machine it is recommended that you call the program with no parameters. This will ensure all benchmark tests will be easily compared (10,000 calls per subprocedure, and time per 100 calls printed)
Version V5R2 Model 270 Times per 1 call Passing the literal _a_ for 65535a varying... value: 1510 ms | const: 9 ms Passing a 65535a varying with 100a filled... value: 1456 ms | const: 8 ms Passing a 65535a varying with 1000a filled... value: 1502 ms | const: 8 ms Passing a 65535a varying with 65535a filled.. value: 2219 ms | const: 8 ms Passing the literal _a_ for 65535a... value: 1904 ms | const: 338 ms Passing a 65535a with 100a filled... value: 974 ms | const: 8 ms Passing a 65535a with 1000a filled... value: 973 ms | const: 8 ms Passing a 65535a with 65535a filled... value: 1265 ms | const: 8 ms Version V5R4 Model 520 Times per 1 call Passing the literal _a_ for 65535a varying... value: 133 ms | const: 6 ms Passing a 65535a varying with 100a filled... value: 150 ms | const: 1 ms Passing a 65535a varying with 1000a filled... value: 131 ms | const: 6 ms Passing a 65535a varying with 65535a filled.. value: 201 ms | const: 1 ms Passing the literal _a_ for 65535a... value: 207 ms | const: 41 ms Passing a 65535a with 100a filled... value: 127 ms | const: 1 ms Passing a 65535a with 1000a filled... value: 122 ms | const: 7 ms Passing a 65535a with 65535a filled... value: 120 ms | const: 1 ms Version V5R3 Model 890 Times per 1 call Passing the literal _a_ for 65535a varying... value: 120 ms | const: 0 ms Passing a 65535a varying with 100a filled... value: 60 ms | const: 0 ms Passing a 65535a varying with 1000a filled... value: 50 ms | const: 0 ms Passing a 65535a varying with 65535a filled... value: 90 ms | const: 0 ms Passing the literal _a_ for 65535a... value: 180 ms | const: 30 ms Passing a 65535a with 100a filled... value: 60 ms | const: 0 ms Passing a 65535a with 1000a filled... value: 60 ms | const: 0 ms Passing a 65535a with 65535a filled... value: 60 ms | const: 0 ms Version V5R2 Model 170 (2290) Times per 1 call Passing the literal _a_ for 65535a varying... value: 3339 ms | const: 24 ms Passing a 65535a varying with 100a filled... value: 3314 ms | const: 21 ms Passing a 65535a varying with 1000a filled... value: 3367 ms | const: 21 ms Passing a 65535a varying with 65535a filled... value: 4572 ms | const: 21 ms Passing the literal _a_ for 65535a... value: 4579 ms | const: 1087 ms Passing a 65535a with 100a filled... value: 2483 ms | const: 21 ms Passing a 65535a with 1000a filled... value: 2844 ms | const: 23 ms Passing a 65535a with 65535a filled... value: 2503 ms | const: 22 ms Version V5R2 Model SB1 (2313) Times per 1 call Passing the literal _a_ for 65535a varying... value: 318 ms | const: 2 ms Passing a 65535a varying with 100a filled... value: 301 ms | const: 1 ms Passing a 65535a varying with 1000a filled... value: 339 ms | const: 1 ms Passing a 65535a varying with 65535a filled... value: 439 ms | const: 1 ms Passing the literal _a_ for 65535a... value: 570 ms | const: 95 ms Passing a 65535a with 100a filled... value: 246 ms | const: 1 ms Passing a 65535a with 1000a filled... value: 276 ms | const: 1 ms Passing a 65535a with 65535a filled... value: 246 ms | const: 1 ms