Use launcher script to run smalltalk
...rather than binary. This makes it work in both, in-tree builds
and (new) out-of-tree builds.
"{ Package: 'jv:calipel/s/benchmarks/stx' }"
"{ NameSpace: Smalltalk }"
Object subclass:#BenchmarkSpeedTester
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'CalipeL-S-Benchmarks-St/X'
!
!BenchmarkSpeedTester class methodsFor:'documentation'!
history
"Created: / 12.11.1997 / 17:16:01 / cg"
"Created: #allocSpeedTest / 12.11.1997 / 17:17:26 / cg"
"Created: #integerMathSpeedTest / 12.11.1997 / 17:22:58 / cg"
"Created: #floatMathSpeedTest / 12.11.1997 / 17:23:55 / cg"
"Created: #stringCompareSpeedTest / 12.11.1997 / 17:26:11 / cg"
"Created: #arrayWriteSpeedTest / 12.11.1997 / 17:27:59 / cg"
"Created: #dictionaryWriteSpeedTest / 12.11.1997 / 17:31:41 / cg"
"Modified: #dictionaryWriteSpeedTest / 12.11.1997 / 17:32:18 / cg"
"Created: #orderedCollectionWriteSpeedTest / 12.11.1997 / 17:34:01 / cg"
"Created: #orderedCollectionIterateSpeedTest / 12.11.1997 / 17:35:53 / cg"
"Modified: #integerMathSpeedTest / 13.11.1997 / 17:06:21 / cg"
"Modified: #integerMathSpeedTest / 13.11.1997 / 17:11:41 / cg"
"Modified: #results / 30.7.1998 / 11:14:24 / cg"
!
results
"
#(
('alloc ........:' #allocSpeedTest)
('arrayWrite ...:' #arrayWriteSpeedTest)
('ordCollWrite .:' #orderedCollectionWriteSpeedTest)
('ordCollIterate:' #orderedCollectionIterateSpeedTest)
('dictWrite ....:' #dictionaryWriteSpeedTest)
('integerMath ..:' #integerMathSpeedTest)
('floatMath ....:' #floatMathSpeedTest)
('stringCompare :' #stringCompareSpeedTest)
) do:[:pair |
|title test|
title := pair at:1.
test := pair at:2.
Transcript show:(title);endEntry.
5 timesRepeat:[
Transcript show:((SpeedTester new perform:test) printStringLeftPaddedTo:7);endEntry.
Transcript space.
].
Transcript cr;endEntry.
].
| alloc | arrayWrite | ordCollWrite | ordCollIterate | dictWrite | integerMath | floatMath | stringCompare |
times |100000 | 100000 | 100000 | 100000 | 10000 | 300000 | 300000 | 100000 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
NO JIT
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
alpha433 osf1 | 999 | 363 | 870 | 1166 | 250 | 3680 | 4424 | 359 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
hp B2000 cc | 1625 | 440 | 979 | 2739 | 257 | 3676 | 4982 | 537 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P6/266 lx-ELF/pgcc| 1309 | 789 | 1171 | 1513 | 263 | 4702 | 7109 | 792 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P5/200 linux-ELF | | | | | | | | |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P5/133 linux-aout | 2961 | 1088 | 2225 | 3455 | 586 | 6986 | 14264 | 1146 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
indy/200 irix5.3 | 3837 | 1261 | 3274 | 4262 | 822 | 8158 | 16010 | 1501 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
hp735/100 10.20/gc| 5909 | 1277 | 3906 | 9984 | 1165 | 8977 | 18630 | 1712 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
ss10/40 sol2.5 | 6240 | 2880 | 5837 | 10323 | 1654 | 20372 | 32018 | 3036 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
alpha233 osf1 | 7649(2) | 1332 | 5711(2) | 6981 | 2039(2) | 18752 | 42058(2)| 1245 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
486/50 linux-ELF | | | | | | | | |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
320H aix3.2.5/gcc | 18230 | 8659 | 20991 | 28303 | 6430 | 65679 | 90023 | 9946 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
| alloc | arrayWrite | ordCollWrite | ordCollIterate | dictWrite | integerMath | floatMath | stringCompare |
WITH JIT
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P6/400 lx-ELF/egcs| 434 | 119 | 335 | 581 | 109 | 691 | 2977 | 94 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
alpha433 osf1 | 549 | 159 | 559 | 862 | 187 | 876 | 2993 | 92 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
ultra/250 sol2.6 | 599 | 141 | 604 | 1429 | 242 | 1502 | 3234 | 111 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P6/266 lx-ELF/gcc | 610 | 199 | 483 | 843 | 170 | 1068 | 4071 | 128 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P6/266 lx-ELF/pgcc| 631 | 183 | 494 | 856 | 171 | 1068 | 4208 | 138 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P5/200 linux-ELF | 1475(3) | 330 | 951 | 1610 | 296 | 2088 | 7935(3)| 209 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P5/200Nlinux-ELF | 2142(3) | 331 | 1065 | 1582 | 323 | 2042 | 9974(3)| 215 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P5/200N W95 | 2625(3) | 369 | 1593 | 2114 | 506 | 3462 | 11142(3)| 178 |
| | | | 1978 | 496 | 2253 | 10439 | |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P5/150 linux-ELF | 1520 | 297 | 970 | 1770 | 370 | 1962 | 7995 | 179 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
P5/133 linux-aout | 1669 | 422 | 1171 | 2401 | 405 | 2853 | 9470 | 241 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
indy/200 irix5.3 | 2160 | 521 | 1656 | 2847 | 612 | 5626 | 16653(1)| 316 |
| 1936 | 543 | 1844 | 2962 | 614 | 5458 | 11112(1)| 318 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
ss10/40 sol2.5 | 4099 | 1201 | 3622 | 8192 | 1381 | 16873 | 22720 | 813 |
| 4031 | | | 8032 | 1319 | | 22537 | 807 |
| 4360 | 1189 | 3965 | 7724 | 1428 | 9627 | 21192 | 891 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
alpha233 osf1 | 6373(2) | 513 | 4079(2) | 3799 | 1334(2) | 3910 | 34703(2)| 226 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
486/50 linux-ELF | 6472 | 2192 | 5505 | 11541 | 2082 | 12985 | 47204 | 1394 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
320H aix3.2.5 | 9876 | 3208 | 11787 | 19300 | 3815 | 27664 | 67262 | 2194 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
68k/33Mhz next3.3 | 9936 | 3468 | 9164 | 17808 | 3496 | 59377 | 101936 | 2339 |
-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
| alloc | arrayWrite | ordCollWrite | ordCollIterate | dictWrite | integerMath | floatMath | stringCompare |
Notice:
(1) mips JIT does send for float arithmetic; bytecode interpreter does it inline.
(2) the alpha is running 64 bit code (shuffling around twice as much data)
the 233 alpha tested had NO cache (actually, a totally useless configuration)
(3) the P5/200N used in the test was a notebook (lion) with a poor memory HW-interface;
(results in memory-intensive menchmarks being slower than on a P5/133)
the faster machine has the same CPU, but a much better memory interface.
"
! !
!BenchmarkSpeedTester methodsFor:'tests'!
allocSpeedTest
ObjectMemory markAndSweep.
^ Time millisecondsToRun:[
100000 timesRepeat:[
Array new:10;
new:10;
new:10;
new:10;
new:10;
new:10;
new:10;
new:10;
new:10;
new:10
].
ObjectMemory markAndSweep.
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new allocSpeedTest;endEntry
]
"
"Created: / 12.11.1997 / 17:17:26 / cg"
"Modified: / 19.4.1999 / 14:44:53 / cg"
!
arrayReadSpeedTest
|array junk|
junk := Object new.
array := Array new:10.
^ Time millisecondsToRun:[
100000 timesRepeat:[
array at:1;
at:2;
at:3;
at:4;
at:5;
at:6;
at:7;
at:8;
at:9;
at:10
]
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new arrayReadSpeedTest;endEntry
]
"
"Modified: / 12.11.1997 / 18:09:04 / cg"
"Created: / 7.5.1998 / 15:02:55 / cg"
!
arrayWriteSpeedTest
|array junk|
junk := Object new.
array := Array new:10.
^ Time millisecondsToRun:[
100000 timesRepeat:[
array at:1 put:junk;
at:2 put:junk;
at:3 put:junk;
at:4 put:junk;
at:5 put:junk;
at:6 put:junk;
at:7 put:junk;
at:8 put:junk;
at:9 put:junk;
at:10 put:junk
]
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new arrayWriteSpeedTest;endEntry
]
"
"Created: / 12.11.1997 / 17:27:59 / cg"
"Modified: / 12.11.1997 / 18:09:04 / cg"
!
dictionaryReadSpeedTest
|dict junk key1 key2 key3 key4 key5 key6 key7 key8 key9 key10|
junk := Object new.
key1 := Object new.
key2 := Object new.
key3 := Object new.
key4 := Object new.
key5 := Object new.
key6 := Object new.
key7 := Object new.
key8 := Object new.
key9 := Object new.
key10 := Object new.
dict := IdentityDictionary new.
dict at:key1 put:junk;
at:key2 put:junk;
at:key3 put:junk;
at:key4 put:junk;
at:key5 put:junk;
at:key6 put:junk;
at:key7 put:junk;
at:key8 put:junk;
at:key9 put:junk;
at:key10 put:junk.
^ Time millisecondsToRun:[
10000 timesRepeat:[
dict at:key1;
at:key2;
at:key3;
at:key4;
at:key5;
at:key6;
at:key7;
at:key8;
at:key9;
at:key10
].
].
"
5 timesRepeat:[
Transcript showCR:(SpeedTester new dictionaryReadSpeedTest); endEntry
]
"
"Created: / 7.5.1998 / 15:10:31 / cg"
"Modified: / 7.5.1998 / 15:16:47 / cg"
!
dictionaryWriteSpeedTest
|dict junk key1 key2 key3 key4 key5 key6 key7 key8 key9 key10|
junk := Object new.
key1 := Object new.
key2 := Object new.
key3 := Object new.
key4 := Object new.
key5 := Object new.
key6 := Object new.
key7 := Object new.
key8 := Object new.
key9 := Object new.
key10 := Object new.
^ Time millisecondsToRun:[
10000 timesRepeat:[
dict := IdentityDictionary new.
dict at:key1 put:junk;
at:key2 put:junk;
at:key3 put:junk;
at:key4 put:junk;
at:key5 put:junk;
at:key6 put:junk;
at:key7 put:junk;
at:key8 put:junk;
at:key9 put:junk;
at:key10 put:junk
].
].
"
5 timesRepeat:[
Transcript showCR:(SpeedTester new dictionaryWriteSpeedTest); endEntry
]
"
"Created: / 12.11.1997 / 17:31:41 / cg"
"Modified: / 7.5.1998 / 14:23:24 / cg"
!
floatMathSpeedTest
|a b c d e|
a := 87.0.
b := 53.0.
c := -87.0.
d := 42461.0.
e := 5.0.
^ Time millisecondsToRun:[
300000 timesRepeat:[
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
]
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new floatMathSpeedTest;endEntry
]
"
"Created: / 12.11.1997 / 17:23:55 / cg"
!
integerMathSpeedTest
|a b c d e|
a := 87.
b := 53.
c := -87.
d := 42461.
e := 5.
^ Time millisecondsToRun:[
300000 timesRepeat:[
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
e := (e * a + b) * c + d.
]
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new integerMathSpeedTest;endEntry
]
"
"Created: / 12.11.1997 / 17:22:58 / cg"
"Modified: / 13.11.1997 / 17:11:41 / cg"
!
orderedCollectionIterateSpeedTest
|oc junk|
junk := Object new.
oc := OrderedCollection new:20.
oc addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk.
^ Time millisecondsToRun:[
100000 timesRepeat:[
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
oc do:[:element | ].
]
]
"
5 timesRepeat:[
Transcript showCR:(SpeedTester new orderedCollectionIterateSpeedTest);endEntry
]
"
"Created: / 12.11.1997 / 17:35:53 / cg"
"Modified: / 12.11.1997 / 17:41:50 / cg"
!
orderedCollectionReadSpeedTest
|oc junk|
junk := Object new.
oc := OrderedCollection new:20.
oc addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk.
^ Time millisecondsToRun:[
100000 timesRepeat:[
oc at:1;
at:2;
at:3;
at:4;
at:5;
at:6;
at:7;
at:8;
at:9;
at:10
]
]
"
5 timesRepeat:[
Transcript showCR:(SpeedTester new orderedCollectionReadSpeedTest); endEntry
]
"
"Modified: / 12.11.1997 / 17:44:58 / cg"
"Created: / 7.5.1998 / 15:11:21 / cg"
!
orderedCollectionWriteSpeedTest
|oc junk|
junk := Object new.
^ Time millisecondsToRun:[
100000 timesRepeat:[
oc := OrderedCollection new:20.
oc addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk;
addLast:junk
]
]
"
5 timesRepeat:[
Transcript showCR:(SpeedTester new orderedCollectionWriteSpeedTest); endEntry
]
"
"Created: / 12.11.1997 / 17:34:01 / cg"
"Modified: / 12.11.1997 / 17:44:58 / cg"
!
stringCompareSpeedTest
^ Time millisecondsToRun:[
100000 timesRepeat:[
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long strings'.
]
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new stringCompareSpeedTest;endEntry
]
"
"Created: / 12.11.1997 / 17:26:11 / cg"
"Modified: / 12.11.1997 / 18:47:32 / cg"
!
stringCompareSpeedTest2
^ Time millisecondsToRun:[
100000 timesRepeat:[
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'Xthis is a test of a compare of two long stringsX'.
]
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new stringCompareSpeedTest2;endEntry
]
"
"Modified: / 12.11.1997 / 18:47:32 / cg"
"Created: / 7.5.1998 / 14:32:59 / cg"
!
stringCompareSpeedTest3
^ Time millisecondsToRun:[
100000 timesRepeat:[
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
'this is a test of a compare of two long strings'
= 'this is a test of a compare of two long stringsX'.
]
]
"
5 timesRepeat:[
Transcript showCR:SpeedTester new stringCompareSpeedTest3;endEntry
]
"
"Modified: / 12.11.1997 / 18:47:32 / cg"
"Created: / 7.5.1998 / 14:32:41 / cg"
! !