Initial commit of Smalltalk/X benchmark set.
Not all benchmarks are updated for CalipeL. Benchmarks taken from
package stx:goodies/benchmarks & stx:goodies/benchmarks/misc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkCollection.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,131 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkCollection
+ instanceVariableNames:'collectionClass collectionDatasetSize collectionDataset1
+ collectionDataset2 collectionDataset3 collection
+ collectionDataset1OrderedAsc collectionDataset1OrderedDesc'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkCollection class methodsFor:'running'!
+
+run
+ ^ (BenchmarkSuite class:self) run
+
+ "Created: / 10-06-2013 / 21:53:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+run: benchmark
+ ^ (BenchmarkInstance class:self selector:benchmark) run
+
+ "Created: / 31-05-2013 / 10:39:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-06-2013 / 21:53:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+run: benchmark with: parameters
+ ^ (BenchmarkInstance class:self selector:benchmark) runWith: parameters
+
+ "Created: / 10-03-2014 / 00:12:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection class methodsFor:'testing'!
+
+isAbstract
+ ^ self == BenchmarkCollection
+
+ "Created: / 09-03-2014 / 10:34:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection methodsFor:'parameters'!
+
+collectionClassName
+ ^ collectionClass name
+
+ "Modified (format): / 09-03-2014 / 10:00:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+collectionClassName:aSymbol
+ <parameter: 'Collection class name to benchmark' type: #Symbol values: #(#' * must be defined in subclass *')>
+
+ collectionClass := Smalltalk at: aSymbol asSymbol.
+ collectionClass isNil ifTrue:[
+ self error:'No such class: ', aSymbol
+ ].
+
+ "Created: / 09-03-2014 / 11:07:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+collectionDatasetSize
+ ^ collectionDatasetSize
+
+ "Created: / 10-03-2014 / 00:13:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+collectionDatasetSize:anInteger
+ <parameter: 'Size of a collection' type: #Integer default: 100000>
+ collectionDatasetSize := anInteger.
+
+ "Created: / 10-03-2014 / 00:13:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection methodsFor:'running'!
+
+setUp
+ <setup>
+
+ | random seen generator |
+
+ random := Random new setSeed: 12345.
+ seen := Set new.
+ generator := [
+ | x |
+
+ x := random nextInteger.
+ [ seen includes: x ] whileTrue:[
+ x := random nextInteger.
+ ].
+ seen add: x.
+ x
+ ].
+
+
+ collectionDataset1 := (1 to: collectionDatasetSize) collect:[:i | generator value ].
+ self assert: seen size = collectionDatasetSize.
+ collectionDataset2 := nil. "/ unused.
+ collectionDataset3 := nil. "/ unused.
+ Smalltalk garbageCollect.
+ collection := nil.
+
+ "Created: / 09-03-2014 / 10:10:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-03-2014 / 00:17:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+tearDown
+ <teardown>
+
+ collectionDataset1 := nil.
+ collectionDataset2 := nil.
+ collectionDataset3 := nil.
+ Smalltalk garbageCollect.
+ collection := nil.
+
+ "Created: / 09-03-2014 / 10:12:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-03-2014 / 00:17:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection methodsFor:'setup'!
+
+setUpCollectionDataset1OrderedAsc
+ collectionDataset1OrderedAsc := collectionDataset1 copy sort.
+
+ "Created: / 09-03-2014 / 10:28:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+setUpCollectionDataset1OrderedDesc
+ collectionDataset1OrderedDesc := collectionDataset1 copy sort reverse
+
+ "Created: / 09-03-2014 / 10:29:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkDictionaryLike.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,87 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+BenchmarkCollection subclass:#BenchmarkDictionaryLike
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkDictionaryLike methodsFor:'benchmarks'!
+
+benchmarkOrderedAscAddIndividually
+ <benchmark: 'Insert ordered (asc) data individually'>
+
+ collection := collectionClass new.
+ 1 to: collectionDatasetSize do:[:each | collection at:each put: each printString]
+
+ "Created: / 09-03-2014 / 10:20:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedAscRemoveIndividually
+ <benchmark: 'Remove ordered (asc) data individually'>
+ <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedAsc)>
+
+ collectionDataset1OrderedAsc do:[:each | collection removeKey:each]
+
+ "Created: / 09-03-2014 / 10:32:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-03-2014 / 10:34:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescAddIndividually
+ <benchmark: 'Insert ordered (desc) data individually'>
+
+ collection := collectionClass new.
+ collectionDatasetSize downTo: 1 do:[:each | collection at:each put: each printString]
+
+ "Created: / 09-03-2014 / 10:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescRemoveIndividually
+ <benchmark: 'Remove ordered (desc) data individually'>
+ <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedDesc)>
+
+ collectionDataset1OrderedDesc do:[:each | collection removeKey:each]
+
+ "Created: / 09-03-2014 / 10:32:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 09-03-2014 / 23:45:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomAddIndividually
+ <benchmark: 'Insert random data individually'>
+
+ collection := collectionClass new.
+ collectionDataset1 do:[:each | collection at:each put: each printString]
+
+ "Created: / 09-03-2014 / 10:17:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomRemoveIndividually
+ <benchmark: 'Remove random data individually'>
+ <setup: #setUpCollectionDataset1>
+
+ collectionDataset1 do:[:each | collection removeKey:each]
+
+ "Created: / 09-03-2014 / 10:30:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 09-03-2014 / 23:44:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkDictionaryLike methodsFor:'parameters'!
+
+collectionClassName:aSymbol
+ <parameter: 'Collection class name to benchmark' type: #Symbol values: #(Dictionary BTree)>
+
+ super collectionClassName:aSymbol
+
+ "Created: / 09-03-2014 / 10:42:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkDictionaryLike methodsFor:'running'!
+
+setUpCollectionDataset1
+ collection := collectionClass new.
+ collectionDataset1 do:[:each | collection at: each put: each printString ]
+
+ "Created: / 09-03-2014 / 22:26:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkLinkedList.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,37 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkLinkedList
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkLinkedList class methodsFor:'benchmarking'!
+
+buildList
+ "build a linked list with 1000 elements ..."
+
+ |anchor link|
+
+ anchor := nil.
+ 1 to:1000 do:[:i |
+ link := ValueLink basicNew value:i.
+ link nextLink:anchor.
+ anchor := link.
+ ]
+
+ "
+ 5 timesRepeat:[
+ Transcript showCR:(
+ Time millisecondsToRun:[
+ 1000 timesRepeat:[LinkedListBenchmark buildList]
+ ]
+ )
+ ]
+ "
+
+ "Created: 13.5.1997 / 18:39:54 / cg"
+ "Modified: 13.5.1997 / 18:46:55 / cg"
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSTX1.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,6448 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+ All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSTX1
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSTX1 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+ All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+!
+
+documentation
+"
+ some benchmarks from various sources.
+ More is avaliable in the goodies/Benchmarks directory, but those
+ are not compiled into the (demo) system.
+
+ In production code, this class is not included.
+
+ some notes on benchmarking:
+
+ for some benchmarks (especially, micro benchmarks) it may be hard
+ to get reproducable results. There are many external factors, which
+ have an influence on the run times.
+ For example, the simple send benchmarks may show a variation of up
+ to 30%, depdending on where the linker locates the code physically
+ in memory (due to branches being on page boundaries, cache replacement
+ strategy etc.). Especially on machines with direct mapped caches
+ (i.e. SPARC-2), cache variations are pretty hard to get rid of.
+
+ For the memory benchmarks, the result often depends on the newSpace
+ contents at the time the benchmark is started: if there are many surviving
+ objects there (for example, if you recently opened a fileBrowser),
+ those objects will stay in newspace for a while and be copied around.
+ Thereby slowing down the allocation rate of the benchmark.
+ Try to do an 'ObjectMemory tenure' before running the micro allocation
+ benchmarks, to see the difference.
+
+ Dont expect your numbers to be the same as those noted below;
+ slight differences in the machines memory interface may have quite
+ an impact; especially on the memory benchmarks, where caches are almost
+ useless, and every ns of delay in your memory interface accounts for
+ more than a percent in runtime variation.
+
+ BTW: it is very interesting that 'fast' machines' speed does not scale
+ according their raw CPU power in the memory benches. For example,
+ the INDY (which is otherwise roughly twice as fast compared to a 486/50)
+ is only about 20% faster in the memory benchmark.
+ The reason: memory allocation is mostly limited by the memory bandwidth;
+ (nilling, finding refs etc.) Since most systems use RAM chips with
+ access time in the order of 60-80ns, AND the memory does not fit into
+ typical CPU caches, fast machines cannot make use of their fast CPUs in those
+ tests. It would be nice to have uncached access functionality, or
+ machines with (say) 1Mb of cache ....
+ 2nd level cache sizes of Zero (as on my INDY) or 256k as on typical PCs,
+ are definitely not enough cache for best performance.
+ (however, as noted above, even 512k does not help - you need enough
+ cache to have the whole new-spaces in cache. If your machine has 512k
+ caches, it may be worthwhile to start ST/X with a smaller newSpace;
+ to have it fit into the cache i.e. smalltalk -Mnew 200)
+
+ The best proof of the above statement is the result of the
+ 'byteFloatBench1' (which is actually a memory benchmark).
+ Our P5/133 with a good memory interface, is much faster than
+ our P5/200 Prostar notebook (with a lousy memory interface).
+ You get what you deserve when saving a few bucks on memory ... ;-)
+
+ In addition, machines with separate data/instruction caches usually look
+ better in those benchmarks, than machines with combined caches.
+
+ Also, running those benchmarks at prio >= 24 prevents other smalltalk
+ processes from interrupting the benchmark. Running at highestPrio will
+ even lock out the scheduler.
+ This will give slightly better numbers.
+ I ran those benchmarks 5 times (at normal prio8) and took the best number.
+
+ Finally, UNIX activities (such as network packages arriving, sync
+ running etc.) will also influence the result.
+ Run the benchmarks a few times and take the BEST value, to compensate
+ for these effects.
+ External effects (such as network packets arriving, interrupts from
+ serial line interfaces etc.) may also lead to runtime variations.
+ Make certain that your machine is completely load-free, and no
+ external events are making your CPU busy. Also, monitors (like top,
+ gr_osview, xload, xclock etc. may steal some %% of your CPU time)
+ Typically, expect runtime variations of some 10-20%.
+
+ Another note: be careful with micro benchmarks in what you measure.
+ If a specific operation (for example: a message send) is to be
+ measured, you should avoid any other overhead.
+ For example, see the difference between #instAccess1: and #instAccess2:
+ the first one uses #timesRepeat: with a variable loop count,
+ the second with a constant. Currently, the stc compiler creates a true
+ message-send in the first case, while the timesRepeat: loop is inlined
+ in the second case (because the receiver is an integer constant).
+ Therefore, #instAccess1: measures a send AND a block evaluation,
+ while the second really measures the send alone.
+ This may give wrong impressions if you really want to measure the pure
+ send time, or memory allocation time.
+ (especially, since some other systems silently translate a timesRepeat
+ into an open coded loop ...)
+ Future versions of the compiler may rewrite the timesRepeat: to an
+ open coded loop (incrementing a temporary). Then, you will get
+ comparable results. (this was not done up to now, since timesRepeat:
+ is relatively seldom used in the system; making this optimization
+ a benchmark cheater ;-) ).
+ For some benchmarks (benchNew/benchBasicNew/instAccess etc.
+ I have provided two versions, one with a timesRepeat send and another
+ one where this loop is inlined.
+
+ More benchmarks are found in goodies/Benchmarks; on systems which support
+ dynamic loading, you can file in the binaries of those benchmarks.
+ Do not run benchmarks with the interpreter,
+ - doing so would be quite unfair to ST/X ;-)
+ however, some benchmarks are faster in ST/X's interpreter than other
+ systems compiled versions.
+
+ To see the difference between compiled and interpreted code,
+ run the benchmarks here in a fresh image and remember the results.
+ Then accept the methods (in the browser) and rerun the benchmark (now
+ interpreted).
+
+ The speed ratio between interpreted code and compiled code
+ varies a lot with the different benchmarks:
+ in low level loops (see self-benchmarks), compiled code runs a lot faster
+ (up to 40 times faster), while in memory allocation benchmarks (where the
+ time is really not spent in the loop) the ratio goes down to almost 1.
+ Typical methods use quite a lot of the underlying functionality,
+ expect roughly a factor of 2-5 on the average (see setCreation benchmarks).
+
+ From that, it should be clear, that for high-level methods (for example:
+ instance creation of a view) the difference between compiled and interpreted
+ code is pretty small. Thus, a system where high level methods are purely
+ interpreted and only low level stuff (collections, numeric etc) is compiled,
+ will not show too bad of an overall performance.
+
+ The numbers given in the comments may not be up-to-date;
+ I do not rerun the benchmarks for every change; if multiple numbers are given,
+ these correspond to various stages during development. In general, the last number
+ is the actual one at the time of delivery.
+ For some machines, you will see a big performance boost in the interpreted column
+ (for example, the recur numbers in the P5/133 column from 1076 to 127).
+ This boost came from the introduction of the just in time compiler.
+ Thus, to be correct, these numbers are not really comparable to corresponding
+ numbers from architectures which do no just in time compilation.
+
+ Note to IBM:
+ what is the AIX320H cc optimizer doing ?
+ It takes more than an hour to compile this,
+ and some methods run slower with -O (:-o).
+ BTW: a 320H shows roughly the speed of a 25-33Mhz 486
+
+ Note to HP:
+ yours is even slower; if compiled with -O2,
+ the bytecode interpreter takes about 10 hours to compile this
+ (a small 40k binary). However, it runs a bit faster then; at least.
+
+ Note on ELF-based (shared-library) systems:
+ PIC (position independent) code is typically a bit slower;
+ first, an additional call is generated for every C-function to get
+ the pc; second, many calls are indirect via a global offset table.
+ Expect a few percent slowdown on sharedLib systems.
+
+
+ Rough relative Speed index (relative to 486/50):
+ (shared library systems are typically a few percent slower,
+ due to indirections via global offset tables ...)
+
+ Pentium-II/400Mhz linux gcc: ..-20
+ Pentium-II/266Mhz linux gcc: ..-15
+ Pentium-II/266Mhz WIN-NT: ..-12
+ alpha21164/433Mhz osf1 cc: ..-10
+ ULTRA-250 300Mhz solaris egcs: ..-9
+
+ P5 100Mhz 512k Cache; good memory interface: 2.2-5
+ Indy 100MhzR4600; 0k Cache:/cc 2-3
+ P5 90Mhz 512k Cache/gcc2.5.8: 1.8-3.1
+ SS10/40 solaris gcc2.7.1: 1.5-2
+ Linux 486/50 256k Cache/gcc2.5.8: 1
+ 88k realIX/gcc 0.4-0.8
+ Sun ELC (gcc2.7.0) 0.4-0.7
+ IBM 320H ? Cache AIX3.2.5/cc 0.4-0.6
+ HP 715/33/? Cache cc 0.5-1.2
+ DEC DS3100 R2000 0.25-0.3
+ Sun ELC (sun cc) 0.2-0.4
+
+ [author:]
+ Self language group
+ Byte benchmarks
+ Claus Gittinger
+
+ [start with:]
+ 10 timesRepeat:[STXBenchmarks1 sieve:1]
+ 10 timesRepeat:[STXBenchmarks1 recur1]
+ STXBenchmarks1 loopTimes
+"
+! !
+
+!BenchmarkSTX1 class methodsFor:'arithmetic benchmarks'!
+
+arithmeticSeries:n
+ (n == 0) ifTrue:[
+ ^ 0
+ ].
+ ^ n + (self arithmeticSeries:n-1)
+
+ "
+ Transcript showCR:(
+ Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ Benchmarks::STXBenchmarks1 arithmeticSeries:100
+ ]
+ ]
+ )
+ "
+
+ "
+ Transcript showCR:(
+ Time millisecondsToRun:[
+ |b|
+
+ b := JAVA::BenchMark basicNew.
+ 10000 timesRepeat:[
+ b arithmeticSeries:100
+ ]
+ ]
+ )
+ "
+
+ "Created: / 3.11.1998 / 22:39:33 / cg"
+ "Modified: / 3.11.1998 / 22:42:06 / cg"
+!
+
+floatAbs1
+ "evaluating 'float abs' of a positive number a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num|
+
+ num := 99.0.
+ 1000000 timesRepeat:[num abs]
+ ].
+ Transcript show:'floatAbs1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatAbs1
+ ]
+
+ Notice, that the JIT for i386 generates this code inline, while
+ all others perform a pure message send.
+
+ indy 150 1404
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 78
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0 40
+ P6/400 linux-elf 32
+ ultra/250 solaris2.6 377 350
+ alpha 433 osf1 640 240
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 10.8.1999 / 13:21:19 / cg"
+!
+
+floatAbs2
+ "evaluating 'float abs' of a negative number a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num|
+
+ num := -99.0.
+ 1000000 timesRepeat:[num abs]
+ ].
+ Transcript show:'floatAbs2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatAbs2
+ ]
+
+ indy 150 1617
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 1285
+ P5/200
+ P6/266 linux-elf 563
+ P6/200 NT4.0 591
+ P6/400 linux-elf 330
+ ultra/250 solaris2.6 625 561
+ alpha 433 osf1 836 538 439
+ "
+
+ "Created: / 3.11.1998 / 16:38:10 / cg"
+ "Modified: / 10.8.1999 / 13:21:33 / cg"
+ "Modified: / 27.10.1999 / 00:29:09 / stefan"
+!
+
+floatAdd1
+ "evaluating 'float + float' a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num1 num2|
+
+ num1 := 99.0.
+ num2 := 1.0.
+ 1000000 timesRepeat:[num1 + num2]
+ ].
+ Transcript show:'floatAdd1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatAdd1
+ ]
+
+
+ indy 150 1890
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 973
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0 390
+ P6/400 linux-elf 205
+ ultra/250 solaris2.6 249
+ alpha 433 osf1 245
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 6.6.1999 / 15:22:35 / cg"
+!
+
+floatAdd2
+ "evaluating 'floatConst + float' a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num2|
+
+ num2 := 1.0.
+ 1000000 timesRepeat:[99.0 + num2]
+ ].
+ Transcript show:'floatAdd2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatAdd2
+ ]
+
+
+ indy 150 1017
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 948
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0 380
+ P6/400 linux-elf 212 207
+ ultra/250 solaris2.6 249
+ alpha 433 osf1 266 250
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 6.6.1999 / 15:22:06 / cg"
+ "Modified: / 27.10.1999 / 00:29:23 / stefan"
+!
+
+floatAdd3
+ "evaluating 'float + floatConst' a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num1|
+
+ num1 := 99.0.
+ 1000000 timesRepeat:[num1 + 1.0]
+ ].
+ Transcript show:'floatAdd3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatAdd3
+ ]
+
+
+ indy 150 1012
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0 390
+ P6/400 linux-elf 229 211
+ ultra/250 solaris2.6 248
+ alpha 433 osf1 261 241
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 6.6.1999 / 15:21:31 / cg"
+ "Modified: / 27.10.1999 / 00:29:32 / stefan"
+!
+
+floatAdd4
+ "evaluating 'intConst + float' a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num1|
+
+ num1 := 99.
+ 1000000 timesRepeat:[num1 + 1.0]
+ ].
+ Transcript show:'floatAdd4: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatAdd4
+ ]
+
+ indy 150 993
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0 381
+ P6/400 linux-elf 232 218
+ ultra/250 solaris2.6 248
+ alpha 433 osf1 271 255
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 6.6.1999 / 15:20:59 / cg"
+ "Modified: / 27.10.1999 / 00:29:41 / stefan"
+!
+
+floatAdd5
+ "evaluating 'intConst + float' a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num2|
+
+ num2 := 1.0.
+ 1000000 timesRepeat:[99 + num2]
+ ].
+ Transcript show:'floatAdd5: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatAdd5
+ ]
+
+ indy 150 1114
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0 370
+ P6/400 linux-elf 211
+ ultra/250 solaris2.6 248
+ alpha 433 osf1 261 246
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 15.5.1999 / 03:14:31 / cg"
+ "Modified: / 27.10.1999 / 00:29:48 / stefan"
+!
+
+floatMul1
+ "evaluating 'floatConst * float' a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num2|
+
+ num2 := 1.0.
+ 1000000 timesRepeat:[99.0 * num2]
+ ].
+ Transcript show:'floatMul1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatMul1
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0
+ P6/400 linux-elf 211
+ ultra/250 solaris2.6
+ alpha 433 osf1 241 230
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 10.8.1999 / 13:22:08 / cg"
+ "Modified: / 27.10.1999 / 00:29:56 / stefan"
+!
+
+floatMul2
+ "evaluating 'float * floatConst' a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num2|
+
+ num2 := 1.0.
+ 1000000 timesRepeat:[num2 * 99.0]
+ ].
+ Transcript show:'floatMul2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 floatMul2
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/200 NT4.0
+ P6/400 linux-elf 236
+ ultra/250 solaris2.6
+ alpha 433 osf1 240 224
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 10.8.1999 / 13:22:17 / cg"
+ "Modified: / 27.10.1999 / 00:30:05 / stefan"
+!
+
+integerAbs1
+ "evaluating 'smallInteger abs' of a positive number a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num|
+
+ num := 99.
+ 1000000 timesRepeat:[num abs]
+ ].
+ Transcript show:'integerAbs1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerAbs1
+ ]
+
+ indy 150 347
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 48
+ P5/200
+ P6/266 linux-elf 30
+ P6/266 NT4.0 30
+ P6/400 linux-elf 22
+ ultra/250 solaris2.6 83
+ alpha 433 osf1 467 51 36
+ "
+
+ "Created: / 3.11.1998 / 16:37:17 / cg"
+ "Modified: / 10.8.1999 / 13:22:28 / cg"
+!
+
+integerAbs2
+ "evaluating 'smallInteger abs' of a negative number a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num|
+
+ num := -99.
+ 1000000 timesRepeat:[num abs]
+ ].
+ Transcript show:'integerAbs2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerAbs2
+ ]
+
+ indy 150 374
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 67
+ P5/200
+ P6/266 linux-elf 41
+ P6/266 NT4.0 40
+ P6/400 linux-elf 30 28
+ ultra/250 solaris2.6 86
+ alpha 433 osf1 473 66 49
+
+ "
+
+ "Created: / 3.11.1998 / 16:37:24 / cg"
+ "Modified: / 10.8.1999 / 13:22:35 / cg"
+!
+
+integerAdd1
+ "adding two smallintegers - no overflow"
+
+ |t n1 n2|
+
+ n1 := 100.
+ n2 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 + n2
+ ]
+ ].
+
+ Transcript show:'integerAdd1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerAdd1
+ ]
+
+ indy 150 490
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 128
+ P6/266 NT4.0 130
+ P6/400 linux-elf 93
+ ultra/250 solaris2.6 111
+ alpha 433 osf1 125 121 105
+
+ "
+
+ "Modified: / 10.8.1999 / 13:22:43 / cg"
+ "Modified: / 26.10.1999 / 21:23:26 / stefan"
+!
+
+integerAdd2
+ "adding two smallintegers - overflow into largeInteger"
+
+ |t n1 n2|
+
+ n1 := SmallInteger maxVal.
+ n2 := 1.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 + n2
+ ]
+ ].
+
+ Transcript show:'integerAdd2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerAdd2
+ ]
+
+ indy 150 1702
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 418
+ P6/266 NT4.0 461
+ P6/400 linux-elf 358
+ ultra/250 solaris2.6 555 530
+ alpha 433 osf1 508 475
+
+ "
+
+ "Modified: / 5.6.1999 / 02:22:42 / cg"
+ "Modified: / 27.10.1999 / 00:30:28 / stefan"
+!
+
+integerAdd2b
+ "adding two smallintegers - overflow into largeInteger"
+
+ |t n1 n2|
+
+ n1 := SmallInteger maxVal.
+ n2 := 2.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 + n2
+ ]
+ ].
+
+ Transcript show:'integerAdd2b: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerAdd2b
+ ]
+
+ indy 150 2123
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 420
+ P6/266 NT4.0 461
+ P6/400 linux-elf 362
+ ultra/250 solaris2.6 554 527
+ alpha 433 osf1 500
+
+ "
+
+ "Modified: / 5.6.1999 / 02:22:57 / cg"
+!
+
+integerAdd2c
+ "adding two smallintegers - overflow into largeInteger"
+
+ |t n1|
+
+ n1 := SmallInteger maxVal.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 + n1
+ ]
+ ].
+
+ Transcript show:'integerAdd2c: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerAdd2c
+ ]
+
+ indy 150 1741
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 428
+ P6/266 NT4.0 460
+ P6/400 linux-elf 340
+ ultra/250 solaris2.6 544 517
+ alpha 433 osf1 501
+
+ "
+
+ "Modified: / 5.6.1999 / 02:23:09 / cg"
+!
+
+integerDiv1
+ "dividing two smallintegers - overflow into largeInteger"
+
+ |t n1 n2|
+
+ n1 := SmallInteger maxVal.
+ n2 := 2.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 // n1
+ ]
+ ].
+
+ Transcript show:'integerDiv1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerDiv1
+ ]
+
+ indy 150 951
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 324
+ P6/266 NT4.0 300
+ P6/400 linux-elf 218
+ ultra/250 solaris2.6 324
+ alpha 433 osf1 524 499
+
+ "
+
+ "Modified: / 10.8.1999 / 13:23:20 / cg"
+!
+
+integerMul1
+ "multiplying two smallintegers - no overflow into largeInteger"
+
+ |t n1 n2|
+
+ n1 := 100.
+ n2 := 200.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * n1
+ ]
+ ].
+
+ Transcript show:'integerMul1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul1
+ ]
+
+ indy 150 596
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 192
+ P6/266 NT4.0 180
+ P6/400 linux-elf 140 135
+ ultra/250 solaris2.6 209
+ alpha 433 osf1 153 130
+ "
+
+ "Modified: / 10.8.1999 / 13:23:29 / cg"
+!
+
+integerMul1b
+ "multiplying two smallintegers - overflow into largeInteger"
+
+ |t n1 n2|
+
+ n1 := 16rFFFF.
+ n2 := 16rFFFF.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * n1
+ ]
+ ].
+
+ Transcript show:'integerMul1b: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul1b
+ ]
+
+ indy 150 588
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 549
+ P6/266 NT4.0 560
+ P6/400 linux-elf 512 502
+ ultra/250 solaris2.6 228
+ alpha 433 osf1 153 131
+
+ "
+
+ "Modified: / 10.8.1999 / 13:23:38 / cg"
+!
+
+integerMul1c
+ "multiplying two smallintegers - overflow into largeInteger"
+
+ |t n1 n2|
+
+ n1 := SmallInteger maxVal.
+ n2 := 2.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * n1
+ ]
+ ].
+
+ Transcript show:'integerMul1c: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul1c
+ ]
+
+ indy 150 2756
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 552
+ P6/266 NT4.0 581
+ P6/400 linux-elf 546
+ ultra/250 solaris2.6 861
+ alpha 433 osf1 1037 1009
+
+ "
+
+ "Modified: / 5.6.1999 / 02:23:59 / cg"
+ "Modified: / 27.10.1999 / 00:31:10 / stefan"
+!
+
+integerMul2
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 2
+ ]
+ ].
+
+ Transcript show:'integerMul2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 30 27
+ ultra/250 solaris2.6 55
+ alpha 433 osf1 63 54
+
+ "
+
+ "Modified: / 10.8.1999 / 13:23:54 / cg"
+!
+
+integerMul2b
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ 2 * n1
+ ]
+ ].
+
+ Transcript show:'integerMul2b: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2b
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 143 30 27
+ ultra/250 solaris2.6 349 55
+ alpha 433 osf1 136 64 54
+
+ "
+
+ "Modified: / 10.8.1999 / 13:24:02 / cg"
+!
+
+integerMul2c
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 10
+ ]
+ ].
+
+ Transcript show:'integerMul2c: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2c
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 141 35 30
+ ultra/250 solaris2.6 358 65
+ alpha 433 osf1 136 74 64
+
+ "
+
+ "Modified: / 10.8.1999 / 13:24:09 / cg"
+!
+
+integerMul2d
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ 10 * n1
+ ]
+ ].
+
+ Transcript show:'integerMul2d: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2d
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 143 35 30
+ ultra/250 solaris2.6 358 65
+ alpha 433 osf1 136 74 64
+
+ "
+
+ "Created: / 9.6.1999 / 18:13:26 / cg"
+ "Modified: / 10.8.1999 / 13:24:16 / cg"
+!
+
+integerMul2e
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 3
+ ]
+ ].
+
+ Transcript show:'integerMul2e: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2e
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 38 30
+ ultra/250 solaris2.6 58
+ alpha 433 osf1 74 61
+
+ "
+
+ "Modified: / 10.8.1999 / 13:24:23 / cg"
+!
+
+integerMul2f
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 4
+ ]
+ ].
+
+ Transcript show:'integerMul2f: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2f
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 35 30
+ ultra/250 solaris2.6 55
+ alpha 433 osf1 64 54
+
+ "
+
+ "Modified: / 10.8.1999 / 13:24:31 / cg"
+!
+
+integerMul2g
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 5
+ ]
+ ].
+
+ Transcript show:'integerMul2g: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2g
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 35 30
+ ultra/250 solaris2.6 58
+ alpha 433 osf1 73 58
+
+ "
+
+ "Modified: / 10.8.1999 / 13:24:38 / cg"
+!
+
+integerMul2h
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 6
+ ]
+ ].
+
+ Transcript show:'integerMul2h: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2h
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 137 35 30
+ ultra/250 solaris2.6 353 65
+ alpha 433 osf1 73 63
+
+ "
+
+ "Modified: / 10.8.1999 / 13:24:46 / cg"
+!
+
+integerMul2i
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 7
+ ]
+ ].
+
+ Transcript show:'integerMul2i: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2i
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 35 30
+ ultra/250 solaris2.6 62
+ alpha 433 osf1 70 61
+
+ "
+
+ "Modified: / 10.8.1999 / 13:24:53 / cg"
+!
+
+integerMul2j
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 9
+ ]
+ ].
+
+ Transcript show:'integerMul2j: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2j
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 30
+ ultra/250 solaris2.6 58
+ alpha 433 osf1 58
+
+ "
+
+ "Modified: / 10.8.1999 / 13:25:03 / cg"
+!
+
+integerMul2k
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 11
+ ]
+ ].
+
+ Transcript show:'integerMul2k: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2k
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 136 30
+ ultra/250 solaris2.6
+ alpha 433 osf1 126
+
+ "
+
+ "Modified: / 10.8.1999 / 13:25:11 / cg"
+!
+
+integerMul2l
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 128
+ ]
+ ].
+
+ Transcript show:'integerMul2l: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2l
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 25
+ ultra/250 solaris2.6
+ alpha 433 osf1 54
+
+ "
+
+ "Modified: / 10.8.1999 / 13:25:20 / cg"
+ "Modified: / 26.10.1999 / 21:26:05 / stefan"
+!
+
+integerMul2m
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 131
+ ]
+ ].
+
+ Transcript show:'integerMul2l: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2m
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 28
+ ultra/250 solaris2.6
+ alpha 433 osf1 128
+
+ "
+
+ "Modified: / 10.8.1999 / 13:25:20 / cg"
+ "Created: / 26.10.1999 / 21:25:48 / stefan"
+!
+
+integerMul2n
+ "multiplying two smallintegers - one is constant"
+
+ |t n1|
+
+ n1 := 100.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 127
+ ]
+ ].
+
+ Transcript show:'integerMul2l: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul2n
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 30
+ ultra/250 solaris2.6
+ alpha 433 osf1 64
+
+ "
+
+ "Modified: / 10.8.1999 / 13:25:20 / cg"
+ "Modified: / 27.10.1999 / 00:31:46 / stefan"
+!
+
+integerMul3
+ "multiplying two smallintegers - one is constant; overflow into large"
+
+ |t n1|
+
+ n1 := SmallInteger maxVal // 2 + 1.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 * 2
+ ]
+ ].
+
+ Transcript show:'integerMul3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul3
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 501
+ ultra/250 solaris2.6 716
+ alpha 433 osf1 737 690 666
+
+ "
+
+ "Modified: / 9.6.1999 / 18:11:08 / cg"
+ "Modified: / 27.10.1999 / 00:32:04 / stefan"
+!
+
+integerMul3b
+ "multiplying two smallintegers - one is constant; overflow into large"
+
+ |t n1|
+
+ n1 := SmallInteger maxVal // 2 + 1.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ 2 * n1
+ ]
+ ].
+
+ Transcript show:'integerMul3b: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 integerMul3b
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 536
+ ultra/250 solaris2.6 1017 820
+ alpha 433 osf1 802 746 692
+
+ "
+
+ "Modified: / 10.8.1999 / 13:25:53 / cg"
+ "Modified: / 26.10.1999 / 21:26:34 / stefan"
+!
+
+largeAbs1
+ "evaluating 'largeInteger abs' of a positive number a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num|
+
+ num := 9999999999999999999999999.
+ 1000000 timesRepeat:[num abs]
+ ].
+ Transcript show:'largeAbs1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAbs1
+ ]
+
+ indy 150 1140
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 635
+ P5/200
+ P6/266 linux-elf 313
+ P6/266 NT4.0 381
+ P6/400 linux-elf 223 135
+ ultra250 solaris2.6 220
+ alpha 433 osf1 715 334 317 168
+ "
+
+ "Created: / 3.11.1998 / 16:37:17 / cg"
+ "Modified: / 10.8.1999 / 13:26:03 / cg"
+ "Modified: / 26.10.1999 / 21:28:17 / stefan"
+!
+
+largeAbs2
+ "evaluating 'largeInteger abs' of a negative number a million times."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |num|
+
+ num := -9999999999999999999999999.
+ 1000000 timesRepeat:[num abs]
+ ].
+ Transcript show:'largeAbs2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAbs2
+ ]
+
+ indy 150 8766
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 2856
+ P5/200
+ P6/266 linux-elf 1260
+ P6/266 NT4.0 1552
+ P6/400 linux-elf 867 761 722
+ ultra250 solaris2.6 1365
+ alpha 433 osf1 1759 1268 1080
+ "
+
+ "Created: / 3.11.1998 / 16:37:24 / cg"
+ "Modified: / 5.6.1999 / 13:46:45 / cg"
+ "Modified: / 26.10.1999 / 21:28:33 / stefan"
+!
+
+largeAdd1
+ "adding two medium large numbers"
+
+ |t n1 n2|
+
+ n1 := 100 factorial.
+ n2 := 100 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 + n2
+ ]
+ ].
+
+ Transcript show:'largeAdd1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAdd1
+ ]
+
+ indy 150 1619 1570 1312
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 1272
+ P5/200
+ P6/266 linux-elf 351 255
+ P6/266 NT4.0 601 521 330
+ P6/400 linux-elf 197 170
+ ultra250 solaris2.6 442 430 376
+ alpha 433 osf1 258 243
+ "
+
+ "Modified: / 5.6.1999 / 14:58:54 / cg"
+!
+
+largeAdd2
+ "adding two large numbers"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 1000 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 + n2
+ ]
+ ].
+
+ Transcript show:'largeAdd2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAdd2
+ ]
+
+ indy 150 12653 11584
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 14944
+ P5/200
+ P6/266 linux-elf 1616 1234
+ P6/266 NT4.0 6329 4967 2953
+ P6/400 linux-elf 1331 1325 855 1295
+ ultra250 solaris2.6 3014 2698 2620
+ alpha 433 osf1 776 640
+
+ "
+
+ "Modified: / 5.6.1999 / 14:59:21 / cg"
+ "Modified: / 26.10.1999 / 21:28:50 / stefan"
+!
+
+largeAdd3
+ "adding a smallInt to a large number"
+
+ |t n|
+
+ n := 1000 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n + 1
+ ]
+ ].
+
+ Transcript show:'largeAdd3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAdd3
+ ]
+
+ indy 150 12979 11226 10715
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 11717
+ P5/200
+ P6/266 linux-elf 2850 1425
+ P6/266 NT4.0 2073 3264 3025
+ P6/400 linux-elf 1093 1195 1102 950 997
+ ultra250 solaris2.6 2205 2113 1833
+ alpha 433 osf1 855 770
+
+ "
+
+ "Modified: / 15.12.1999 / 23:07:17 / cg"
+!
+
+largeAdd4
+ "adding a small largeInt to a large numbers"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 30 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 + n2
+ ]
+ ].
+
+ Transcript show:'largeAdd4: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAdd4
+ ]
+
+ indy 150 10273 9407 8796
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 8384 1928
+ P6/266 NT4.0 10885 9083 4356 3064
+ P6/400 linux-elf 4812 3324 3190 1340 2459
+ ultra250 solaris2.6 3006 2256
+ alpha 433 osf1 2718 1606
+
+ "
+
+ "Modified: / 5.6.1999 / 14:59:50 / cg"
+!
+
+largeAdd5
+ "adding a large largeInt to a small largeInt"
+
+ |t n1 n2|
+
+ n1 := 30 factorial.
+ n2 := 1000 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 + n2
+ ]
+ ].
+
+ Transcript show:'largeAdd5: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAdd5
+ ]
+
+ indy 150 9978 9473 9015
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 1962
+ P6/266 NT4.0 4356 2173
+ P6/400 linux-elf 1377 2412
+ ultra250 solaris2.6 2273
+ alpha 433 osf1 1609
+
+ "
+
+ "Modified: / 5.6.1999 / 15:00:08 / cg"
+!
+
+largeAddSubtract1
+ "adding & subtracting two small large ints"
+
+ |t n1 n2|
+
+ n1 := 123456789123456789.
+ n2 := 123456789123456789.
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ n1 + n2.
+ n1 - n2.
+ ]
+ ].
+
+ Transcript show:'largeAddSubtract1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeAddSubtract1
+ ]
+
+ indy 150 22703 20849
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 5108
+ P6/266 NT4.0 7781
+ P6/400 linux-elf 3687 3905
+ ultra250 solaris2.6 7278 6526
+ alpha 433 osf1 200 185 - notice: SmallInteger here
+ "
+
+ "Modified: / 10.8.1999 / 13:27:08 / cg"
+ "Modified: / 26.10.1999 / 21:29:32 / stefan"
+!
+
+largeDiv1
+ "tests largeInt / smallInt division"
+
+ |t n1 n2|
+
+ n1 := 100 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 // 10
+ ]
+ ].
+
+ Transcript show:'largeDiv1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeDiv1
+ ]
+
+ indy 150 4700 3130 2884
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 2908
+ P5/200
+ P6/266 linux-elf 863
+ P6/266 NT4.0 1582
+ P6/400 linux-elf 546 536
+ ultra250 solaris2.6 3171 1847
+ alpha 433 osf1 1422 884 862
+ "
+
+ "Modified: / 10.8.1999 / 13:27:24 / cg"
+ "Modified: / 26.10.1999 / 21:36:29 / stefan"
+!
+
+largeDiv2
+ "tests largeInt / largeInt division, where the divisor is small"
+
+ |t n1 n2|
+
+ n1 := 100 factorial.
+ n2 := 16rFFFFFFFF.
+ t := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ n1 // n2
+ ]
+ ].
+
+ Transcript show:'largeDiv2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeDiv2
+ ]
+
+ Notice: for the alpha, this is a smallInt division, so the numbers cannot be compared.
+
+ indy 150 2208 1402 2015
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 1937
+ P5/200
+ P6/266 linux-elf 516
+ P6/266 NT4.0 851 931
+ P6/400 linux-elf 442 422
+ ultra250 solaris2.6 834 788
+ alpha 433 osf1 454 430
+ "
+
+ "Modified: / 5.6.1999 / 02:26:16 / cg"
+ "Modified: / 26.10.1999 / 21:36:42 / stefan"
+!
+
+largeDiv2b
+ "tests largeInt / largeInt division, where the divisor is small"
+
+ |t n1 n2|
+
+ n1 := 100 factorial.
+ n2 := 16rFFFFFFFFFFFFFFFF.
+ t := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ n1 // n2
+ ]
+ ].
+
+ Transcript show:'largeDiv2b: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeDiv2b
+ ]
+
+ indy 150 1251 1841
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 468
+ P6/266 NT4.0 781 851
+ P6/400 linux-elf 401 381
+ ultra250 solaris2.6 763 721
+ alpha 433 osf1 410 403 380
+
+ "
+
+ "Created: / 20.5.1999 / 09:58:12 / cg"
+ "Modified: / 5.6.1999 / 02:26:28 / cg"
+!
+
+largeDiv3
+ "tests largeInt / largeInt division, where the divisor is large"
+
+ |t n1 n2|
+
+ n1 := 100 factorial.
+ n2 := 99 factorial.
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ n1 // n2
+ ]
+ ].
+
+ Transcript show:'largeDiv3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeDiv3
+ ]
+
+ indy 150 572 454
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 440
+ P5/200
+ P6/266 linux-elf 151
+ P6/266 NT4.0 210
+ P6/400 linux-elf 112 109 83
+ ultra250 solaris2.6 201 195
+ alpha 433 osf1 122 108
+
+ "
+
+ "Modified: / 5.6.1999 / 02:26:35 / cg"
+!
+
+largeMul1
+ "tests largeInt * smallInt multiplication"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ 1000 factorial
+ ]
+ ].
+
+ Transcript show:'largeMul1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeMul1
+ ]
+
+
+ indy 150 6139 5983 5577
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 5272
+ P5/200
+ P6/266 linux-elf 976
+ P6/266 NT4.0 1820
+ P6/400 linux-elf 801 793
+ ultra250 solaris2.6 3301 3267
+ alpha 433 osf1 750
+
+ "
+
+ "Modified: / 5.6.1999 / 02:26:48 / cg"
+!
+
+largeMul2
+ "tests largeInt * largeInt multiplication"
+
+ |t n1 n2|
+
+ n1 := 100 factorial.
+ n2 := 100 factorial.
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ n1 * n2
+ ]
+ ].
+
+ Transcript show:'largeMul2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeMul2
+ ]
+
+
+ indy 150 8372 3339
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 3901
+ P5/200
+ P6/266 linux-elf 779
+ P6/266 NT4.0 2113 1812
+ P6/400 linux-elf 591 673 585 700 604
+ ultra250 solaris2.6 5596 2231 2164
+ alpha 433 osf1 1025 468 316 304
+
+ "
+
+ "Modified: / 5.6.1999 / 02:26:59 / cg"
+!
+
+largeMul3
+ "tests largeInt * smallInt multiplication"
+
+ |t |
+
+ t := Time millisecondsToRun:[
+ 10000 factorial
+ ].
+
+ Transcript show:'largeMul3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeMul3
+ ]
+
+
+ indy 150 7392 7091 6632
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 6365
+ P5/200
+ P6/266 linux-elf 1061
+ P6/266 NT4.0 2113
+ P6/400 linux-elf 887 904 880
+ ultra250 solaris2.6 4398 4287
+ alpha 433 osf1 673
+
+ "
+
+ "Modified: / 5.6.1999 / 02:27:09 / cg"
+!
+
+largeMul4
+ "tests largeInt * largeInt multiplication"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 1000 factorial.
+ t := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ n1 * n2
+ ]
+ ].
+
+ Transcript show:'largeMul4: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeMul4
+ ]
+
+
+ indy 150 22448 8379
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 2066
+ P6/266 NT4.0 4817
+ P6/400 linux-elf 1733 1553 1822 1564
+ ultra250 solaris2.6 14673 5900 5752
+ alpha 433 osf1 598
+
+ "
+
+ "Modified: / 5.6.1999 / 02:27:20 / cg"
+!
+
+largeMul5
+ "tests largeInt * largeInt multiplication"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 30 factorial.
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ n1 * n2
+ ]
+ ].
+
+ Transcript show:'largeMul5: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeMul5
+ ]
+
+
+ indy 150 3029 1228
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 346
+ P6/266 NT4.0 731
+ P6/400 linux-elf 296 266
+ ultra250 solaris2.6 836 778
+ alpha 433 osf1 130
+
+ "
+
+ "Modified: / 15.12.1999 / 23:10:00 / cg"
+!
+
+largeMul6
+ "tests largeInt * largeInt multiplication"
+
+ |t n1 n2|
+
+ n1 := 30 factorial.
+ n2 := 1000 factorial.
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ n1 * n2
+ ]
+ ].
+
+ Transcript show:'largeMul6: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeMul6
+ ]
+
+
+ indy 150 3011 1185
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 276
+ P6/266 NT4.0 641
+ P6/400 linux-elf 244 208
+ ultra250 solaris2.6 758 752
+ alpha 433 osf1 116
+
+ "
+
+ "Modified: / 15.12.1999 / 23:10:11 / cg"
+!
+
+largeSubtract1
+ "tests largeInt - largeInt subtraction with medium sized numbers"
+
+ |t n1 n2|
+
+ n1 := 100 factorial.
+ n2 := 99 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 - n2
+ ]
+ ].
+
+ Transcript show:'largeSubtract1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeSubtract1
+ ]
+
+
+ indy 150 2578 1627 1464
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 2983
+ P5/200
+ P6/266 linux-elf 405
+ P6/266 NT4.0 520 761
+ P6/400 linux-elf 343 386 349 263 297
+ ultra250 solaris2.6 630 520 505
+ alpha 433 osf1 469 625 367 340
+
+ "
+
+ "Modified: / 5.6.1999 / 02:27:53 / cg"
+ "Modified: / 26.10.1999 / 21:30:12 / stefan"
+!
+
+largeSubtract2
+ "tests largeInt - largeInt subtraction with big numbers"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 999 factorial.
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ n1 - n2
+ ]
+ ].
+
+ Transcript show:'largeSubtract2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeSubtract2
+ ]
+
+ indy 150 1849 1232 1171
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 3446
+ P5/200
+ P6/266 linux-elf 411
+ P6/266 NT4.0 520 811 771
+ P6/400 linux-elf 370 407 349 175 260
+ ultra250 solaris2.6 473 328
+ alpha 433 osf1 309 242 117
+
+ "
+
+ "Modified: / 5.6.1999 / 02:28:05 / cg"
+ "Modified: / 26.10.1999 / 21:30:23 / stefan"
+!
+
+largeSubtract3
+ "tests largeInt - smallInt subtraction"
+
+ |t n|
+
+ "/ tests absFastMinus
+ n := 1000 factorial.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n - 1
+ ]
+ ].
+
+ Transcript show:'largeSubtract3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeSubtract3
+ ]
+
+ indy 150 12507 10030 9244 8720
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95 9382
+ P5/200
+ P6/266 linux-elf 1864
+ P6/266 NT4.0 3996 4596
+ P6/400 linux-elf 1671 1716 1197 1900
+ ultra250 solaris2.6 2232 2173
+ alpha 433 osf1 880
+
+ "
+
+ "Modified: / 5.6.1999 / 02:28:18 / cg"
+!
+
+largeSubtract3b
+ "tests largeInt - smallInt subtraction"
+
+ |t n|
+
+ "/ tests absFastPlus
+ n := 1000 factorial negated.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n - 1
+ ]
+ ].
+
+ Transcript show:'largeSubtract3b: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeSubtract3b
+ ]
+
+ indy 150 10324
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf 979
+ ultra250 solaris2.6 1772
+ alpha 433 osf1 929 883
+
+ "
+
+ "Modified: / 10.8.1999 / 13:28:41 / cg"
+ "Modified: / 26.10.1999 / 21:31:05 / stefan"
+!
+
+largeSubtract4
+ "tests largeInt - largeInt subtraction with a small minuent"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 16rFFFFFFFFFFFF.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 - n2
+ ]
+ ].
+
+ Transcript show:'largeSubtract4: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeSubtract4
+ ]
+
+ Cannot compare numbers with alpha - its a smallint subtraction there ...
+
+ indy 150 9772 9035 9000
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 2076
+ P6/266 NT4.0 3705 4537
+ P6/400 linux-elf 1559 1360 1657 1555
+ ultra250 solaris2.6 2009 2270
+ alpha 433 osf1 900
+
+ "
+
+ "Modified: / 5.6.1999 / 02:28:30 / cg"
+!
+
+largeSubtract4b
+ "tests largeInt - largeInt subtraction with a small minuent"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 16rFFFFFFFFFFFFFFFF.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 - n2
+ ]
+ ].
+
+ Transcript show:'largeSubtract4b: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeSubtract4b
+ ]
+
+ indy 150 9587 9070 8805
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 2078
+ P6/266 NT4.0 3716 4537
+ P6/400 linux-elf 1546 1709 1562 1360 1638 1607
+ ultra250 solaris2.6 2296 2270
+ alpha 433 osf1 2051 1947
+ "
+
+ "Modified: / 5.6.1999 / 02:28:40 / cg"
+!
+
+largeSubtract4c
+ "tests largeInt - largeInt subtraction with a small minuent (odd byte count)"
+
+ |t n1 n2|
+
+ n1 := 1000 factorial.
+ n2 := 16rFFFFFFFFFFFFFF.
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ n1 - n2
+ ]
+ ].
+
+ Transcript show:'largeSubtract4c: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 largeSubtract4c
+ ]
+
+ indy 150 9693 9133 8847
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf 2795
+ P6/266 NT4.0 4076 7080
+ P6/400 linux-elf 2676 1943 1694
+ ultra250 solaris2.6 2340 2253
+ alpha 433 osf1 884
+
+ "
+
+ "Modified: / 5.6.1999 / 02:28:53 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'benchmarks helpers'!
+
+noopNil
+ ^ nil
+!
+
+noopSelf
+ ^ self
+!
+
+noopTrue
+ ^ true
+! !
+
+!BenchmarkSTX1 class methodsFor:'exception benchmarks'!
+
+exceptionBench1
+ "how long does it take to handle an exception."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ Object errorSignal handle:[:ex |
+ ex return
+ ] do:[
+ 1 at:1
+ ]
+ ]
+ ].
+ Transcript show:'exceptionBench1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 exceptionBench1
+ ]
+
+ indy 150
+ 486/50 linux-elf
+ P5/133 linux-elf
+ P5/200 W95
+ P5/200
+ P6/266 linux-elf
+ P6/266 NT4.0
+ P6/400 linux-elf
+ ultra/250 solaris2.6
+ alpha 433 osf1
+ "
+
+ "Modified: / 9.6.1999 / 13:25:29 / cg"
+
+
+! !
+
+!BenchmarkSTX1 class methodsFor:'graphics benchmarks'!
+
+lineDrawing1
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ v displayLineFromX:0 y:0 toX:100 y:100
+ ]
+ ].
+
+ v destroy.
+
+ Transcript show:'lineDrawing1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 lineDrawing1
+ ]
+
+host:
+ P6/266 P6/266 P5/200
+ Linux-ELF Linux-ELF W95
+display:
+ 10Mb Ether 10Mb ether local
+ Indy P5/200 P5/200
+ IRIX5.3 W95/exceed W95
+ ---------------------------------------------------------------------------------------
+ 5298 2626 8625
+ 2433
+ 2125
+ 2348
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 3.5.1999 / 14:31:32 / cg"
+!
+
+lineDrawing2
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ v paint:Color black.
+ v displayLineFromX:0 y:0 toX:100 y:100.
+ v paint:Color white.
+ v displayLineFromX:100 y:0 toX:0 y:100.
+ ].
+ v device sync
+ ].
+
+ v destroy.
+
+ Transcript show:'lineDrawing2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 lineDrawing2
+ ]
+
+host:
+ P6/266 P5/200
+ Linux-ELF W95
+display:
+ remote local
+ 10Mb ether
+
+ Indy P5/200
+ IRIX5.3 W95
+ ---------------------------------------------------------------------------------------
+ 2215 4505
+ 3676
+ 3145
+ 1140
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 3.5.1999 / 14:31:59 / cg"
+!
+
+lineDrawing3
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ v paint:Color black.
+ v displayLineFromX:0 y:0 toX:100 y:100.
+ v paint:Color yellow.
+ v displayLineFromX:100 y:0 toX:0 y:100.
+ ].
+ v device sync
+ ].
+
+ v destroy.
+
+ Transcript show:'lineDrawing3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 lineDrawing3
+ ]
+
+host:
+ P6/266 P6/400 P6/400 P5/200
+ Linux-ELF Linux-ELF Linux-ELF W95
+display:
+ remote remote remote local
+ 10Mb ether 10Mb ether 10Mb ether
+
+ Indy Indy P5/200 P5/200
+ IRIX5.3 IRIX5.3 W95/exceed W95
+ ---------------------------------------------------------------------------------------
+ 2022 1736 2871
+ 2719
+ 2582
+ 1675
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 3.5.1999 / 14:33:48 / cg"
+!
+
+lineDrawing4
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ v paint:Color red.
+ v displayLineFromX:0 y:0 toX:100 y:100.
+ v paint:Color yellow.
+ v displayLineFromX:100 y:0 toX:0 y:100.
+ ].
+ v device sync
+ ].
+
+ v destroy.
+
+ Transcript show:'lineDrawing4: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 lineDrawing4
+ ]
+
+host:
+ P6/266 P6/400 P5/200
+ Linux-ELF Linux-ELF W95
+display:
+ remote remote local
+ 10Mb ether 10Mb ether
+
+ Indy Indy P5/200
+ IRIX5.3 IRIX5.3 W95
+ ---------------------------------------------------------------------------------------
+ 2033 3447
+ 3360
+ 3268
+ 1690
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 3.5.1999 / 14:34:42 / cg"
+!
+
+rectFilling1
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ v fillRectangleX:10 y:10 width:80 height:80.
+ v fillRectangleX:10 y:10 width:80 height:80.
+ ]
+ ].
+
+ v destroy.
+
+ Transcript show:'rectFilling1: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 rectFilling1
+ ]
+
+host:
+ P6/266 P6/400 P5/200
+ Linux-ELF Linux-ELF W95
+display:
+ remote remote local
+ 10Mb ether 10Mb ether
+
+ Indy Indy P5/200
+ IRIX5.3 IRIX5.3 W95
+ ---------------------------------------------------------------------------------------
+ 137 2719
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 3.5.1999 / 14:39:17 / cg"
+!
+
+rectFilling2
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ v paint:Color black.
+ v fillRectangleX:10 y:10 width:80 height:80.
+ v paint:Color white.
+ v fillRectangleX:10 y:10 width:80 height:80.
+ ]
+ ].
+
+ v destroy.
+
+ Transcript show:'rectFilling2: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 rectFilling2
+ ]
+
+host:
+ P6/266 P6/400 P5/200
+ Linux-ELF Linux-ELF W95
+display:
+ remote remote local
+ 10Mb ether 10Mb ether
+
+ Indy Indy P5/200
+ IRIX5.3 IRIX5.3 W95
+ ---------------------------------------------------------------------------------------
+ 815 2732
+ "
+
+ "Created: / 3.11.1998 / 16:38:01 / cg"
+ "Modified: / 3.5.1999 / 14:38:11 / cg"
+!
+
+rectFilling3
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ v paint:Color red.
+ v fillRectangleX:10 y:10 width:80 height:80.
+ v paint:Color yellow.
+ v fillRectangleX:10 y:10 width:80 height:80.
+ ]
+ ].
+
+ v destroy.
+
+ Transcript show:'rectFilling3: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 rectFilling3
+ ]
+
+host:
+ P6/266 P6/400 P5/200
+ Linux-ELF Linux-ELF W95
+display:
+ remote remote local
+ 10Mb ether 10Mb ether
+
+ Indy Indy P5/200
+ IRIX5.3 IRIX5.3 W95
+ ---------------------------------------------------------------------------------------
+ 799 2760
+ "
+
+ "Created: / 3.5.1999 / 14:38:31 / cg"
+ "Modified: / 3.5.1999 / 14:40:09 / cg"
+!
+
+textDrawing
+ |v t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 30000 timesRepeat:[
+ v displayString:'hello' x:5 y:10.
+ ]
+ ].
+
+ v destroy.
+
+ Transcript show:'textDrawing: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 textDrawing
+ ]
+
+host:
+ P6/266 P6/400 P5/200
+ Linux-ELF Linux-ELF W95
+display:
+ remote remote local
+ 10Mb ether 10Mb ether
+
+ Indy Indy P5/200
+ IRIX5.3 IRIX5.3 W95
+ ---------------------------------------------------------------------------------------
+ 823 1180
+ 1140
+ "
+
+ "Created: / 3.5.1999 / 14:38:31 / cg"
+ "Modified: / 3.5.1999 / 16:35:43 / cg"
+!
+
+viewCreateAndDestroy
+ |v v2 t|
+
+ v := View new openAndWait.
+
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ v2 := View origin:10@10 corner:50@50 in:v.
+ v2 realize.
+ v2 destroy.
+ ]
+ ].
+
+ v destroy.
+
+ Transcript show:'viewCreateAndDestroy: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 viewCreateAndDestroy
+ ]
+
+host:
+ P6/266 P6/400 P5/200
+ Linux-ELF Linux-ELF W95
+display:
+ remote remote local
+ 10Mb ether 10Mb ether
+
+ Indy Indy P5/200
+ IRIX5.3 IRIX5.3 W95
+ ---------------------------------------------------------------------------------------
+ 765 6408
+ "
+
+ "Created: / 3.5.1999 / 14:38:31 / cg"
+ "Modified: / 3.5.1999 / 16:35:43 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'memory benchmarks'!
+
+benchAllocAlone
+ |t1 t2 t3 n|
+
+ ObjectMemory tenure.
+
+ "with defaultSize of 400k, and object size of 16bytes,
+ this fits almost ..."
+
+ t1 := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ ObjectMemory scavenge
+ ]
+ ].
+
+ t2 := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ 25000 timesRepeat:[Object new].
+ ObjectMemory scavenge
+ ]
+ ].
+
+ t3 := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ 25000 timesRepeat:[Object new].
+ ]
+ ].
+
+ Transcript show:'b''GC only : '; show:(t1 printString); cr; endEntry.
+ Transcript show:'b''combined : '; show:(t2 printString); cr; endEntry.
+ Transcript show:'b''allocAlone: '; show:((t2-t1) printString); cr; endEntry.
+ Transcript show:'b''normal : '; show:(t3 printString); cr; endEntry.
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 benchAllocAlone
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50
+ --------------------------------------------------------------------------------
+ 2550
+ "
+!
+
+benchArithmetic2
+ "arithmetic speed bench (comp.lang.smalltalk)
+ (actually, this is a GC benchmark,
+ it allocates & collects about 20Mb during its run).
+ Since timesRepeat-block is inlined, all time is spent in
+ float-addition, allocation and gc. Compare the time with
+ the benchNew/benchBasicNew times.
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns.
+ (During its execution, about 50 newSpace collects are performed)"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |x|
+ x := 0.0.
+ 1000000 timesRepeat:[x := x + 1.0]
+ ].
+ Transcript show:'b''arith2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new float (about 20bytes) per iteration
+ --> 20Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArithmetic2
+ ]
+
+ Indy 486/50 P5/100 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 715/33 | 486/50
+ ----------------------------|-------------------------------------|----------------------
+min 1110 2730 701 | 16470 | 13400 13457
+ 1041 2611 | 11390 (4) |
+ | 4367 942 |
+ | 4023 854 |
+
+ notice, that ST/X uses double prec. floats, while most other ST-systems
+ use single prec. floats.
+ (meaning that the float allocation is twice as high in ST/X)
+ Notice also, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:33:52 / cg"
+!
+
+benchArithmetic3:n
+ "arithmetic speed bench
+ (actually, this is a GC, and block evaluation benchmark.
+ it allocates & collects about 20Mb during its run;
+ compare the time to benchBasicNew-time).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns.
+ (Here the run time includes a block evaluation)"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |x|
+ x := 0.0.
+ n timesRepeat:[x := x + 1.0]
+ ].
+ Transcript show:'b''arith3: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new float (about 20bytes) per iteration
+ --> 20Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArithmetic3:1000000
+ ]
+
+ Indy 486/50 | interpreted
+cache (none) 256k | P5/133
+ ------------------|------------------------------------
+ 1728 3999 | 1183
+ 1591 3844 | 837
+
+
+ notice, that ST/X uses double prec. floats, while most other ST-systems
+ use single prec. floats.
+ (meaning that the float allocation is twice as high in ST/X).
+ Notice also, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 13:53:07 / cg"
+!
+
+benchArithmetic4
+ "arithmetic speed bench
+ currently, the compiler does not really use the Float-hint,
+ except that an added float-check is done in the store operation.
+ Newer versions of stc will show much better performance here."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |x "{ Class: Float }" |
+ x := 0.0.
+ 1000000 timesRepeat:[x := x + 1.0]
+ ].
+ Transcript show:'b''arith4: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new float (about 20bytes) per iteration
+ --> 20Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArithmetic4
+ ]
+
+ Indy 486/50 | interpreted
+cache (none) 256k | indy 486/50 P5/133 320H 715/33
+ ----------------------------|----------------------------------------
+min 1111 2730 | 12252 23722 16390
+ 1041 2616 | 4091 11914 17614 15040 (2)
+ | 3994 11823 11420 (3)
+ |
+ |-----------------------------------
+ 4326 1177
+ 3957 802
+(2) interpreter asm patch
+(4) both (2) and (3)
+
+ notice, that ST/X uses double prec. floats, while most other ST-systems
+ use single prec. floats.
+ (meaning that the float allocation is twice as high in ST/X)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:34:21 / cg"
+!
+
+benchArithmetic:cnt
+ "arithmetic speed bench
+ (actually, this is a GC, and block evaluation benchmark.
+ it allocates & collects about 40Mb during its run).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns.
+ (During its execution, about 100 newSpace collects are performed)"
+
+ |p n m t|
+
+ n := 3.0.
+ m := 5.5.
+
+ t := Time millisecondsToRun:[
+ cnt timesRepeat:[
+ p := 5 / n + m
+ ]
+ ].
+ Transcript show:'b''arith: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ 2 new floats (about 20bytes each) per iteration
+ --> 40Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArithmetic:1000000
+ ]
+
+ Indy 486/50 P5/90 P5/100 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 | 486/50
+ ----------------------------------|------------------------------------------|--------------------
+min 4043 9843 3459 2654 | 13430 35586 8205 51578 39060 | 46687 101391
+ 3844 9480 | 10178 30094 7998(#) 38050 (3)|
+ | 11241 10757 35790 (4)|
+ | 13361 |
+ | |
+ |------------------------------------------|
+ | 10788 3168 |
+ | 2285 |
+
+ notice, that ST/X uses double prec. floats, while most other ST-systems
+ use single prec. floats.
+ (meaning that the float allocation is twice as high in ST/X)
+ Notice also, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(#) ip rev.2
+ "
+
+ "Modified: 27.6.1997 / 20:34:53 / cg"
+!
+
+benchArrayBasicNew2
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Inlined loop"
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ Array basicNew
+ ]
+ ].
+ Transcript show:'b''ArrayBasicNew2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new array (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArrayBasicNew2
+ ]
+
+ Indy 486/50 | interpreted | competition1
+cache (none) 256k | indy 486/50 P5/133 | 486/50
+ ----------------------------|-----------------------------|-------------
+min 1053 1761 | 4506 |
+ 890 1656 | 4240 |
+ | 3807 |
+ |-----------------------------|
+ 3152 851
+ 650
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:35:38 / cg"
+!
+
+benchArrayBasicNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ Array basicNew
+ ]
+ ].
+ Transcript show:'b''ArrayBasicNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new array (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArrayBasicNew:1000000
+ ]
+
+ Indy 486/50 | interpreted | competition1
+cache (none) 256k | indy 486/50 p5/133 | 486/50
+ ----------------------------|---------------------------|----------
+min 1464 3186 | | 6482
+ 1316 2986 | |
+ 1309 | |
+ 1280 | |
+ 1271 | |
+ |---------------------------|
+ 3045 670
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:36:09 / cg"
+!
+
+benchArrayNew2
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Inlinable loop"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ Array new
+ ]
+ ].
+ Transcript show:'b''ArrayNew2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new array (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArrayNew2
+ ]
+
+ Indy 486/50 88k | interpreted | competition1
+cache (none) 256k | indy 486/50 P5/133 320H | 486/50
+ --------------------------------|-------------------------------|-----------------
+min 1053 1766 1234 | 5275 12178 23329 |
+ 893 1653 | 4876 21397 |
+ | 4788 |
+ |-------------------------------|
+ | 5040 1170 |
+ | 4825 927 |
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:36:24 / cg"
+!
+
+benchArrayNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ Array new
+ ]
+ ].
+ Transcript show:'b''ArrayNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new array (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchArrayNew:1000000
+ ]
+
+ Indy 486/50 88k 68k/25 | interpreted | competition1
+cache (none) 256k | indy 486/50 P5/133 | 486/50
+ ---------------------------------------------------------------------------------
+min 1460 3187 1817 4249 | 1317 | 2966
+ 1318 2982 | |
+ 1270 | |
+ |-----------------------------|
+ 4738 946
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:37:09 / cg"
+!
+
+benchBasicNew2
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Here an inlinable loop is used"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ Object basicNew
+ ]
+ ].
+ Transcript show:'b''basicNew2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new object (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchBasicNew2
+ ]
+
+ Indy 486/50 88k 68k/25| interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 | 486/50
+ -----------------------------------------------------------------------------------------------------
+min 1960 2047 1416 4016 | 4200 10789 2784 19945 13490 |
+ 1479 1878 | 3946 10211 2744 19766 10760 (3) |
+ 1049 1851 | 3858 2538 16146 9090 (4) |
+ 1770 | 2500 |
+ | |
+ | |
+ |------------------------------------------|
+ 3607 645
+ 3103
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:37:49 / cg"
+!
+
+benchBasicNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ Object basicNew
+ ]
+ ].
+ Transcript show:'b''basicNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new object (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchBasicNew:1000000
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 | 486/50
+ ----------------------------|--------------------------|--------------------------
+min 2468 3366 | 6888 19572 | 1922 5163
+ 1563 3223 | 6392 17312 |
+ 1503 3138 | |
+ 1466 3105 | |
+ | |
+ |--------------------------|
+ | 5033 677 |
+ | 3034 |
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:38:09 / cg"
+!
+
+benchByteArrayBasicNew2
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ inlinable loop"
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 10000 timesRepeat:[
+ ByteArray basicNew:1000
+ ]
+ ].
+ Transcript show:'b''ByteArrayBasicNew2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 10000 new byteArrays (12+1000bytes) per iteration
+ --> about 10Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchByteArrayBasicNew2
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 | 486/50
+ ----------------------------|------------------------------------|------------------------
+min 285 316 | 317 384 730 820 |
+ 290 | 306 564 740 (3)|
+ 268 | 518 750 (4)|
+ | 513 |
+ |------------------------------------|
+ | 157 |
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 13:57:22 / cg"
+!
+
+benchByteArrayBasicNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ ByteArray basicNew:1000
+ ]
+ ].
+ Transcript show:'b''ByteArrayBasicNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 10000 new byteArrays (12+1000bytes) per iteration
+ --> about 10Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchByteArrayBasicNew:10000
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 | 486/50
+ ---------------------------------------------------------------------------------------
+min 299 324 | 360 484 1098 930 | 1428 29385
+ 296 | 340 842 870 (3)|
+ 274 303 | 823 890 (4)|
+ | 746 |
+ |-----------------------------------|
+ | 380 156 |
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:38:30 / cg"
+!
+
+benchByteArrayNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ ByteArray new:1000
+ ]
+ ].
+ Transcript show:'b''ByteArrayNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 10000 new byteArrays (12+1000bytes) per iteration
+ --> about 10Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchByteArrayNew:10000
+ ]
+
+ Indy 486/50 | interpreted | competition1
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50
+ -----------------------------------------------------------------
+min 306 350 | 399 717 1692 1050 | 1483
+ 342 320 | 381 620 1127 910 (3)|
+ 317 | 515 872 1000 (4)|
+ 284 | 406 828 |
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:38:50 / cg"
+!
+
+benchByteArrayUninitializedNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns.
+ Compare this time with benchByteArrayBasicNew-time;
+ the difference is due to the clearing of the byteArrays.
+ This may make a difference, if you allocate many big byteArrays
+ temporarily (image processing, I/O buffers etc ...)"
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ ByteArray uninitializedNew:1000
+ ]
+ ].
+ Transcript show:'b''ByteArrayUninitializedNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 10000 new byteArrays (12+1000bytes) per iteration
+ --> about 10Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchByteArrayUninitializedNew:10000
+ ]
+
+ Indy 486/50 | interpreted
+cache (none) 256k | indy 486/50 320H 715/33
+ --------------------------------------------------------
+ 59 106 | 107 309 1216 380
+ 82 262 801 350 (3)
+ 44 71 253 533 320 (4)
+ 84 144 529
+ 48
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:38:59 / cg"
+!
+
+benchEmptyScavenge
+ "this benchmarks measures the time required to scavenge the new space
+ with (almost) no surviving objects (i.e. a scavenge after a lot of
+ garbage allocation)"
+
+ |t|
+
+ ObjectMemory tenure.
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ ObjectMemory scavenge
+ ]
+ ].
+ Transcript show:'b''emptyScavenge: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 benchEmptyScavenge
+ ]
+
+ Indy 486/50 P5/100 SS10 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50
+ -------------------------------------------------------------------------------------
+ 563 1257 1145 1309 3268 1260
+ 1824 1160 (3)
+ 1725 1160 (4)
+
+with 1000 weakArrays present:
+ 4453 8468 2019 3284
+ 3247
+ 3161
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+ "
+!
+
+benchLongStringBasicNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ String basicNew:1000
+ ]
+ ].
+ Transcript show:'b''LongStringBasicNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 10000 new strings (12+1001bytes) per iteration
+ --> about 10Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchLongStringBasicNew:10000
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50
+ ------------------------------------------------------
+min 283 315 407 502
+ 323 277 385
+ 287
+ 267
+
+with 1000 WeakArrays present
+ 464
+ "
+
+ "Modified: 27.6.1997 / 20:39:16 / cg"
+!
+
+benchLongStringNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ String new:1000
+ ]
+ ].
+ Transcript show:'b''LongStringNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 10000 new strings (12+1001bytes) per iteration
+ --> about 10Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchLongStringNew:10000
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50
+ --------------------------------------------------------------------------------
+min 285 315 374 512 904 790 (3) | 1428 330
+ 326 277 859 800 (4)
+ 285 424 808
+ 267
+
+1000 WeakArrays:
+ 463 408
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+ "
+
+ "Modified: 27.6.1997 / 20:39:31 / cg"
+!
+
+benchMallocFree
+ "not really fair - there is some added overhead in ExternalBytes
+ when calling malloc/free"
+
+ |t1 t2 refs|
+
+ refs := Array new:250.
+ t1 := Time millisecondsToRun:[
+ 50 timesRepeat:[
+ 1 to:250 do:[:i | refs at:i put:(ExternalBytes new:100)].
+ 1 to:250 do:[:i | (refs at:i) free].
+ ]
+ ].
+ t2 := Time millisecondsToRun:[
+ 50 timesRepeat:[
+ 1 to:250 do:[:i | refs at:i put:(ByteArray new:100)].
+ "/ automatically freed
+ ]
+ ].
+ Transcript show:'b''mallocFree: '; show:(t1 printString); cr; endEntry.
+ Transcript show:'b''automatic : '; show:(t2 printString); cr; endEntry.
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 benchMallocFree
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50
+ --------------------------------------------------------------------------------
+ 2641 3379
+ 79 142
+ "
+!
+
+benchNew2
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Here an inlinable loop is used"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ Object new
+ ]
+ ].
+ Transcript show:'b''new2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new object (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchNew2
+ ]
+
+ Indy 486/50 P5/90 P5/100 88k 68k/25 SS10 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50
+ ------------------------------------------------------------------------------------------
+min 2255 5040 767 568 1417 4003 1361 | 4857 12016 23674 21930 | 1813 5163
+ 1098 1883 | 4739 15810 (3) |
+ 1046 1852 | 4612 17250 (4) |
+ 1766 | |
+ | |
+ |-----------------------------------|
+ 5505
+ 4785
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:41:31 / cg"
+!
+
+benchNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 12Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ Object new
+ ]
+ ].
+ Transcript show:'b''new: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1 new object (about 12bytes) per iteration
+ --> 12Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchNew:1000000
+ ]
+
+ Indy 486/50 P5/100 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50
+ --------------------------------------------------------------------------------
+min 2661 5911 760 | 17326 29695 | 1813 5163
+ 1561 3228 7567 20325
+ 1512 3146 7417
+ 1467 7329
+
+1000 weakArrays 844
+ ------------------------
+ 7064
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+!
+
+benchOCCreation1
+ "benchmark OrderedCollection add (from comp.lang.smalltalk).
+ The collection is growing (therefore, it is slow).
+ This benchmark will lead to background oldSpace collects to be
+ performed. Or, if you start it quickly again (so that the background
+ collect cannot keep up), to a blocking oldSpace collect."
+
+ |aColl t|
+
+ t := Time millisecondsToRun: [
+ aColl := OrderedCollection new.
+ 1 to: 100000 do: [ :each | aColl add: each ]
+ ].
+
+ Transcript show:'b''OCCreation1: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ ObjectMemory markAndSweep.
+ STXBenchmarks1 benchOCCreation1
+ ]
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchOCCreation1
+ ]
+
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 | 486/50
+ -------------------------------------------------------------------|--------------------
+min 248 489 | 2333 8490 3360 | 5547
+ 475 | 1037 2106 6448 3270(3)|
+ | 803 6351 3720
+ | 775(5) 5069
+ | 4787
+ ---------------------------------------
+ | 147
+ |
+GC 586 1150 | 1218 3314 6000
+ ---------------------------------------
+ 410
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+ "
+
+ "Modified: 12.5.1997 / 21:27:25 / cg"
+!
+
+benchOCCreation2
+ "benchmark OrderedCollection add (from comp.lang.smalltalk).
+ The collection is preallocated.
+ This benchmark will lead to background oldSpace collects to be
+ performed. Or, if you start it quickly again (so that the background
+ collect cannot keep up), to a blocking oldSpace collect."
+
+ |aColl t|
+
+ t := Time millisecondsToRun: [
+ aColl := OrderedCollection new: 100000.
+ 1 to: 100000 do: [ :each | aColl add: each ]
+ ].
+
+ Transcript show:'b''OCCreation2: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ ObjectMemory markAndSweep.
+ STXBenchmarks1 benchOCCreation2
+ ]
+
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchOCCreation2
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 88k | 486/50
+ -------------------------------------------------------------------------|----------------------------
+min 196 388 | 721 2016 4978 3180 3955 | 988 2691
+ 385 | 4717 3110 (3) |
+ | |
+GC 560 881 | 5400 7042 |
+ |--------------------------------------------|
+ | 113 |
+ | 85 |
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+ "
+
+ "Modified: 27.6.1997 / 14:00:12 / cg"
+!
+
+benchOCCreation3
+ "modified OrderedCollection creation.
+ The collection variable is withing the block
+ (however, for 100000 accesses, this does not really make a difference).
+ This benchmark will lead to background oldSpace collects to be
+ performed. Or, if you start it quickly again (so that the background
+ collect cannot keep up), to a blocking oldSpace collect."
+
+ |t|
+
+ t := Time millisecondsToRun: [
+ |aColl|
+
+ aColl := OrderedCollection new: 100000.
+ 1 to: 100000 do: [ :each | aColl add: each ]
+ ].
+
+ Transcript show:'b''OCCreation3: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ ObjectMemory markAndSweep.
+ STXBenchmarks1 benchOCCreation3
+ ]
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchOCCreation3
+ ]
+
+ Indy 486/50 SS10 | interpreted
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 88k
+ --------------------------------|-----------------------------------------
+min 200 397 310 | 867 2563 7978 3320 3991
+ 385 | 2280 6677 2845
+ | 770 2070 5410
+ | 5307
+ |
+GC 534 893 | 7219
+ |-----------------------------------------
+ 107
+ 85
+(4) both (2) and (3)
+ "
+
+ "Modified: 27.6.1997 / 14:00:41 / cg"
+!
+
+benchSetCreation
+ "benchmark set grow (from comp.lang.smalltalk).
+ Slightly modified (the original added only 4500 elements, which
+ was too short for some machines with 20ms timer resolution)
+ The loop is inlined, but access to the set is via the
+ method local (s), which is outside the time-block."
+
+ |s t|
+
+ s := Set new.
+ t := Time millisecondsToRun:[
+ 1 to:10000 do:[:i | s add:i]
+ ].
+
+ Transcript show:'b''setCreation: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchSetCreation
+ ]
+
+ Indy 486/50 P5/90 P5/100 P5/133 88k 68k/25 SS10 | interpreted ELC | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 DS3100 88k SS10/40 gcc | 486/50
+ --------------------------------------------------------------------------------------------------------------------------|--------------------------
+min 104 215 64 49 35 200 376 121 | 159 422 92 1620 570 1414 624 230 726 | 494 2087
+ 80 168 119 | 171 ** 507 78 1333 650 1242 480 | 549 2142
+ 77 171 (i1) 192? 405 86(#) 1324 454(#) |
+ 75 168 (i2) 147 399 144 972 |
+ 167 (i3) 141(5) 352 867 |
+ 825 |
+ --------------------------------------------------------------------------------------------------------------------------|--------------------------
+ 213 44 388 384 142 336 |
+ 209 40 137 332 |
+ 205 38 134 |
+(i1) without commonSymbols |
+(i2) without commonSymbols; awk asm optimizations
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev.2
+ "
+
+ "Modified: 27.6.1997 / 20:41:58 / cg"
+!
+
+benchSetCreation2
+ "benchmark set grow (from comp.lang.smalltalk).
+ Slightly modified (the original added only 4500 elements, which
+ was too short for some machines with 20ms timer resolution)
+ The set is kept in a block variable (which is slightly faster),
+ but for 10000 accesses, this does not really make a difference."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |s|
+ s := Set new.
+ 1 to:10000 do:[:i | s add:i]
+ ].
+
+ Transcript show:'b''setCreation2: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchSetCreation2
+ ]
+
+ Indy 486/50 P5/133 88k 68k/25 SS10 | interpreted ELC | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 88k SS10/40 gcc | 486/50
+ ----------------------------------------------------------------------------------------------------|----------------------------
+min 96 212 35 183 373 121 | 222 393 972 590 624 683 | 495 2143
+ 79 167 | 151 363 853 570 (3) 485 |
+ 77 169 (i1) | 135(5) 630 460(#) |
+ 165 (i2) | 447 |
+ ----------------------------------------------------------------------------------------------------|----------------------------
+ | 210 44 430 381 134 336 |
+ | 196 40 329 |
+ | 38
+(3) interpreter with +O3 +Obb2000
+(i1) without commonSymbols
+(i2) without commonSymbols; awk asm optimizations
+(5) fix true/false
+(#) ip rev.2
+ "
+
+ "Modified: 27.6.1997 / 20:42:26 / cg"
+!
+
+benchSetCreation3
+ "benchmark set grow (from comp.lang.smalltalk).
+ Slightly modified (the original added only 4500 elements, which
+ was too short for some machines with 20ms timer resolution)
+ Compare the time with benchSetCreation2 - the set is preallocated,
+ thus no growing is needed in the loop."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |s|
+ s := Set new:10000.
+ 1 to:10000 do:[:i | s add:i]
+ ].
+
+ Transcript show:'b''setCreation3: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchSetCreation3
+ ]
+
+ Indy 486/50 P5/100 88k 68k/25 SS10 | interpreted ELC | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 320H 715/33 DS3100 SS10/40 gcc 88k | 486/50
+ ------------------------------------------------------------------------------------------------------------|----------------------------
+min 77 173 39 167 303 97 | 141 473 76 1581 520 1305 571 | 220 769
+ 62 134 206? 355 81(#) 1262 510 (3) 1066 441 |
+ 61 137 (i1) 135 325 72(#) 915 560 416(#) |
+ 133 (i2) 119(5) 137 841 402 |
+ 804 |
+ ------------------------------------------------------------------------------------------------------------|----------------------------
+ 195 35 331 108 273 319
+ 171 31
+ 29
+
+(3) interpreter with +O3 +Obb2000
+(i1) without commonSymbols
+(i2) without commonSymbols; awk asm optimizations
+(5) fix true/false
+(#) ip rev.2
+ "
+
+ "Modified: 27.6.1997 / 14:01:08 / cg"
+!
+
+benchStringBasicNew2
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Inlined loop"
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ String basicNew:10
+ ]
+ ].
+ Transcript show:'b''StringBasicNew2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1000000 new strings (12+11bytes) per iteration
+ --> about 23Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchStringBasicNew2
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50
+ --------------------------------------------------------------------------------
+min 1358 2484 14211 |
+ 1562 2360 |-----------------------|
+ 4514
+ 1294
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:43:00 / cg"
+!
+
+benchStringBasicNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ String basicNew:10
+ ]
+ ].
+ Transcript show:'b''StringBasicNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1000000 new strings (12+11bytes) per iteration
+ --> about 23Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchStringBasicNew:1000000
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50
+ --------------------------------------------------------------------------------
+min 1770 3891 | 7623 21823 | 6646
+ 2005 3736 |-----------------------|
+ 1894 4587
+ 1708
+
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:43:42 / cg"
+!
+
+benchStringNew2
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Inline loop"
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ String new:10
+ ]
+ ].
+ Transcript show:'b''StringNew2: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1000000 new strings (12+11bytes) per iteration
+ --> about 23Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchStringNew2
+ ]
+
+ Indy 486/50 SS10 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50
+ ---------------------------------------------------------------------------------
+min 1361 2483 1782 | 8257 15870 32088 30720 |
+ 1559 2462 | 25945 18940 (3)|
+ 1299 2360 | 17340 (4)|
+ |--------------------------------|
+ 6580
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+ "
+
+ "Modified: 27.6.1997 / 20:44:27 / cg"
+!
+
+benchStringNew:n
+ "instance creation speed bench
+ (GC benchmark; allocating & collecting about 10Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ..."
+
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ String new:10
+ ]
+ ].
+ Transcript show:'b''StringNew: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ creates 1000000 new strings (12+11bytes) per iteration
+ --> about 23Mb garbage
+
+ 10 timesRepeat:[
+ STXBenchmarks1 benchStringNew:1000000
+ ]
+
+ Indy 486/50 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50
+ ---------------------------------------------------------------------------------
+min 1768 3884 | 8388 24873 65907 50300 | 9941 6701
+ 2004 3815 | 8275 59973 33040 (3) |
+ 1706 3734 | 36000 (4) |
+ |--------------------------------|
+ 6651
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:45:11 / cg"
+!
+
+memory2
+ "lots of memory allocation
+ (GC benchmark; allocates, nils & collects about 200Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ...
+ Since timesRepeat-block is inlined here, all time is spent in
+ allocation & gc.
+ (During its execution, about 500 newSpace collects are performed;
+ almost all time is spent in the garbage collector here ...)"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 100000 timesRepeat:[
+ Array new:500
+ ].
+ ].
+ Transcript show:'memory2: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 memory2
+ ]
+
+ Indy 486/50 | interpreted
+cache (none) 256k | indy 486/50 320H 715/33
+ -----------------------------------------------------------
+min 5062 5214 | 6056 7306 13487 10430
+ 5093 4982 5908 7255 10636 10320
+ 4935 5614 6418 10085
+ 5589 **6381 8515
+ 5640 7865
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:45:47 / cg"
+!
+
+memory:n
+ "lots of memory allocation
+ (GC benchmark; allocates, nils & collects about 200Mb).
+ Run this benchmark a few times - its outcome depends on
+ newSpace fill-grade & cache patterns ....
+ Here a block evaluation is performed, but its time is only
+ a very small fraction compared to allocation & gc-time (compare with memory2).
+ (During its execution, about 500 newSpace collects are performed;
+ almost all time is spent in the garbage collector here ...)"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ Array new:500
+ ].
+ ].
+ Transcript show:'memory: '; show:(t printString); cr; endEntry
+
+ "
+ allocation:
+ 100000 * 500 * (4 bytes/object) -> 200000000
+
+
+ 10 timesRepeat:[
+ STXBenchmarks1 memory:100000
+ ]
+
+ Indy 486/50 P5/100 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 320H 715/33 | 486/50 486/50
+ -------------------------------------------------------------|--------------------
+min 5144 5367 2596 | 6996 8835 15074 11980 (3) 5382
+ 5078 5181 6813 8561 13335
+ 5030 6145 7920 11655
+ 6350 7720 11386
+ 7472
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+ Notice, that the times depend on the newSpace fill-grade.
+ If exeuted multiple times, objects are tenured to oldSpace and
+ the benchmark runs faster.
+ The above numbers are for a default 400k newSpace
+ "
+
+ "Modified: 27.6.1997 / 20:46:15 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'micro benchmarks'!
+
+arrayAt
+ "perform Array>>at: a million times.
+ Notice, currently, ST/X's JIT does not inline such a
+ synthetic array access. See also #arrayAt2:/#arrayAt3:"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := #(1).
+ 1000000 timesRepeat:[
+ a at:1
+ ].
+ ].
+ Transcript show:'arrayAt: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 arrayAt
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC ELC mc68k alpha | competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 320H 715/33 250 /40 gcc cc 33 21064/233 | 486/50 486/50
+ --------------------------------------------------|-----------------------------------------------------------------------------------------|-----------------------------
+ 703 2006 507 349 1073 | 3030 8554 2517 1818 10168 11390 4415 7403 17764 |
+ 690 1934 (i3) | 2993 8213 1804(#) 9400 4003 |
+ | 2910 7558(5) 1775 7050 (4) |
+ | 2819 1714 6990 |
+ | 2627(2) 1546 |
+ | 2543(5) 1519 |
+ | 1469 |
+ --------------------------------------------------|-----------------------------------------------------------------------------------------|-----------------------------
+ | 1942 386 3122 150 1331 2565 2662 3827 510 |
+ | 1935 370 3370 1305 2446 3758 |
+ | 2056 363 1276 2515 3659 |
+ | 359 1208 |
+ | 348 1200 |
+ |
+(4) both (2) and (3)
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev2
+ "
+
+ "Modified: / 4.6.1998 / 10:50:46 / cg"
+!
+
+arrayAt2:a
+ "perform Array>>at: a million times.
+ Notice, this IS inline-coded by the ST/X JIT"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ a at:1
+ ].
+ ].
+ Transcript show:'arrayAt2: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 arrayAt2:#(1)
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted SS10 ELC ELC mc68k alpha | competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 320H 715/33 gcc gcc cc 33 21064/233 | 486/50 486/50
+ --------------------------------------------------|-----------------------------------------------------------------------------------|-----------------------------
+ --------------------------------------------------|-----------------------------------------------------------------------------------|-----------------------------
+ | 3460 201
+(4) both (2) and (3)
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev2
+ "
+
+ "Modified: / 4.6.1998 / 10:48:48 / cg"
+!
+
+arrayAt3:idx
+ "perform Array>>at: a million times.
+ Notice, this IS inline-coded by the ST/X JIT"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ #('a' 'b' 'c' 'd' 'e') at:idx
+ ].
+ ].
+ Transcript show:'arrayAt3: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 arrayAt3:2
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC ELC mc68k alpha | competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P6/400 320H 715/33 250 /40 gcc cc 33 21064/233 | 486/50 486/50
+ --------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------
+ --------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------
+ | 35 61
+ "
+
+ "Modified: / 4.6.1998 / 10:48:48 / cg"
+!
+
+arrayAtPut
+ "perform Array>>at:put: a million times"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := Array with:1.
+ 1000000 timesRepeat:[
+ a at:1 put:2
+ ].
+ ].
+ Transcript show:'arrayAtPut: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 arrayAtPut
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 | interpreted ULTRA SS10 ELC mc68k alpha | competition1 competition2
+cache (none) 256k | indy 486/50 P5/100 P5/133 320H 715/33 250 /40 gcc 33 21064/233 | 486/50 486/50
+ --------------------------------------------|----------------------------------------------------------------------------------|---------------------------
+ 83 304 80 60 | 3234 9092 2720 1971 11189 12950 4929 8380 |
+ | 3212 8513 1933(#) 10840 4476 |
+ | 3155 1739 8250 (4) |
+ | 3054 1693 8150 |
+ | 2880(2) 1645 |
+ | 2773(5) 1564 |
+ --------------------------------------------|----------------------------------------------------------------------------------|-----------------------------
+ | 2301 415 3444 72 1410 2732 4009 190 |
+ | 784 408 1406 2596 173 |
+ | 665 401 1355 4917? |
+ | 144 600 |
+ | 153 573 |
+ | 138 |
+ | 136 |
+(4) both (2) and (3)
+(5) fix true/false
+(#) ip rev.2
+ "
+
+ "Modified: / 4.5.1998 / 20:31:54 / cg"
+!
+
+arraySize
+ "perform Array>>size a million times"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := #(1 2 3 4 5).
+ 1000000 timesRepeat:[
+ a size
+ ].
+ ].
+ Transcript show:'arraySize '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 arraySize
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 | interpreted ULTRA alpha/233 | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 320H 715/33 250 SS10/40 osf1 | 486/50 486/50
+ ---------------------------------------------|-------------------------------------------------------------------------------|----------------------------
+ | 161 91 110 |
+ ---------------------------------------------|-------------------------------------------------------------------------------|----------------------------
+ "
+
+ "Modified: / 28.7.1998 / 17:22:12 / cg"
+!
+
+blockEvaluation0
+ "evaluating a stupid simple block a million times.
+ Notice, that this is typically optimized away by the C-compiler."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[99]
+ ].
+ Transcript show:'blockEvaluation0: '; show:(t printString);cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation0
+ ]
+
+ Indy 486/50 P5/90 P5/100 P5/133 88k 68k/25 SS10 | interpreted 88k DS3100 SS10 Ultra ELC ELC mc68k alpha alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 715/33 735/100 (R2000) gcc 250 gcc cc 33 21064/233 21164/433 | 486/50 SS10/40 486/50
+ ---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+min 75 227 56 50 38 83 293 101 | 2122 4442 1274 997 38754 6210 2562 3568 10890 2293 339 3748 8777 6023 1023 | 550 253 879
+ 73 225 | 1854 4083 964 19339 5610 (2) 1880 3282 10109(2) 2054 686 |
+ 223 (i2) | 1717 4052 932 11836 4750 (3) 831 3268 584 |
+ | 1611(2)* 3729(5) 796 10327 3620 (4) 3232 |
+ | 1656 * 773 10121 3580 1470 |
+ | 1595(2) 720 7413 1407 |
+ | 1375(2) 5348 (O3) |
+ | 1321(5) 5165 |
+ ---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+ | 423 68 813 580 333 41 817 865 113 36 |
+ | 61 940 335 328 757 757 801 105 30 |
+ | 272 53 35 22 15 919 260 701 103 |
+ | 26 90 |
+* cache effects in interpreter
+ varies by 5% due to simple code-move
+
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i2) without commonSymbols; jno-to-jmp opt
+(5) fix true/false
+ "
+
+ "Modified: / 9.6.1999 / 13:25:29 / cg"
+!
+
+blockEvaluation1
+ "evaluating a simple block a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |b|
+
+ b := [99].
+ 1000000 timesRepeat:b
+ ].
+ Transcript show:'blockEvaluation1: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation1
+ ]
+
+ Indy 486/50 P5/90 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 735/100 250 gcc gcc cc 33 21064/233 | 486/50 SS10/40 486/50
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------
+min 162 535 135 120 100 200 887 344 | 2463 5831 1497 10433 6360 5660 4303 9786 19952 13828 3657 2759 | 1320 1062 12139
+ 159 531 | 2314 5542 1590 9500 (O3) 6130 (2) 4096 4156 |
+ 157 529 (i2) | 2294 * 5519 7060 (3) 2967 |
+ 118 | 2262 4195 6090 (2) |
+ | 1853 3851(5) 6580 (4) |
+ | 1795 |
+ | 1704 ** |
+ | 1733 ** |
+ | 1683 |
+ | 1744(5) |
+ ---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|----------------------------
+ | 492 101 46 27 15 782 71 327 427 955 177 73 |
+ | 430 99 67 (WIN) 20 828 320 396 396 640 68 |
+ | 395 823 635 66 |
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i2) without commonSymbols; jno-to-jmp opt
+(5) fix true/false
+ "
+
+ "Modified: / 9.6.1999 / 13:36:02 / cg"
+!
+
+blockEvaluation10:aBlock
+ "evaluating a value a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[ aBlock value ]
+ ].
+ Transcript show:'blockEvaluation10: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation10:nil
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 53 (WIN) 25 637 |
+ / 23 44 (value inline in JIT - shortCut for nil) /
+ "
+
+ "Modified: / 26.4.1999 / 23:50:27 / cg"
+!
+
+blockEvaluation2
+ "evaluating a simple block a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |b|
+
+ b := [99].
+ 1000000 timesRepeat:[b value]
+ ].
+ Transcript show:'blockEvaluation2: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation2
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+min 405 1105 303 204 733 2033 690 | 6767 14679 3674 2840 22582 8487 16480 24618 5909 6430 | 1264 1039 9777
+ 400 1102 | 6398 14286 18248 (O3) 8006 15570 (2) 5887 |
+ 377 1100 (i2) | 5133 * 13350 * 15420 (3) |
+ 1084 | 5007 **12842 13350 (4) |
+ | 5238 11185 |
+ | 4517 10669(5) |
+ | 4456 |
+ | 4350 |
+ | 4170(2) |
+ | 4053(5) |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 1107 227 146 77 55 3972 218 1616 2930 2539 2437 438 |
+ | 1045 220 135(WIN) 4374 140 1607 2359 417 |
+ | 968 214 1590 |
+ | 1555 |
+ | 1636 |
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i2) without commonSymbols; jno-to-jmp opt
+(5) fix true/false
+ "
+
+ "Modified: / 26.4.1999 / 23:51:16 / cg"
+!
+
+blockEvaluation3:aBlock
+ "evaluating a simple (byteCode) block a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:aBlock
+ ].
+ Transcript show:'blockEvaluation3: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation3:[99]
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 467 743 |
+ / 718 /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation3b:aBlock
+ "evaluating a simple (compiled) block a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:aBlock
+ ].
+ Transcript show:'blockEvaluation3b: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation3b:(self testBlock)
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 22 92 |
+ / 85 /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation4:aBlock
+ "evaluating a (byteCode) block a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[aBlock value]
+ ].
+ Transcript show:'blockEvaluation4: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation4:[ 99 ]
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 579 782 |
+ / 818 (value inline in JIT - additional overhead) /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation4b:aBlock
+ "evaluating a (compiled) block a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[aBlock value]
+ ].
+ Transcript show:'blockEvaluation4b: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation4b:(self testBlock)
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 58 223 |
+ / 56 145 (value inline in JIT) /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation5:aBlock
+ "evaluating a value holder a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:aBlock
+ ].
+ Transcript show:'blockEvaluation5: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation5:(false asValue)
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 45 106 |
+ / 110 /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation6:aBlock
+ "evaluating a value holder a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[ aBlock value ]
+ ].
+ Transcript show:'blockEvaluation6: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation6:(false asValue)
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 63 69 |
+ / 114 (value inline in JIT - additional overhead) /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation7:aBlock
+ "evaluating a value a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:aBlock
+ ].
+ Transcript show:'blockEvaluation7: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation7:false
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 44 106 |
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation8:aBlock
+ "evaluating a value a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[ aBlock value ]
+ ].
+ Transcript show:'blockEvaluation8: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation8:false
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|-----------------------
+ | 60 68 |
+ / 58 108 (value inline in JIT - additional overhead) /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation9:aBlock
+ "evaluating a value a million times"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:aBlock
+ ].
+ Transcript show:'blockEvaluation9: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 blockEvaluation9:nil
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted ULTRA SS10 ELC mc68k mc88k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 250 gcc 715/33 33 21064/233 | 486/50 SS10/40 486/50
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+ | |
+ --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+ | 52 510 |
+ / 55 483 /
+ "
+
+ "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+countDown
+ "count down - notice, that index is a method var"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ index := 1000000.
+ [index > 0] whileTrue:[
+ index := index - 1
+ ].
+ ].
+ Transcript show:'countDown: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 countDown
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted SS10/40 Ultra ELC mc68k alpha alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 715/33 735/100 gcc 250 gcc 88k 33 21064/233 21164/433 | 486/50 SS10/40 486/50
+ | 200 |
+ --------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------
+min 164 388 141 105 500 887 307 | 3296 8722 1818 1381 11210 7630 2610 2841 5380 4626 8486 2035 | 2033 1494 4669
+ 159 386 | 3012 7668 1328 8568 6860 (2) 1537 (6) 2080 1020 |
+ 157 | 2670 5147 1299(#) 6977 (O3) 5720 (3) 1472 2016 1009 |
+ | 1878 1199 6760 (2) 2003 874 |
+ | 1858 1184 4900 (4) |
+ | 1780(2) 1068 |
+ | 1726(5) |
+ --------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------
+ | 212 634 114 1351 537 40 1207 974 1387 137 53 |
+ | 594 107 1247 312 1177 439 1006 127 49 |
+ | 381 69 1238 260 795 977 |
+ | 316 46 1225 963 |
+ | 302 68 45 22 17
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+(#) ip rev.2
+(6) gcc
+ "
+
+ "Modified: / 9.6.1999 / 13:23:01 / cg"
+!
+
+countDown2
+ "count down - notice, that index is a block var"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |index|
+
+ index := 1000000.
+ [index > 0] whileTrue:[
+ index := index - 1
+ ].
+ ].
+ Transcript show:'countDown2: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 countDown2
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted mc68k alpha alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy indy 486/50 P5/133 P5/200 P6/400 320H 715/33 SS10/40 Ultra ELC 88k 33 21064/233 21164/433 | 486/50 SS10/40 486/50
+ | 200 250 |
+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------
+min 108 307 80 60 383 462 179 | 3319 9161 1323 13648 10230 5846 10102 1255 | 440 228 4559
+ 107 304 | 3050 8135 10798 9230 (2) 2654 1070 |
+ 105 | 2724 6550 9314 (O3) 7860 (3) 2565 |
+ | 2330 6750 (4) |
+ | 2306 |
+ | 2278 |
+ | 2171(5) |
+ --------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------------------
+ | 186 543 76 36 15 1222 434 41 991 791 1306 114 38 |
+ | 534 68 35 1070 260 701 356 809 104 |
+ | 274 54 800 95 |
+ | 53
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+ "
+
+ "Modified: / 9.6.1999 / 13:23:44 / cg"
+!
+
+countDown3
+ "count down - using timesRepeat"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |index|
+
+ index := 1000000.
+ 1000000 timesRepeat:[
+ index := index - 1
+ ].
+ ].
+ Transcript show:'countDown3: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 countDown3
+ ]
+
+ Indy 486/50 P5/100 68k/25 SS10 | interpreted mc68k alpha alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy indy 486/50 P5/133 P5/200 P6/400 320H 715/33 SS10/40 Ultra ELC 88k 33 21064/233 21164/433 | 486/50 ss10/40 486/50
+ | 200 250 |
+ -----------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------------------
+min 246 513 121 1397 307 | 3156 6591 1259 14227 10420 5678 10035 975 | 659 380 3075
+ 242 572 (i1) | 2874 14055 8120 (3) 2497 |
+ 239 549 (i1) | 2633 11130 6520 (4) 2358 |
+ | 2477 9055 (O3) |
+ | 2276 |
+ | 2170(5) |
+ -----------------------------------------|---------------------------------------------------------------------------------------------------------------|-------------
+ | 242 648 98 55 27 1297 553 47 1239 946 1269 165 47 |
+ | 624 84 23 441 525 1122 150 |
+ | 604 91 140 |
+ | 505 84 |
+ | 83
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(5) fix true/false
+ "
+
+ "Modified: / 9.6.1999 / 13:24:54 / cg"
+!
+
+emptyLoop
+ "an empty loop (fully inlined)"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ ].
+ ].
+ Transcript show:'emptyLoop: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 emptyLoop
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 SS10 | interpreted SS10/40 mc68k alpha | competition1 competition1 competition2
+cache (none) 256k /40 | indy indy 486/50 P5/133 P5/133 P5/200 P6/400 320H 715/33 gcc ELC 88k 33 21064/233 | 486/50 ss10/40 486/50
+ | 200 |
+ ----------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+min 76 228 50 37 83 336 101 | 1859 1273 956 11818 6240 2058 3210 6065 674 | 253
+ 73 225 | 1716 4430 720 932 10320 5610 (2) 1468 582 |
+ 224 | 1613 4083 796 10125 4780 (3) 1405 |
+ | 1615 4052 774 7392 4950 (2) 1389 |
+ | 1594 3727(5) 5337 (O3) 3620 (4) |
+ | 1375 |
+ | 1321(5) |
+ --------------------------------------------------|-------------------------------------------------------------------------------------------------------|----------------------------
+ | 171 423 68 35 15 813 332 757 580 867 114 |
+ | 61 936 328 702 336 802 105 |
+ | 68 927 260 100 |
+ | 274 54 90 |
+ | 261 53
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+ "
+
+ "Modified: / 4.6.1998 / 00:44:11 / cg"
+!
+
+instAccess1:n
+ "check simple send & instvar access time.
+ Here, a timesRepeat loop with variable count is used."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := 1 -> 2.
+ n timesRepeat:[a key].
+ ].
+ Transcript show:'inst1(n): '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 instAccess1:1000000
+ ]
+
+ Indy 486/50 P5/100 SS10 | interpreted Ultra mc68k alpha | competition1 competition1 competition2(*)
+cache (none) 256k /40 | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 88k SS10/40 250 ELC 33 21064/233 | 486/50 ss10/40 486/50
+ --------------------------------|----------------------------------------------------------------------------------------------------------|------------------------------
+min 818 2199 353 1243 | 5684 17871 3673 63440 23950 30203 36751 1240 | 880 604 4119
+ 752 2101 509 ? 1061 | 6000 ** 16202 3753(#) 66878 21620(4) 22916 1092 |
+ 726 2096 | 5984 15427 7590 40579 20635(#) |
+ | 5640 15155 6845 38403 19600 |
+ | 5436 6569 30894 3835 |
+ | 3686 3723 |
+ --------------------------------|----------------------------------------------------------------------------------------------------------|------------------------------
+ | 2785 470 46 4897 5551 1700 68 4301 3215 246 |
+ | 2744 394 2399 1773 1394 3008 2784 232 |
+ | 2624 388 1388 4201? 1830 223 |
+ | 2210 381 729 1561 |
+ | 1010 406 626
+ | 383
+ | 183 122
+ | 166 105 70
+
+ (*) use 'Association key:1 value:2', since Object does not implement '->'
+(4) both (2) and (3)
+(#) ip rev.2
+ "
+
+ "Modified: / 8.9.1998 / 18:36:32 / cg"
+!
+
+instAccess1b:n
+ "check simple send & instvar access time.
+ Here, a timesRepeat loop with variable count is used."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := 1 @ 2.
+ n timesRepeat:[a x].
+ ].
+ Transcript show:'inst1b(n): '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 instAccess1b:1000000
+ ]
+
+ Indy 486/50 P5/100 SS10 | interpreted mc68k alpha | competition1 competition1 competition2(*)
+cache (none) 256k /40 | indy 486/50 P5/133 P5/200 P6/400 320H 715/33 88k SS10/40 ELC 33 21064/233 | 486/50 ss10/40 486/50
+ --------------------------------|---------------------------------------------------------------------------------------------|------------------------------
+ --------------------------------|---------------------------------------------------------------------------------------------|------------------------------
+ | 1010 166 105 46 2375 1773 626 1561 1830 223 |
+
+ "
+
+ "Modified: / 4.6.1998 / 10:19:42 / cg"
+!
+
+instAccess2
+ "check simple send & instvar access time.
+ This tests the speed of a ^instVar method.
+ Here, a timesRepeat loop with constant count is used."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := 1 -> 2.
+ 1000000 timesRepeat:[a key].
+ ].
+ Transcript show:'inst2(n): '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 instAccess2
+ ]
+
+ Indy 486/50 P5/100 SS10 ELC ELC | interpreted | competition1 competition1 competition2
+cache (none) 256k /40 (cc) gcc | indy 486/50 P5/133 P5/200 P6/400 320H SS10/40 ELC ELC 715/33 88k mc68k alpha | 486/50 ss10/40 486/50
+ gcc | gcc gcc cc 33 21064/233 |
+ ------------------------------------------|-----------------------------------------------------------------------------------------------------|--------------------------
+min 300 841 203 588 1215 1112 | 2599 7547 1711 38827 4134 17879 23459 11200 10418 11181 2879 | 880 578 3735
+ 297 837 563 | 2830 7153 1637 35647 3835 7589 8890 (3) 8344 1241 |
+ 294 956 (i1) | 2614 7073(5) 1630(#) 22201 7194 7130 (4) 6327(#) |
+ 834 (i3) | 2643 1440 18391 6296 |
+ | 2559 1431 16559 5884 |
+ | 2336 1427 16443 3726 |
+ | 2313(5) 1406 12973 |
+ ------------------------------------------|-----------------------------------------------------------------------------------------------------|--------------------------
+ | 1086 1035 212 120 46 2190 804 1714 3899 1880 247 |
+ | 204 105 780 1572 1572 3889 1795 230 |
+ | 197 729 1555 1795 225 |
+ | 189 626 |
+ | 198 |
+ | 183 |
+ | 166
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev.2
+ "
+
+ "Modified: / 4.5.1998 / 20:13:41 / cg"
+!
+
+instAccess3
+ "check simple send & instvar access time.
+ This tests the speed of a ^instVar method.
+ Here, an open coded loop is used."
+
+ |t count|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := 1->2.
+ count := 1000000.
+ [count > 0] whileTrue:[
+ a key.
+ count := count - 1.
+ ].
+ ].
+ Transcript show:'inst3(n): '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 instAccess3
+ ]
+
+ Indy 486/50 SS10 ELC ELC | interpreted SS10 ELC ELC mc68k | competition1 competition2
+cache (none) 256k /40 (cc) gcc | indy 486/50 P5/133 P5/200 P6/400 320H /40 gcc cc | 486/50 486/50
+ ----------------------------------------|--------------------------------------------------------------------|---------------------------
+min 385 1020 797 1681 1641 | 3556 11011 2563 55459 |
+ 380 1099 (i1) | 2860 8194 2011(#) 23752 |
+ 377 1018 (i3) | 2844 1835 17626 |
+ | 2731 1878 17391 |
+ | 1712 14058 |
+ ----------------------------------------|--------------------------------------------------------------------|---------------------------
+ | 1437 250 132 55 2780 996 1649 2014 2008 |
+ | 1254 245 130 780 |
+ | 236 115 679 |
+ | 1033 196 626 |
+ | 181
+(i1) without commonSymbols
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(#) ip rev.2
+ "
+
+ "Modified: / 13.3.1998 / 18:02:40 / cg"
+!
+
+perform1
+ "measure send vs. perform vs. performWithArguments speed."
+
+ |t o sel|
+
+ sel := #isSequenceable.
+ o := 1.2345.
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[ o isSequenceable]
+ ].
+ Transcript show:'direct send: '; show:(t printString);cr; endEntry.
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[ o perform:sel]
+ ].
+ Transcript show:'perform: '; show:(t printString);cr; endEntry.
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[ o perform:sel withArguments:#()]
+ ].
+ Transcript show:'performWithArgs: '; show:(t printString);cr; endEntry.
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 perform1
+ ]
+ "
+!
+
+send2
+ "lots of dummy message sends. This tests the speed of a ^self method.
+ Here, a timesRepeat loop with constant count is used."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopSelf
+ ].
+ ].
+ Transcript show:'send2: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 send2
+ ]
+
+ Indy 486/50 P5/90 P5/100 P5/133 68k/25 SS10 | interpreted ELC ELC SS10/40 ULTRA mc68k alpha | competition1 competition2
+cache (none) 256k /40 | indy 486/50 P5/100 P5/133 P5/200 P6/400 320H 715/33 88k gcc cc gcc 250 33 21064/233 | 486/50 486/50
+ -----------------------------------------------------|------------------------------------------------------------------------------------------------------------------|----------------------------
+min 301 943 247 222 189 1790 514 | 2962 7747 1941 1531 30095 10420 9529 6218 13679 3466 10302 1964 | 769 4999
+ 283 938 242 588 | 2523 6774 1455 28891 8370(3) 9010 1477 |
+ 282 957 (i1) | 2372 6749 1440 24924 8820(2) 7674 |
+ 935 (i3) | 2305 6281 1410 15145 6910(4) 5888(#) |
+ | 2312 6000(6) 1260 10551 5861 |
+ | 2286 1192 8483 (O3) 5446 |
+ | 2264 2375 |
+ | 2019 |
+ | 1982(5) |
+ -----------------------------------------------------|------------------------------------------------------------------------------------------------------------------|----------------------------
+ | 1126 227 116 47 2352 1584 1782 1663 879 73 1980 315 |
+ | 1045 219 46 795 1661 854 1955 303 |
+ | 211 808 275 |
+ | 204 732 271 |
+ | 213 677 |
+ | 1031 199 675 |
+ | 924 181
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(6) fix true/false; USE_SP
+(#) ip rev.2
+ "
+
+ "Modified: / 4.5.1998 / 20:14:09 / cg"
+!
+
+send:n
+ "lots of dummy message sends. This tests the speed of a ^self method.
+ Here, a timesRepeat loop with variable count is used."
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ n timesRepeat:[
+ self noopSelf
+ ].
+ ].
+ Transcript show:'send(n): '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 send:1000000
+ ]
+
+ Indy 486/50 P5/100 SS10 | interpreted ULTRA SS10 mc68k alpha | competition1 competition2
+cache (none) 256k /40 | indy indy 486/50 P5/133 P5/200 320H 715/33 250 /40 ELC 33 21064/233 | 486/50 486/50
+ | 200 |
+ --------------------------------|------------------------------------------------------------------------------------|--------------------
+min 828 2127 353 1290 | 5856 18067 31517 22230 1974 | 823 4943
+ 797 2070 539 ? | 5189 15296 22010 (3) 1478 |
+ 748 2052 509 ? | 5462 14434 22390 (4) |
+ 745 2048 | 5547 14386 |
+ 724 | 5484 14162 |
+ | 5090 |
+ | 4940 |
+ | 4872 |
+ | 4844 |
+ --------------------------------|------------------------------------------------------------------------------------|--------------
+ | 339 2727 485 116 9735 91 1495 3115 2819 313 |
+ | 318 2665 426 808 1658 1856 303 |
+ | 2082 404 732 275 |
+ | 1029 421 677 270 |
+ | 924 395 |
+ | 200
+ | 181
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+ "
+
+ "Modified: / 4.5.1998 / 20:14:22 / cg"
+!
+
+stringAt
+ "perform String>>at: a million times"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := 'a'.
+ 1000000 timesRepeat:[
+ a at:1
+ ].
+ ].
+ Transcript show:'stringAt: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 stringAt
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 | interpreted Ultra alpha/233 | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 P6/400 320H 715/33 SS10/40 250 osf1 | 486/50 486/50
+ ---------------------------------------------|------------------------------------------------------------------------|----------------------------
+ 167 508 111 84 | 3081 8856 1879 11740 |
+ 488 (i3) | 3021 8168 1670 7260 (4) |
+ | 2920 1611 7220 |
+ | 2703 1591 |
+ | 2646(5) |
+ ---------------------------------------------|------------------------------------------------------------------------|----------------------------
+ | 2200 408 148 3613 1276 158 759 |
+ | 2168 400 145 758 |
+ | 393 |
+ | 389 |
+ | 379
+(4) both (2) and (3)
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+ "
+
+ "Modified: / 4.6.1998 / 10:21:16 / cg"
+!
+
+stringAtPut
+ "perform String>>at:put: a million times"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := String with:$a.
+ 1000000 timesRepeat:[
+ a at:1 put:$b
+ ].
+ ].
+ Transcript show:'stringAtPut: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 stringAtPut
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 | interpreted Ultra alpha/233 | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 P6/400 320H 715/33 ss10/40 250 osf1 | 486/50 486/50
+ --------------------------------------------|---------------------------------------------------------------------|----------------------------
+ 176 142 106 | 6926 11943 2537 11730 |
+ | 6868 2504 |
+ | 4094 2376 |
+ | 3910 2245 |
+ --------------------------------------------|---------------------------------------------------------------------|----------------------------
+ | 2424 498 146 3971 1612 182 639 |
+ | 483 4248 |
+ | 481 |
+ | 461 |
+ "
+
+ "Modified: / 4.6.1998 / 10:22:41 / cg"
+!
+
+stringBasicSize
+ "perform String>>basicSize a million times"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := 'abcdefghijkl'.
+ 1000000 timesRepeat:[
+ a basicSize
+ ].
+ ].
+ Transcript show:'stringBasicSize '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 stringBasicSize
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 | interpreted ULTRA alpha/233 | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 250 SS10/40 osf1 | 486/50 486/50
+ ---------------------------------------------|---------------------------------------------------------------------------------------|----------------------------
+ | 62 108 |
+ ---------------------------------------------|---------------------------------------------------------------------------------------|----------------------------
+ "
+
+ "Modified: / 28.7.1998 / 17:22:24 / cg"
+!
+
+stringSize
+ "perform String>>size a million times"
+
+ |t index|
+
+ t := Time millisecondsToRun:[
+ |a|
+
+ a := 'abcdefghijkl'.
+ 1000000 timesRepeat:[
+ a size
+ ].
+ ].
+ Transcript show:'stringSize '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ STXBenchmarks1 stringSize
+ ]
+
+ Indy 486/50 P5/100 P5/133 88k 68k/25 | interpreted Ultra alpha/233 | competition1 competition2
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 SS10/40 250 osf1 | 486/50 486/50
+ ---------------------------------------------|----------------------------------------------------------------------------------------|----------------------------
+ | 150 90 63 106 |
+ ---------------------------------------------|----------------------------------------------------------------------------------------|----------------------------
+ "
+
+ "Modified: / 28.7.1998 / 17:22:24 / cg"
+!
+
+testBlock
+ ^ [ 99 ]
+! !
+
+!BenchmarkSTX1 class methodsFor:'misc other benchmarks'!
+
+benchArrayDo
+ "loop over an item in an array 10000 times"
+
+ |t|
+
+ t := Time millisecondsToRun: [
+ |array|
+
+ array := (1 to:1000) asArray.
+ 10000 timesRepeat:[
+ array do: [:each | 1].
+ ]
+ ].
+
+ Transcript show:'b''do: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchArrayDo
+ ]
+
+ Indy 486/50 P5/133 SS10 | interpreted Ultra SS10/40 ELC
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 DS3100 88k 250 gcc gcc
+ | WIN95
+ ---------------------------------|--------------------------------------------------------------------------------------------
+ 1382 5251 | 5971 1075 943 394 348 8650 834 4996
+ | 344 4092
+ ---------------------------------|--------------------------------------------------------------------------------------------
+ "
+
+ "Modified: / 27.4.1999 / 09:25:17 / cg"
+!
+
+benchArrayFromToDo
+ "loop over an item in an array 10000 times"
+
+ |t|
+
+ t := Time millisecondsToRun: [
+ |array|
+
+ array := (1 to:1000) asArray.
+ 10000 timesRepeat:[
+ array from:1 to:1000 do: [:each | 2].
+ ]
+ ].
+
+ Transcript show:'b''from:to:do: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchArrayFromToDo
+ ]
+
+ Indy 486/50 P5/133 SS10 | interpreted Ultra SS10/40 ELC
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 DS3100 88k 250 gcc gcc
+ | WIN95
+ ---------------------------------|--------------------------------------------------------------------------------------------
+ 1481 | 6178 1102 880 589 291 9301 739 5340
+ | 299 4150
+ ---------------------------------|--------------------------------------------------------------------------------------------
+ "
+
+ "Modified: / 27.4.1999 / 09:21:53 / cg"
+!
+
+benchArrayIncludes
+ "search an item in an array 100000 times"
+
+ |t|
+
+ t := Time millisecondsToRun: [
+ |array|
+
+ array := (1 to:100) asArray.
+ 1 to: 100000 do: [:each | array includes:50].
+ ].
+
+ Transcript show:'b''includes: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchArrayIncludes
+ ]
+
+ Indy 486/50 P5/133 SS10 | interpreted Ultra SS10/40 ELC
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 DS3100 88k 250 gcc gcc
+ | WIN95
+ ---------------------------------|----------------------------------------------------------------------------------------------
+ 304 908 152 476 | 870 2726 722 5687 4210 7601 4616 1622 4008
+ 922 (i1) | 1001(5) 2575 633(#) 5130 4150 3505
+ | 1230 3630 (4) 3228(#)
+ | 3510 3104
+ ---------------------------------|-----------------------------------------------------------------------------------------------
+ | 1135 251 148 111 74 1714 1606 92 668 1651
+ | 835 242 1307 1601 659 1595
+ | 818 175 631 1414
+ | 566
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(5) fix true/false
+(#) ip rev.2
+ "
+
+ "Modified: / 27.4.1999 / 09:17:33 / cg"
+!
+
+benchArrayIndexOf
+ "search an item in an array 100000 times"
+
+ |t|
+
+ t := Time millisecondsToRun: [
+ |array|
+
+ array := (1 to:100) asArray.
+ 1 to: 100000 do: [:each | array identityIndexOf:50].
+ ].
+
+ Transcript show:'b''indexOf: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchArrayIndexOf
+ ]
+
+ Indy 486/50 P5/133 | interpreted Ultra SS10/40 ELC
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 88k 250 gcc gcc
+ | WIN95
+ ----------------------------|----------------------------------------------------------------------------------------
+ 411 833 240 | 1243 3325 639 12087 4400 4798 4220
+ 824 | 2940 645(#) 10308 4340 (4) 3814
+ 844 (i1) | 1221 2515 1149 6794 3410 3540(#)
+ 830 | 984 2500 6397 3415
+ | 6142
+ ----------------------------|----------------------------------------------------------------------------------------
+ | 1113 267 192 127 85 1751 2206 102 763 2019
+ | 1030 247 1574 710 1948
+ | 1924
+ |
+(4) both (2) and (3)
+(i1) without commonSymbols
+(#) ip rev.2
+ "
+
+ "Modified: / 27.4.1999 / 09:19:21 / cg"
+!
+
+benchArrayInject
+ "inject into an array 10000 times"
+
+ |t|
+
+ t := Time millisecondsToRun: [
+ |array|
+
+ array := (1 to:1000) asArray.
+ 10000 timesRepeat:[
+ array inject:0 into:[:sum :el | sum + el].
+ ]
+ ].
+
+ Transcript show:'b''inject: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchArrayInject
+ ]
+
+ Indy 486/50 P5/133 SS10 | interpreted Ultra SS10/40 ELC
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 320H 715/33 DS3100 88k 250 gcc gcc
+ | WIN95
+ ---------------------------------|--------------------------------------------------------------------------------------------
+ | 3921
+ ---------------------------------|--------------------------------------------------------------------------------------------
+ "
+
+!
+
+benchArrayReplace
+ "replace part of an array 100000 times"
+
+ |t|
+
+ t := Time millisecondsToRun: [
+ |array endIndex|
+
+ array := (1 to:100) asArray.
+ endIndex := 99.
+ 1 to: 100000 do: [:each | array replaceFrom:1 to:endIndex with:array startingAt:2].
+ ].
+
+ Transcript show:'b''replace: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 benchArrayReplace
+ ]
+
+ Indy 486/50 P5/133 SS10 | interpreted SS10/40 ELC
+cache (none) 256k | indy 486/50 P5/133 P5/200 P6/266 P6/400 20H 715/33 DS3100 88k gcc gcc
+ | WIN95
+ ---------------------------------|--------------------------------------------------------------------------------------
+ ---------------------------------|--------------------------------------------------------------------------------------
+ | 1438 190 393 136 93 2271 2769 904 3431
+ | 1361 170 91 1631 879 3195
+ | 803
+ "
+
+ "Modified: / 27.4.1999 / 09:20:31 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'self micro benchmarks'!
+
+atAllPut
+ "fill a huge array (100k element) with some value
+ (in a loop here; actually Array atAllPut: is much faster - see atAllPut2)"
+
+ |vec t|
+
+ vec := Array new:100000.
+ t := Time millisecondsToRun:[
+ 1 to:100000 do:[:i |
+ vec at:i put:7
+ ]
+ ].
+ ^ t
+
+ "
+ Transcript showCR:(STXBenchmarks1 atAllPut)
+ "
+!
+
+atAllPut2
+ "fill a huge array (100k element) with some value
+ - just to show, that it makes sense to use existing methods
+ instead of doing things manually again and again."
+
+ |vec t|
+
+ vec := Array new:100000.
+ t := Time millisecondsToRun:[
+ vec atAllPut:7
+ ].
+ ^ t
+
+ "
+ Transcript showCR:(STXBenchmarks1 atAllPut2)
+ "
+!
+
+fastSumTo
+ "sum up the numbers from 1 to 10000 a hundred times.
+ Open coded loop here"
+
+ |val i|
+
+ 100 timesRepeat:[
+ val := 0.
+ i := 1.
+ [i <= 10000] whileTrue:[
+ val := val + i.
+ i := i + 1
+ ].
+ ].
+
+ "
+ Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 fastSumTo])
+ "
+!
+
+loopTimes
+ "runs the self low-level loop benchmarks"
+
+ Transcript show:'fastSumTo: '; show:(Time millisecondsToRun:[STXBenchmarks1 fastSumTo]); cr; endEntry.
+ Transcript show:'nestedLoop: '; show:(Time millisecondsToRun:[STXBenchmarks1 nestedLoop]); cr; endEntry.
+ Transcript show:'atAllput: '; show:(STXBenchmarks1 atAllPut); cr; endEntry.
+ Transcript show:'sumAll: '; show:(STXBenchmarks1 sumAll); cr; endEntry.
+ Transcript show:'sumTo: '; show:(Time millisecondsToRun:[STXBenchmarks1 sumTo]); cr; endEntry.
+
+ "
+ Benchmarks::STXBenchmarks1 loopTimes
+ interpreted
+ Indy DS3100 486/50 P5/90 P5/100 SS10 ELC | IRIX IRIX Linux Linux Linux Linux Linux Linux AIX HPUX HPUX DEC RealIX SS10/40 ULTRA ELC mc68k alpha alpha | competition1 competition1
+ (no cache) ? 256k /40 (cc) | indy indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 715/33 735/100 DS3100 88k gcc 250 gcc 33 21064/233 21164/433 | 486/50 SS10/40
+ | 100 200 |
+ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------
+ fastSumTo: 417 2355 645 145 152? 449 1317 | 3378 2770 9739 3425 2652 13072 14170 7357 26168 15869 6188 15170 18901 4598 | 769 406
+ 584 (i2) 1291 | 2581 12680 (2) 5154 25640 12925 5620 12148 2444 |
+ | 2504(#) 10940 (3) 2693 9387(#) 12022 1986 |
+ | 2547(%) 9300 (4) 9331 10954 |
+ | 2337 8846 |
+ | 2247 3990 |
+ | 2157 |
+ +-------------------------------------------------------------------------------------------------------------------------------------------------+
+ | 491 2241 386 66 42 22 4116 2925 1445 75 3946 4118 949 70 |
+ | 464 1811 306 76? 28 2222 1477 1397 1997 3490 334 ? |
+ | 449 937 147 80 (W95) 1134 1978 917 ? |
+ | 427 857 138 1197? 1673 187 |
+ | 842 131 906 1653 167 |
+ | 818 123 602 |
+ | 619 114 510 |
+ | 573 101 461 |
+ | 544 458 |
+ |
+
+ nestedLoop: 243 1515 457 97 82 340 927 | 6096 3036 19469 4318 3614 20950 24420 7079 67390 30579 5532 15903 17243 2836 | 659 383
+ 438 (i2) 326 913 | 6350 16927 3505 15230 23580 (2) 4619 52446 23232 5373 13070 2742 |
+ 397 (i3) | 5705 16035 3548(#) 23330 (3) 2423 50113 20801(#) 12773 1670 |
+ | 5332 15170 2041(%) 20980 (4) 9566(%) 14306 1338 |
+ | 1979 9265 |
+ | 3229 3471 |
+ | 3372 |
+ | 2264 |
+ +-------------------------------------------------------------------------------------------------------------------------------------------------+
+ | 334 4496 529 73 53 43 1638 1129 713 83 1492 1768 198 80 |
+ | 308 2842 461 63 (W95) 36 1579 597 705 1318 1536 190 |
+ | 283 2735 432 677 1231 184 |
+ | 992 260 603 2539? 179 |
+ | 958 240 590 |
+ | 992 249 562 |
+ | 907 233 |
+ | 630 104 |
+ | 121 |
+ | 110 |
+ |
+
+ atAllPut: 26 164 54 17 15 48 117 | 625 355 1827 506 405 3163 2570 1687 7410 3360 1248 3692 4791 562 | 164 152
+ 53 (i2) 115 | 771 1794 429(#) 2490 (2) 648 6066 2625 1216 3413 2117 509 |
+ | 647 1741 509(%) 2430 (3) 330 6128 2324(#) 3429 269 |
+ | 590 1693 500 2450 (4) 2316 3029 |
+ | 990? 387 2320 506 |
+ | 383 |
+ | 466? |
+ +-------------------------------------------------------------------------------------------------------------------------------------------------+
+ | 98 485 69 21 9 6 674 1035 265 15 784 452 37 13 |
+ | 74 465 66 9 (W95) 254 106 260 723 31 |
+ | 71 396 72 229 478 29 |
+ | 293 64 177 635? |
+ | 274 49 153 547 |
+ | 128 27 108 |
+ | 94 |
+
+ sumAll: 55 1650 279 106 76 103 260 | 710 403 2244 605 487 3672 2870 1891 7985 3708 1395 4093 2453 739 | 275 223
+ 257 | 851 2012 497(#) 2740 (2) 725 6457 2866 1350 3800 705 |
+ | 739 1992 556(%) 2670 (3) 359 6222 2520(#) 3566 337 |
+ | 668 547 2520 (4) 2525 3485 318 |
+ | 465 537 |
+ | 438 |
+ | 536? |
+ +-------------------------------------------------------------------------------------------------------------------------------------------------+
+ | 132 633 116 |
+ | 100 545 84 21 13 9 1055 1254 397 20 1060 729 160 16 |
+ | 96 455 87 12 (W95) 363 212 393 876 672 89 ? |
+ | 352 75 363 629 149 ? |
+ | 320 59 313 778? 56 |
+ | 198 54 285 517 |
+ | 161 33 173 |
+ | 131 |
+ | 116 |
+
+ sumTo: 242 1511 556 137 112 390 986 | 5884 3122 17293 4938 4322 30993 23140 8201 67308 31448 6968 19618 19801 3825 | 769 463
+ 477 (i2) 974 | 6388 17884 4017 16784 22260 (2) 5875 52532 23888 6570 14802 1993 |
+ 455 (i3) | 6123 16943 4112(#) 22520 (3) 3002 50539 20939(#) 14455 1698 |
+ | 5572 16653 3911 22660 (4) 11530(%) 16306 |
+ | 5462 2752(%) 21860 11294 |
+ | 2471 4409 |
+ | 3764 |
+ | 3564 |
+ | 2634 |
+ +-------------------------------------------------------------------------------------------------------------------------------------------------+
+ | 557 4438 759 86 61 38 7486 5928 2625 123 7794 3654 1047 91 |
+ | 484 3216 715 77 (W95) 2477 1528 2605 5879 3541 365 ? |
+ | 450 3190 466 2316 2328 4043 358 ? |
+ | 2591 436 2052 5531? 1021 ? |
+ | 2273 461 1885 3106 214 |
+ | 865 384 852 211 |
+ | 724 357 633 |
+ | 153 557 |
+ | 138 |
+ | 128 |
+ |
+ sumTo2: 105 94 | --- not possible --- |
+ |
+ |
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i2) no commonSymbols; jno-to-jmp elimination
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(#) ip rev.2
+(%) bp instead of bp[pc]
+ "
+
+ "Modified: / 9.6.1999 / 13:29:30 / cg"
+!
+
+nestedLoop
+ "a doubly nested loop"
+
+ |i|
+
+ 100 timesRepeat:[
+
+ i := 0.
+ 1 to:100 do:[:l1 |
+ 1 to:100 do:[:l2 |
+ i := i + 1
+ ]
+ ]
+ ]
+ "
+ Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 nestedLoop])
+ "
+
+ "Modified: 26.6.1997 / 13:26:15 / cg"
+!
+
+sumAll
+ "sum up the numbers in a big (100k element) array"
+
+ |vec t s|
+
+ vec := Array new:100000.
+ 1 to:100000 do:[:i |
+ vec at:i put:7
+ ].
+ s := 0.
+ t := Time millisecondsToRun:[
+ 1 to:100000 do:[:i |
+ s := s + (vec at:i)
+ ]
+ ].
+ ^ t
+
+ "
+ Transcript showCR:(STXBenchmarks1 sumAll)
+ "
+!
+
+sumAll2
+ "sum up the numbers in a big (100k element) array.
+ Here, a standard enumeration construct is used"
+
+ |vec t s|
+
+ vec := Array new:100000.
+ vec atAllPut:7.
+ t := Time millisecondsToRun:[
+ s := vec inject:0 into:[:sumSoFar :element | sumSoFar + element].
+ ].
+ ^ t
+
+ "
+ Transcript showCR:(STXBenchmarks1 sumAll2)
+ "
+!
+
+sumTo
+ "sum up the numbers from 1 to 10000 a hundred times.
+ Using a to:do: loop here."
+
+ |val|
+
+ 100 timesRepeat:[
+ val := 0.
+ 1 to:10000 do:[:i |
+ val := val + i
+ ]
+ ].
+
+ "
+ Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 sumTo])
+ "
+!
+
+sumTo2
+ "demonstrating inline C advantage ...
+ ... however, be careful, some compilers optimize the whole
+ loop by eliminating it alltogether ..."
+
+ 100 timesRepeat:[
+%{
+ int i, val = 0;
+
+ for (i=1; i<=10000; i++) {
+ val += i;
+ }
+%}.
+ ].
+
+ "
+ Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 sumTo2])
+ "
+!
+
+sumTo3
+ "demonstrating inline C advantage ...
+ ... however, be careful, some compilers optimize the whole
+ loop by eliminating it alltogether ..."
+
+%{
+ int i, cnt, val;
+
+ for (cnt=1; cnt<=100; cnt++) {
+ val = 0;
+ for (i=1; i<=10000; i++) {
+ val += i;
+ }
+ }
+%}.
+
+ "
+ Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 sumTo3])
+ "
+! !
+
+!BenchmarkSTX1 class methodsFor:'standard benchmarks'!
+
+byteFloatBench1
+ "arithmetic speed bench.
+ from Byte benchmarks; adapted to ST by Bruno Bienfait."
+
+ | a b c count i |
+
+ a := 3.141597.
+ b := 1.783903.
+ count := 1000000.
+ i := 1.
+
+ [i < count] whileTrue: [
+
+ c := (a - b) / ((a + b) * b ).
+ a := a + (c * b) - (b / a).
+
+ i := i + 1.
+ ].
+
+ "
+ Transcript show:'byteFloatBench1: '; endEntry.
+ Transcript show:(
+ Time millisecondsToRun:[
+ Benchmarks::STXBenchmarks1 byteFloatBench1
+ ]
+ ); cr
+
+ Indy 486/50 P5/90 P5/100 P5/133 | interpreted SS10/40 ELC NeXT alpha | competition1 competition2
+cache (none) 256k | indy indy 486/50 P5/100 P5/133 P5/200 P5/200 P6/266 gcc gcc 68k/33 21064/233 | 486/50 486/50
+ | 200 (*) (*) |
+ -------------------------------------------------------------------------------------------------------------------------------------|---------------------------
+min 10575 28429 8146 8131 6675 | 27006 74769 18559 15398 86258 | 119791 100457
+ 10410 28839 | 25735 50973 13639 15324 |
+ 28276 | 25033 14517 |
+ 28022 | 20300 13733 |
+ | 18792 13689 |
+ | 18231 |
+ -----------------------------------------|-------------------------------------------------------------------------------------------|---------------------------
+ 8333 44365 11449 8884(*) 2820 15648 51147 23347 |
+ 35588 8486 7347(*) 5779(*) |
+ 8199 |
+ 7524 |
+
+ notice, that ST/X uses double prec. floats, while most other ST-systems
+ use single prec. floats.
+ (meaning that the float allocation is twice as high in ST/X)
+
+ Notice, this benchmark is actually a garbage collector benchmark,
+ since most time is spent in collecting intermediate float objects.
+ GC times on the other hand are mostly affected by the memory bandwidth;
+ therefore, the times here are mostly affected by cache size and
+ the raw speed of memory access (meaning that even on equal-clocked CPUS,
+ time may differ heavily due to different mainboard memory access times ...
+
+ (*) this was a notebook with 200Mhz prozessor, but very slow
+ memory interface - see what you get from this ...
+ ... when compared to a 133Mhz pentium with a good memory
+ interface.
+ The second (smaller) number was measured on a normal pci-system;
+ "
+
+ "Modified: / 5.6.1998 / 00:18:37 / cg"
+!
+
+byteFloatBench2
+ "{ Pragma: +optMath } "
+
+ "same as byteFloatBench1 - demonstrates effect of special
+ optimizations ... "
+
+ | a "{Class: Float }"
+ b "{Class: Float }"
+ c "{Class: Float }"
+ count i |
+
+ a := 3.141597.
+ b := 1.783903.
+ count := 1000000.
+ i := 1.
+
+ [i < count] whileTrue: [
+
+ c := (a - b) / ((a + b) * b ).
+ a := a + (c * b) - (b / a).
+
+ i := i + 1.
+ ].
+
+ "
+ Transcript show:'byteFloatBench2: '; endEntry.
+ Transcript show:(
+ Time millisecondsToRun:[
+ STXBenchmarks1 byteFloatBench2
+ ]
+ ); cr
+
+ Indy 486/50 P5/90 P5/100 68k/33 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50 486/50
+ ----------------------------------------------------------------------------------------------
+min 8240 22976 6476 6434 28555 | ---- same as ByteFloatBench1 ---
+
+
+
+ Notice, this benchmark is actually a garbage collector benchmark,
+ since most time is spent in collecting intermediate float objects.
+ GC times on the other hand are mostly affected by the memory bandwidth;
+ therefore, the times here are mostly affected by cache size and
+ the raw speed of memory access (meaning that even on equal-clocked CPUS,
+ time may differ heavily due to different mainboard memory access times ...
+ "
+
+ "Modified: 29.5.1997 / 12:00:50 / cg"
+!
+
+byteFloatBench3
+ "{ Pragma: +optMath } "
+
+ "same as byteFloatBench2 - uses timesRepeat instead of open while-loop"
+
+ | a "{Class: Float }"
+ b "{Class: Float }"
+ c "{Class: Float }"|
+
+ a := 3.141597.
+ b := 1.783903.
+
+ 1000000 timesRepeat:[
+ c := (a - b) / ((a + b) * b ).
+ a := a + (c * b) - (b / a).
+ ].
+
+ "
+ Transcript show:'byteFloatBench3: '; endEntry.
+ Transcript show:(
+ Time millisecondsToRun:[
+ STXBenchmarks1 byteFloatBench3
+ ]
+ ); cr
+
+ Indy 486/50 P5/100 68k/33 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50 486/50
+ ----------------------------------------------------------------------------------------
+min 7904 22780 6252 27060 | ---- almost same as ByteFloatBench1 ---
+
+
+
+ Notice, this benchmark is actually a garbage collector benchmark,
+ since most time is spent in collecting intermediate float objects.
+ GC times on the other hand are mostly affected by the memory bandwidth;
+ therefore, the times here are mostly affected by cache size and
+ the raw speed of memory access (meaning that even on equal-clocked CPUS,
+ time may differ heavily due to different mainboard memory access times ...
+ "
+
+ "Modified: 29.5.1997 / 12:00:55 / cg"
+!
+
+byteFloatBench4
+ "same as byteFloatBench1 - demonstrates effect of inline c-code"
+
+%{
+ double a, b, c;
+ int count;
+
+ a = 3.141597;
+ b = 1.783903;
+ for (count = 0; count < 1000000; count++) {
+ c =(a - b) / ((a + b) * b );
+ a = a + (c * b) - (b / a);
+ }
+%}.
+
+ "
+ Transcript show:'byteFloatBench4: '; endEntry.
+ Transcript show:(
+ Time millisecondsToRun:[
+ STXBenchmarks1 byteFloatBench4
+ ]
+ ); cr
+
+ Indy 486/50 P5/133 68k/33 | interpreted | competition1 competition2
+cache (none) 256k | indy 486/50 | 486/50 486/50
+ ----------------------------------|-----------------------------------------------------
+min 1550 83* 15* 128* | ---- not possible ---
+
+
+(*) not fair, since GCC removes that code completely
+ "
+!
+
+recur1
+ "lots of recursion for testing send with arg"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ self recur1:15
+ ].
+ Transcript show:'recur1: '; show:(t printString); cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 recur1
+ ]
+
+ Indy 486/50 P5/90 P5/100 P5/133 88k 68k/25 SS10 | interpreted | competition1 competition1 competition2
+cache (none) 256k /40 | indy indy 486/50 P5/100 P5/133 P5/200 P6/266 P6/400 320H 715/33 735/100 DS3100 88k SS10/40 ELC ELC 68k/33 alpha | 486/50 ss10/40 486/50
+ | 200 -O (R2000) gcc gcc cc 21064/233 |
+ ---------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------
+min 55 118 34 28 22 100 286 86 | 462 1221 386 320 4356 1690 617 3793 1984 782 2551 4227 2308 2516 | 50 440
+ 47 99 74 | 439 1195 283(#) 2583 1580 (2) 460 (6) 3484(2) 1950 755 1862 1275 |
+ 46 108 (i1) | 447 1145 372 3260 1860 (3) 3199 1316(#) 1803 633 |
+ 104 (i2) | 433 1123 362 2869 1490 (2) 1304 |
+ 93 (i3) | 430 1093(2) 301 2746 1880 (4) 1276 |
+ | 408(2) 1076 2634 1590 1190 |
+ | 395(2) 2425 (O3) 599 |
+ | 455(5) |
+ ---------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+ | 70 127 28 5 265 349 105 245 183 55 |
+ | 33 125 23 240 165 100 215 177 50 |
+ | 25 116 21 12 208 90 207 207 171 44 |
+ | 114 20 11 9 196 288? |
+ | 108 81 |
+ | 105 74 |
+ | 70
+ | 67
+ | 65
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(i2) without commonSymbols; jno-to-jmp opt
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev.2
+(6) gcc
+ "
+
+ "Modified: / 4.6.1998 / 10:14:40 / cg"
+!
+
+recur1:num
+ "actual recursion method for recur1"
+
+ (num = 0) ifTrue:[^ self].
+ self recur1:(num - 1).
+ ^ self recur1:(num - 1)
+!
+
+sieve:n
+ "sieve the primes n times"
+
+ |num i k prime count flags time|
+
+ num := 8191.
+ flags := Array new:num.
+
+ Transcript show:'Sieve running ...'; cr.
+
+ time := Time millisecondsToRun:[
+ n timesRepeat:[
+ count := 0.
+ flags atAllPut:1.
+ i := 1.
+ num timesRepeat:[
+ (flags at:i) == 1 ifTrue:[
+ prime := i + i + 3.
+ k := i + prime.
+ [k <= num] whileTrue:[
+ flags at:k put:0.
+ k := k + prime
+ ].
+ count := count + 1
+ ].
+ i := i + 1
+ ].
+ ].
+ ].
+
+ Transcript show:'Sieve in Smalltalk: '.
+ Transcript show:n printString.
+ Transcript show:' iteration(s).'; cr.
+ Transcript show:'found '.
+ Transcript show:count printString.
+ Transcript show:' primes.'; cr.
+ Transcript show:'time per run: '.
+ Transcript show:(time / n) printString.
+ Transcript show:' ms.'; cr; endEntry
+
+ "
+ 10 timesRepeat:[
+ Benchmarks::STXBenchmarks1 sieve:1
+ ]
+
+
+ Indy 486/50 P5/90 P5/100 P5/133 88k 68k/25 68k/33 SS10 | indy indy 486/50 P5/100 P5/133 P5/200 P6/266 320H 715/33 735/100 DS3100 88k SS10/40 ELC ELC 68k/33 alpha | competition1 competition1
+ /40 | 200 (R2000) gcc gcc cc 21064/233 | 486/50 ss10/40
+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------
+min 29 58 20 18 12 50 128 95 41 | 165 480 129 105 2060 610 221 1227 701 245 714 1190 798 143 | 110 82
+ 28 57 16 | 157 405 102 550 (2) 132 (6) 1199(2) 670 227 580 66 |
+ 27 56 | 146 371 (2) 97 931 520 (3) 148 1078 557 564 |
+ 24 | 141 (*) 93 797 460 (4) 456(#) 550 |
+ | 132 (5) 97(#) 763 438 |
+ | 91 697 420 |
+ | 87 664 118 |
+ | 92 698 (O3) 112 |
+ --------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|-------------
+ | 26 209 38 226 231 89 283 154 296 37 |
+ | 24 202 35 78 43 85 161 275 23 |
+ | 175 32 83 137 248 13 |
+ | 168 20 70 147? 11 |
+ | 100 18 53 95 19 ? |
+ | 85 17 32 8 |
+ | 58 16 29 |
+ | 36 12 28 |
+ | 33 8 5 3
+(*) quickSyms
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix-true/false
+(#) ip rev.2
+(6) gcc
+ "
+
+ "Modified: / 2.6.1998 / 20:21:53 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'symbol table benchmarks'!
+
+symbolTableBenchmark
+ "create many symbols ..."
+
+ |t|
+
+ ObjectMemory reclaimSymbols.
+
+ t := Time millisecondsToRun:[
+ 1 to:10000 do:[:i|
+ i printString asSymbol
+ ].
+ ].
+ Transcript show:'create symbols: '; show:(t printString); cr; endEntry.
+
+ t := Time millisecondsToRun:[
+ 1 to:10000 do:[:i|
+ i printString asSymbol
+ ].
+ ].
+ Transcript show:'lookup symbols: '; show:(t printString); cr; endEntry.
+
+ ObjectMemory reclaimSymbols.
+
+ "
+
+ STXBenchmarks1 symbolTableBenchmark
+
+ (times in a fresh image (about 1.5Mb), with single browser opened)
+
+ Indy 486/50 P5/100 | interpreted competition1 competition2
+cache (none) 256k | indy 486/50 P6/400
+ -------------------------------------------------------------------------------------
+create |
+ 232 407 176 | 781 19 4064
+ 244 172 |
+ ------------------------------------------------------------------------------
+lookup |
+ 143 373 150 | 675 16 4064 7744
+ 191 146 |
+ "
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSTX2.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,222 @@
+"
+ COPYRIGHT (c) 1988 by Claus Gittinger
+ All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSTX2
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSTX2 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1988 by Claus Gittinger
+ All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+!
+
+documentation
+"
+ some internal benchmarks (various primitive methods).
+ These are not of public interest.
+"
+! !
+
+!BenchmarkSTX2 class methodsFor:'helpers'!
+
+noop0
+ ^ 0
+!
+
+noop00
+ ^ 0
+!
+
+noopINVALID:x
+ x size > 100 ifTrue:[^ 999].
+
+%{ /* UNLIMITEDSTACK */
+ if (__isString(x)) {
+ RETURN ( __MKSMALLINT(0) );
+ }
+%}.
+ ^ 999
+!
+
+noopPR0
+%{
+ RETURN ( __MKSMALLINT(0) );
+%}
+!
+
+noopPRNC0
+%{ /* NOCONTEXT */
+ RETURN ( __MKSMALLINT(0) );
+%}
+!
+
+noopPRSTK0
+%{ /* STACK:10000 */
+ RETURN ( __MKSMALLINT(0) );
+%}
+!
+
+noopPRULSTK0
+%{ /* UNLIMITEDSTACK */
+ RETURN ( __MKSMALLINT(0) );
+%}
+! !
+
+!BenchmarkSTX2 class methodsFor:'micro benchmarks'!
+
+sendPoly
+ "different primitive methods"
+
+ |t a b|
+
+ a := (1 to:1000) asArray.
+
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ a do:[:el | el]
+ ].
+ ].
+ Transcript show:'empty loop: '; showCR:(t printString).
+
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ a do:[:el | el negative]
+ ].
+ ].
+ Transcript show:'all int: '; showCR:(t printString).
+
+ b := a collect:[:el | el asFloat].
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ b do:[:el | el negative]
+ ].
+ ].
+ Transcript show:'all float: '; showCR:(t printString).
+
+ b := a collect:[:el | el even ifTrue:[el asFloat] ifFalse:[el]].
+ t := Time millisecondsToRun:[
+ 1000 timesRepeat:[
+ b do:[:el | el negative]
+ ].
+ ].
+ Transcript show:'alternating : '; showCR:(t printString).
+
+ "
+ STXBenchmarks2 sendPoly
+
+ Indy 486/50 P5/100
+cache (none) 256k
+ ----------------------------
+empty 189 596 177
+allInt 1006 2387 575
+allFloat 1460 3139 827
+altern'ng 2149 4942 1511
+ "
+!
+
+sendPrim
+ "different primitive methods"
+
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noop0
+ ].
+ ].
+ Transcript show:'standard ^ 0: '; showCR:(t printString).
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopPR0
+ ].
+ ].
+ Transcript show:'standard prim ret 0: '; showCR:(t printString).
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopPRNC0
+ ].
+ ].
+ Transcript show:'no context prim ret 0: '; showCR:(t printString).
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopPRSTK0
+ ].
+ ].
+ Transcript show:'stk prim ret 0: '; showCR:(t printString).
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopPRULSTK0
+ ].
+ ].
+ Transcript show:'unl. stk prim ret 0: '; showCR:(t printString).
+
+ "
+ STXBenchmarks2 sendPrim
+
+ Indy 486/50 P5/100
+cache (none) 256k
+ ----------------------------
+std 386 1276 306
+prim 1007 2316 495
+no-stk 346 1151 304
+stk 1007 11602(hit) 3695
+ulstk 3584 7788 1812
+ "
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSTX3.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,592 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSTX3
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+
+!BenchmarkSTX3 class methodsFor:'block speed'!
+
+blockSpeed
+ |a|
+
+ a := 1.
+
+ Transcript showCR:'[1 noop]'.
+ Transcript show:( [1 noop] speed ) printString.
+ Transcript cr.
+
+ Transcript showCR:'[''hello'' , '' world'']'.
+ Transcript show:( ['hello' , ' world'] speed ) printString.
+ Transcript cr.
+
+ Transcript showCR:'[1+1+1+1+1+1+1+1+1+1+1]'.
+ Transcript show:( [1+1+1+1+1+1+1+1+1+1+1] speed ) printString.
+ Transcript cr.
+
+ Transcript showCR:'[1+1]'.
+ Transcript show:( [1+1] speed ) printString.
+ Transcript cr.
+
+ Transcript showCR:'[]'.
+ Transcript show:( [] speed ) printString.
+ Transcript cr.
+
+ Transcript showCR:'[a+a+a+a+a+a+a+a+a+a+a]'.
+ Transcript show:( [a+a+a+a+a+a+a+a+a+a+a] speed ) printString.
+ Transcript cr.
+
+ Transcript showCR:'[a+a]'.
+ Transcript show:( [a+a] speed ) printString.
+ Transcript cr.
+
+ "STXBenchmarks3 blockSpeed"
+! !
+
+!BenchmarkSTX3 class methodsFor:'collection benchmarks'!
+
+collectionBenchmarks
+ ObjectMemory garbageCollect.
+ self ordCollBenchmark.
+ ObjectMemory garbageCollect.
+ self setBenchmark.
+ ObjectMemory garbageCollect.
+ self dictionaryBenchmark.
+ ObjectMemory garbageCollect.
+
+ "STXBenchmarks3 collectionBenchmarks"
+!
+
+collectionBenchmarks2
+ ObjectMemory garbageCollect.
+ self ordCollBenchmark2.
+ ObjectMemory garbageCollect.
+ self setBenchmark2.
+ ObjectMemory garbageCollect.
+ self dictionaryBenchmark2.
+ ObjectMemory garbageCollect.
+
+ "STXBenchmarks3 collectionBenchmarks2"
+ "STXBenchmarks3 setBenchmark2"
+ "STXBenchmarks3 dictionaryBenchmark2"
+ "STXBenchmarks3 orderedCollectionBenchmark2"
+!
+
+dictionaryBenchmark
+ Transcript showCR:'Dictionary:'.
+ Transcript showCR:' 100 ' , (self dictionaryBenchmark:100) printString.
+ Transcript endEntry.
+ Transcript showCR:' 500 ' , (self dictionaryBenchmark:500) printString.
+ Transcript endEntry.
+ Transcript showCR:' 1000 ' , (self dictionaryBenchmark:1000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 5000 ' , (self dictionaryBenchmark:5000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 10000 ' , (self dictionaryBenchmark:10000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 50000 ' , (self dictionaryBenchmark:50000) printString.
+ Transcript endEntry.
+ Transcript showCR:'100000 ' , (self dictionaryBenchmark:100000) printString.
+ Transcript endEntry.
+
+ "STXBenchmarks3 dictionaryBenchmark"
+!
+
+dictionaryBenchmark2
+ Transcript showCR:'preallocated Dictionary:'.
+ Transcript showCR:' 100 ' , (self dictionaryBenchmark2:100) printString.
+ Transcript endEntry.
+ Transcript showCR:' 500 ' , (self dictionaryBenchmark2:500) printString.
+ Transcript endEntry.
+ Transcript showCR:' 1000 ' , (self dictionaryBenchmark2:1000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 5000 ' , (self dictionaryBenchmark2:5000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 10000 ' , (self dictionaryBenchmark2:10000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 50000 ' , (self dictionaryBenchmark2:50000) printString.
+ Transcript endEntry.
+ Transcript showCR:'100000 ' , (self dictionaryBenchmark2:100000) printString.
+ Transcript endEntry.
+
+ "STXBenchmarks3 dictionaryBenchmark2"
+!
+
+dictionaryBenchmark2:n
+ |d|
+
+ d := Dictionary new:n.
+ ^ Time millisecondsToRun:[
+ 1 to:n do:[:i |
+ d at:i put:i
+ ]
+ ]
+!
+
+dictionaryBenchmark:n
+ |d|
+
+ d := Dictionary new.
+ ^ Time millisecondsToRun:[
+ 1 to:n do:[:i |
+ d at:i put:i
+ ]
+ ]
+!
+
+ordCollBenchmark
+ Transcript showCR:'OrderedCollection:'.
+ Transcript showCR:' 100 ' , (self ordCollBenchmark:100) printString.
+ Transcript endEntry.
+ Transcript showCR:' 500 ' , (self ordCollBenchmark:500) printString.
+ Transcript endEntry.
+ Transcript showCR:' 1000 ' , (self ordCollBenchmark:1000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 5000 ' , (self ordCollBenchmark:5000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 10000 ' , (self ordCollBenchmark:10000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 50000 ' , (self ordCollBenchmark:50000) printString.
+ Transcript endEntry.
+ Transcript showCR:'100000 ' , (self ordCollBenchmark:100000) printString
+!
+
+ordCollBenchmark2
+
+ Transcript showCR:'preallocated OrderedCollection:'.
+ Transcript showCR:' 100 ' , (self ordCollBenchmark2:100) printString.
+ Transcript endEntry.
+ Transcript showCR:' 500 ' , (self ordCollBenchmark2:500) printString.
+ Transcript endEntry.
+ Transcript showCR:' 1000 ' , (self ordCollBenchmark2:1000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 5000 ' , (self ordCollBenchmark2:5000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 10000 ' , (self ordCollBenchmark2:10000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 50000 ' , (self ordCollBenchmark2:50000) printString.
+ Transcript endEntry.
+ Transcript showCR:'100000 ' , (self ordCollBenchmark2:100000) printString
+!
+
+ordCollBenchmark2:n
+ |s|
+
+ s := OrderedCollection new:n.
+ ^ Time millisecondsToRun:[
+ 1 to:n do:[:i |
+ s add:i
+ ]
+ ]
+!
+
+ordCollBenchmark:n
+ |s|
+
+ s := OrderedCollection new.
+ ^ Time millisecondsToRun:[
+ 1 to:n do:[:i |
+ s add:i
+ ]
+ ]
+!
+
+setBenchmark
+ Transcript showCR:'Set:'.
+ Transcript showCR:' 100 ' , (self setBenchmark:100) printString.
+ Transcript endEntry.
+ Transcript showCR:' 500 ' , (self setBenchmark:500) printString.
+ Transcript endEntry.
+ Transcript showCR:' 1000 ' , (self setBenchmark:1000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 5000 ' , (self setBenchmark:5000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 10000 ' , (self setBenchmark:10000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 50000 ' , (self setBenchmark:50000) printString.
+ Transcript endEntry.
+ Transcript showCR:'100000 ' , (self setBenchmark:100000) printString
+!
+
+setBenchmark2
+ Transcript showCR:'Preallocated Set:'.
+ Transcript showCR:' 100 ' , (self setBenchmark2:100) printString.
+ Transcript endEntry.
+ Transcript showCR:' 500 ' , (self setBenchmark2:500) printString.
+ Transcript endEntry.
+ Transcript showCR:' 1000 ' , (self setBenchmark2:1000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 5000 ' , (self setBenchmark2:5000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 10000 ' , (self setBenchmark2:10000) printString.
+ Transcript endEntry.
+ Transcript showCR:' 50000 ' , (self setBenchmark2:50000) printString.
+ Transcript endEntry.
+ Transcript showCR:'100000 ' , (self setBenchmark2:100000) printString
+!
+
+setBenchmark2:n
+ |s|
+
+ s := Set new:n.
+ ^ Time millisecondsToRun:[
+ 1 to:n do:[:i |
+ s add:i
+ ]
+ ]
+!
+
+setBenchmark:n
+ |s|
+
+ s := Set new.
+ ^ Time millisecondsToRun:[
+ 1 to:n do:[:i |
+ s add:i
+ ]
+ ]
+! !
+
+!BenchmarkSTX3 class methodsFor:'helpers'!
+
+noop
+ ^ self
+!
+
+noopWith:a1
+ ^ self
+!
+
+noopWith:a1 with:a2
+ ^ self
+!
+
+noopWith:a1 with:a2 with:a3 with:a4 with:a5
+ with:a6 with:a7 with:a8 with:a9 with:a10
+ ^ self
+! !
+
+!BenchmarkSTX3 class methodsFor:'misc benchmarks'!
+
+cachedSend
+ |o t1 t2|
+
+ "loop-time"
+ t1 := Time millisecondsToRun:[
+ 1 to:1000000 do:[:i |
+ i even ifTrue:[
+ o := 1.2. "a float "
+ ] ifFalse:[
+ o := 1.3 "another float "
+ ]
+ ]
+ ].
+ t2 := Time millisecondsToRun:[
+ 1 to:1000000 do:[:i |
+ i even ifTrue:[
+ o := 1.2. "a float "
+ ] ifFalse:[
+ o := 1.3 "another float "
+ ].
+ o initialize. "a cached polymorphic send"
+ ]
+ ].
+ ^ t2 - t1
+
+ "STXBenchmarks3 cachedSend"
+!
+
+countDown
+ |t index|
+
+ t := Time millisecondsToRun:[
+ index := 100000.
+ [index > 0] whileTrue:[
+ index := index - 1
+ ].
+ ].
+ ^ t
+
+ "STXBenchmarks3 countDown"
+!
+
+fib
+ |t|
+
+ t := Time millisecondsToRun:[
+ 30 fib
+ ].
+ ^ t
+
+ "STXBenchmarks3 fib"
+!
+
+polySend
+ |o t1 t2|
+
+ "loop time"
+ t1 := Time millisecondsToRun:[
+ 1 to:1000000 do:[:i |
+ i even ifTrue:[
+ o := 1.2. "a float "
+ ] ifFalse:[
+ o := 1 "an integer "
+ ]
+ ]
+ ].
+ t2 := Time millisecondsToRun:[
+ 1 to:1000000 do:[:i |
+ i even ifTrue:[
+ o := 1.2. "a float "
+ ] ifFalse:[
+ o := 1 "an integer "
+ ].
+ o initialize. "a polymorphic send"
+ ]
+ ].
+ ^ t2 - t1
+
+ "STXBenchmarks3 polySend"
+!
+
+send0
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noop
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 send0"
+!
+
+send1
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopWith:1
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 send1"
+!
+
+send10
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopWith:1 with:2 with:3 with:4 with:5
+ with:6 with:7 with:8 with:9 with:10
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 send10"
+!
+
+send2
+ |t|
+
+ t := Time millisecondsToRun:[
+ 1000000 timesRepeat:[
+ self noopWith:1 with:2
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 send2"
+! !
+
+!BenchmarkSTX3 class methodsFor:'running'!
+
+run
+ Transcript showCR:'running benchmarks ...'.
+ Transcript cr.
+ Transcript endEntry.
+
+ self run1.
+ self run2.
+
+ "STXBenchmarks3 run"
+!
+
+run1
+ self blockSpeed.
+
+ Transcript cr.
+!
+
+run2
+ Transcript showCR:('countDown ', self countDown printString).
+ Transcript endEntry.
+ Transcript showCR:('fib ', self fib printString).
+ Transcript endEntry.
+ Transcript cr.
+
+ Transcript showCR:('send 0-args ', self send0 printString).
+ Transcript endEntry.
+ Transcript showCR:('send 1-args ', self send1 printString).
+ Transcript endEntry.
+ Transcript showCR:('send 2-args ', self send2 printString).
+ Transcript endEntry.
+ Transcript showCR:('send 10-args ', self send10 printString).
+ Transcript endEntry.
+ Transcript showCR:('cached send ', self cachedSend printString).
+ Transcript endEntry.
+ Transcript showCR:('polymorph send ', self polySend printString).
+ Transcript endEntry.
+ Transcript cr.
+
+ Transcript showCR:('atAllPut ', self atAllPut printString).
+ Transcript endEntry.
+ Transcript showCR:('atAllPut2 ', self atAllPut2 printString).
+ Transcript endEntry.
+ Transcript showCR:('sumTo ', self sumTo printString).
+ Transcript endEntry.
+ Transcript showCR:('fastSumTo ', self fastSumTo printString).
+ Transcript endEntry.
+ Transcript showCR:('nestedLoop ', self nestedLoop printString).
+ Transcript endEntry.
+ Transcript showCR:('sumAll ', self sumAll printString).
+ Transcript endEntry.
+ Transcript showCR:('sumAll2 ', self sumAll2 printString).
+ Transcript endEntry.
+ Transcript cr.
+
+ "STXBenchmarks3 run2"
+! !
+
+!BenchmarkSTX3 class methodsFor:'self benchmarks'!
+
+atAllPut
+ |vec t|
+
+ vec := Array new:100000.
+ t := Time millisecondsToRun:[
+ 1 to:100000 do:[:i |
+ vec at:i put:7
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 atAllPut"
+!
+
+atAllPut2
+ |array t|
+
+ array := Array new:100000.
+ t := Time millisecondsToRun:[
+ 1 to:100000 do:[:i |
+ array at:i put:7
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 atAllPut2"
+!
+
+fastSumTo
+ |val i t|
+
+ t := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ val := 0.
+ i := 1.
+ [i <= 10000] whileTrue:[
+ val := val + i.
+ i := i + 1
+ ].
+ ]
+ ].
+
+ ^ t
+
+ "STXBenchmarks3 fastSumTo"
+!
+
+nestedLoop
+ |i t|
+
+ t := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ i := 0.
+ 1 to:100 do:[:l1 |
+ 1 to:100 do:[:l2 |
+ i := i + 1
+ ]
+ ]
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 nestedLoop"
+!
+
+sumAll
+ |vec t s|
+
+ vec := Array new:100000.
+ 1 to:100000 do:[:i |
+ vec at:i put:7
+ ].
+ s := 0.
+ t := Time millisecondsToRun:[
+ 1 to:100000 do:[:i |
+ s := s + (vec at:i)
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 sumAll"
+!
+
+sumAll2
+ |array t s|
+
+ array := Array new:100000.
+ 1 to:100000 do:[:i |
+ array at:i put:7
+ ].
+ s := 0.
+ t := Time millisecondsToRun:[
+ 1 to:100000 do:[:i |
+ s := s + (array at:i)
+ ]
+ ].
+ ^ t
+
+ "STXBenchmarks3 sumAll2"
+!
+
+sumTo
+ |val t|
+
+ t := Time millisecondsToRun:[
+ 100 timesRepeat:[
+ val := 0.
+ 1 to:10000 do:[:i |
+ val := val + i
+ ]
+ ]
+ ].
+
+ ^ t
+ "STXBenchmarks3 sumTo"
+! !
+
+!BenchmarkSTX3 class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSimpleHanoi.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,89 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSimpleHanoi
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSimpleHanoi class methodsFor:'documentation'!
+
+results
+"
+ Transcript showCR:(self new hanoi)
+ 10 timesRepeat:[Transcript showCR:(self new hanoi);endEntry]
+
+ ----------------- JIT ---------------
+
+ Duo2.1Ghz winVista 0.062
+ P6/700 linux-elf;egcs 0.23
+ Celeron/500 linux-elf;egcs 0.325
+ P6/400 linux-elf;egcs 0.4
+ P6/266 winNT;bcc 0.60 (S)
+ Ultra/250 sol2.6;egcs 0.61
+ P6/266 linux-elf;gcc 0.61
+ P6/266 win95;bcc 0.62 (S)
+ alpha/433 osf1;cc 0.66
+ hp b2000 cc 0.74
+ P5/200 win95;bcc 0.86 (N)(S)
+ P5/200 linux-elf;gcc 1.13 (N)
+ P5/150 linux-elf;gcc 1.24
+ P5/133 linux-aout;gcc 1.40
+ P5/120 linux-elf;gcc 1.74 (N2)
+ r4000/150 irix5.3 1.92
+ alpha/233 osf1;cc;taso 4.32 (1)
+ ss10/40 solaris2.5;gcc 4.36
+ alpha/233 osf1;cc 4.72 (1)
+ 486/50 linux-ELF 8.45
+ 68k/33Mhz next3.3 11.03
+ 320H aix3.2.5 12.39
+
+ ----------------- NO JIT ---------------
+
+ P6/400 linux-elf;egcs 7.6
+ P6/266 win95;bcc 12.73 (S)
+ P6/266 linux-elf;pgcc 13.19
+ P5/200 win95;bcc 19.4 (N)
+ P5/200 linux-elf;gcc 19.65 (N)
+ r4000/150 irix5.3 27.0
+ P5/133 linux-aout;gcc 33.16
+ alpha/233 osf1;cc 68.26
+ 486/50 linux-ELF 132.46
+ 320H aix3.2.5 502.46
+
+ Notice:
+ (N) the was executed on a notebook with a poor memory interface and 256k
+ cache. A regular P5/200 is somewhat faster.
+
+ (N2)another notebook with a poor memory interface
+
+ (1) the alpha is running 64 bit code (shuffling around twice as much data)
+ the taso version is also 64bit, bit has its VM loaded into the lower 4Gig.
+
+ (S) no stack overflow checks
+"
+! !
+
+!BenchmarkSimpleHanoi methodsFor:'processing'!
+
+hanoi
+ ^ (Time millisecondsToRun:[
+ self move:22 from:1 to:3 temp:3
+ ]) / 1000.0
+
+ "
+ Transcript showCR:(self new hanoi)
+ "
+
+ "Modified: / 12.11.1997 / 17:07:06 / cg"
+!
+
+move:n from:src to:dst temp:tmp
+ n == 1 ifTrue:[^ self].
+ self move:n-1 from:src to:tmp temp:dst.
+ self move:n-1 from:tmp to:dst temp:src
+
+ "Created: / 12.11.1997 / 17:06:46 / cg"
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSlopstone.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,501 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSlopstone
+ instanceVariableNames:'testParams testBlocks'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSlopstone class methodsFor:'documentation'!
+
+documentation
+"
+ this is a low-level benchmark.
+
+ The results are biased towards a 33Mhz/486, running ParcPlace VisualWorks v1.0.
+ This configuration has a rating of 1 for all tests.
+
+ claus:
+ Since it tests highly optimizable code (adding constants, for example)
+ which can be (and is) easily optimized away, the numbers given are
+ not too valuable to compare different smalltalk systems.
+ (it may be useful, to compare different machines running the same
+ smalltalk, though).
+
+ See also: readme method
+ [author:]
+ Bruce Samuelson
+
+ [start with:]
+ Benchmarks::SlopstoneBenchmark new runBenchmark
+"
+!
+
+readme
+
+"INTRODUCTION
+
+Slopstone: Smalltalk Low level OPeration Stones
+Portable Low Level Benchmarks for ST80 and ST/V (using 16-bit SmallIntegers)
+Placed in public domain January 1993 (c) Bruce Samuelson
+Permission is given to place this in public Smalltalk archives
+
+Use monospaced fonts if possible to view the methods in this class.
+
+(1) Collect garbage if supported (2) do 'SlopstoneBenchmark new runBenchmark'.
+Results are printed in the Transcript window.
+Post results for your machines to comp.lang.smalltalk or
+mail them to bruce@ling.uta.edu or bruce@utafll.uta.edu.
+
+DISCUSSION
+
+This readme method would normally be in the class comment for ST80. ST/V-DOS
+doesn't support class comments.
+
+The benchmarks test strictly low level operations. They do not test higher
+level operations such as forming sets, sorting, or streaming, nor do they test
+applications. They also do not test user interface operations because of the
+non-portability of this area of Smalltalk and its sensitivity to the
+performance of the video subsystem. The tests are cpu bound. They do not
+access files and should not cause disk paging.
+
+The benchmarks use loop counts of 16000 because SmallIntegers cannot exceed
+16383 for ST/V-DOS. 16-bit implementions would perform worse with large loop
+counts. The benchmarks are also suitable for testing 32-bit versions of
+Smalltalk.
+
+DEFINITION OF REFERENCE MACHINE (ONE SLOPSTONE)
+
+The following machine is the one on which I developed these benchmarks. By
+convention it is defined to operate at one slopstone. It's a mid range
+performer for current ParcPlace versions of Smalltalk.
+
+Hardware: Amax 486DX/33 (includes internal floating point processor and
+internal 8K cache), 256K external cache, 16MB RAM.
+
+Software: ParcPlace VisualWorks 1.0, Windows 3.1, DOS 5.0 (plain vanilla
+setup).
+
+COMPARISON TO XEROX DORADO
+
+For reference, the machine runs at 649% of a Dorado on ParcPlace benchmarks
+for ST80 4.1. Its fast video card helps on these PPS benchmarks. I didn't run
+them for VisualWorks 1.0. It would be somewhat slower because there are vastly
+more classes.
+
+SlopstoneBenchmark new runBenchmark
+
+EXAMPLE RESULTS FOR REFERENCE MACHINE
+
+1000s time 1000s of
+itera- sec- iterations slop-
+tions onds per sec stones explanation
+
+3808 0.577 6600 1.0 add integers
+ 544 2.262 240 1.0 add floats
+ 960 1.088 882 1.0 access strings
+ 320 0.908 352 1.0 create objects
+ 160 1.49 107 1.0 copy objects
+ 480 1.129 425 1.0 perform selectors
+ 896 1.237 724 1.0 evaluate blocks
+
+ 640 1.151 555 1.0 harmonic mean"
+!
+
+results
+"
+ Benchmarks::SlopstoneBenchmark new runBenchmark
+ Notice:
+ the addInt, addFloat, perform and block benchmarks
+ are optimized by the system (the JIT) and are therefore
+ too short to be measured reasonably on most systems
+ (time below 10ms)
+
+ P6/400 linux/egcs/elf
+ 3808 0.001 3808000 576.97 add integers
+ 544 0.001 544000 2266.67 add floats
+ 960 0.119 8067 9.14652 access strings
+ 320 0.08 4000 11.3636 create objects
+ 160 0.06 2667 24.9221 copy objects
+ 480 0.001 480000 1129.41 perform selectors
+ 896 0.001 896000 1237.57 create & evaluate blocks
+
+ 640 0.00664 96275 173.513 harmonic mean
+
+ P6/266 linux/gcc/elf
+
+ 3808 0.001 3808000 576.97 add integers
+ 544 0.001 544000 2266.67 add floats
+ 960 0.137 7007 7.94478 access strings
+ 320 0.114 2807 7.97448 create objects
+ 160 0.106 1509 14.1069 copy objects
+ 480 0.001 480000 1129.41 perform selectors
+ 896 0.001 896000 1237.57 create & evaluate blocks
+
+ 640 0.00773 82698 149.043 harmonic mean
+
+ alpha/433 osf1/cc
+ 3808 0.001 3808000 576.97 add integers
+ 544 0.001 544000 2266.67 add floats
+ 960 0.152 6316 7.16076 access strings
+ 320 0.131 2443 6.93963 create objects
+ 160 0.102 1569 14.6601 copy objects
+ 480 0.001 480000 1129.41 perform selectors
+ 896 0.001 896000 1237.57 create & evaluate blocks
+
+ 640 0.00796 80317 144.753 harmonic mean
+
+ Ultra/250 solaris2.6
+ 3808 0.001 3808000 576.97 add integers
+ 544 0.001 544000 2266.67 add floats
+ 960 0.154 6234 7.06776 access strings
+ 320 0.17 1882 5.34759 create objects
+ 160 0.113 1416 13.233 copy objects
+ 480 0.001 480000 1129.41 perform selectors
+ 896 0.001 896000 1237.57 create & evaluate blocks
+
+ 640 0.0084 76116 137.181 harmonic mean
+
+ P5/200 linux/gcc/elf (slow memory interface - notebook)
+
+ 3808 0.001 3808000 576.97 add integers
+ 544 0.001 544000 2266.67 add floats
+ 960 0.315 3048 3.45535 access strings
+ 320 0.277 1155 3.28192 create objects
+ 160 0.206 777 7.25887 copy objects
+ 480 0.002 240000 564.706 perform selectors
+ 896 0.001 896000 1237.57 create & evaluate blocks
+
+ 640 0.0120056 53276 96.0165 harmonic mean
+
+ P5/133 linux/gcc/a.out
+ 3808 0.002 1904000 288.485 add integers
+ 544 0.002 272000 1133.33 add floats
+ 960 0.36 2667 3.02343 access strings
+ 320 0.293 1092 3.1027 create objects
+ 160 0.241 664 6.20468 copy objects
+ 480 0.002 240000 564.706 perform selectors
+ 896 0.001 896000 1237.57 create & evaluate blocks
+
+ 640 0.0153779 41593 74.9606 harmonic mean
+
+ alpha/233 osf1/cc
+
+ 3808 0.001 3808000 576.97 add integers
+ 544 0.001 544000 2266.67 add floats
+ 960 0.57 1684 1.90954 access strings
+ 320 0.979 327 0.928591 create objects
+ 160 0.71 225 2.10609 copy objects
+ 480 0.001 480000 1129.41 perform selectors
+ 896 0.001 896000 1237.57 create & evaluate blocks
+
+ 640 0.0169151 37813 68.1485 harmonic mean
+
+ ss10/40 solaris 2.5
+ 3808 0.006 634667 96.1616 add integers
+ 544 0.005 108800 453.333 add floats
+ 320 0.918 349 0.990295 create objects
+ 160 0.694 231 2.15465 copy objects
+ 480 0.006 80000 188.235 perform selectors
+ 896 0.005 179200 247.514 create & evaluate blocks
+
+ 640 0.0480143 13321 24.0082 harmonic mean
+
+"
+
+! !
+
+!BenchmarkSlopstone methodsFor:'benchmarking'!
+
+execute
+
+| n nTests iters times speeds stones scale printA printB printC param
+count speed0 expln block time iter speed stone harMean hm power |
+
+Transcript cr; cr; show: 'Starting benchmarks...'.
+
+n := 16000. "Number of times each test block will be evaluated."
+n > 16383 ifTrue: [self halt: 'Count exceeded max small int for ST/V-DOS.'].
+nTests := testParams size.
+nTests = testBlocks size ifFalse: [self halt: 'Inconsistent test count.'].
+
+iters := OrderedCollection new.
+times := OrderedCollection new.
+speeds := OrderedCollection new.
+stones := OrderedCollection new.
+scale := 1000. "So iterations can be reported as 1000s of iterations"
+
+"The following blocks are restricted to two args by ST/V-DOS."
+
+printA :=
+ [:iter1 :time1 |
+ Transcript cr.
+ Transcript nextPutAll: (iter1 / scale) rounded printString.
+ Transcript nextPutAll: ' '.
+ Transcript nextPutAll: time1 printString.
+ Transcript nextPutAll: ' '].
+printB :=
+ [:speed1 :slop1 |
+ Transcript nextPutAll: (speed1 / scale) rounded printString.
+ Transcript nextPutAll: ' '.
+ Transcript nextPutAll: slop1 printString.
+ Transcript nextPutAll: ' '].
+printC :=
+ [:expln1 |
+ Transcript show: expln1].
+
+Transcript show: '
+
+1000s time 1000s of
+itera- sec- iterations slop-
+tions onds per sec stones explanation
+'.
+
+1 to: nTests do:
+ [:i |
+ param := testParams at: i.
+ count := param at: 1. "repetitions of a test inside its block"
+ speed0 := (param at: 2) * scale. "iters/sec for a one-slopstone machine"
+ expln := param at: 3.
+ block := testBlocks at: i.
+ time := Time millisecondsToRun: [n timesRepeat: block].
+ time := (time max: 1) / 1000.0. "time is now in seconds"
+ iter := count * n.
+ speed := iter / time.
+ stone := speed / speed0.
+ iters add: iter.
+ times add: time.
+ speeds add: speed.
+ stones add: stone.
+ printA value: iter value: time.
+ printB value: speed value: stone.
+ printC value: expln.].
+
+harMean :=
+ [:numbers |
+ hm := 1.
+ power := 1 / nTests.
+ numbers do: [:number | hm := hm * (number raisedTo: power)].
+ hm].
+Transcript cr.
+printA value: (harMean value: iters) value: (harMean value: times).
+printB value: (harMean value: speeds) value: (harMean value: stones).
+printC value: 'harmonic mean'.
+
+Transcript cr; cr; show: 'Benchmarks complete.'; cr
+!
+
+extendedSetup
+ self setup.
+
+ testParams
+ add: #(238 6600 'add integer vars *');
+ add: #( 34 240 'add float vars *');
+ add: #( 56 724 'create blocks *');
+ add: #( 56 724 'evaluate blocks *');
+ add: #( 56 724 'create self blocks *');
+ add: #( 56 724 'evaluate self blocks *');
+ add: #( 56 724 'create & evaluate self blocks *');
+ add: #( 56 724 'create full blocks *');
+ add: #( 56 724 'evaluate full blocks *');
+ add: #( 56 724 'create & evaluate full blocks *');
+ yourself.
+ self setup4
+!
+
+runBenchmark
+ "SlopstoneBenchmark new runBenchmark"
+
+ self setup.
+ self execute
+!
+
+runBenchmark2
+ "SlopstoneBenchmark new runBenchmark2"
+
+ self extendedSetup.
+ self execute
+!
+
+setup
+ self setup1.
+ self setup2.
+ self setup3.
+!
+
+setup1
+"Numbers in testParams represent the following:
+
+Column 1 number of internal repetitions for each test inside its block
+Column 2 thousands of iterations per second for a one-slopstone machine."
+
+testParams := OrderedCollection new.
+
+testParams
+ add: #(238 6600 'add integers');
+ add: #( 34 240 'add floats');
+ add: #( 60 882 'access strings');
+ add: #( 20 352 'create objects');
+ add: #( 10 107 'copy objects');
+ add: #( 30 425 'perform selectors');
+ add: #( 56 724 'create & evaluate blocks');
+ yourself.
+
+testBlocks := OrderedCollection new.
+
+"In the integer addition test, I originally had 340 internal repetitions.
+This caused the Digitalk compiler to blow up. The ParcPlace compiler compiled
+it ok but interestingly addition performed at slightly more than 50% of the
+performance with an internal count of 238. Perhaps something magical happens
+at 256."
+!
+
+setup2
+testBlocks
+ add: [1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1];
+
+ add: [1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+
+ 1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0]
+!
+
+setup3
+testBlocks
+ add: ['a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+ 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1];
+
+ add: [Object new. Object new. Object new. Object new. Object new.
+ Object new. Object new. Object new. Object new. Object new.
+ Object new. Object new. Object new. Object new. Object new.
+ Object new. Object new. Object new. Object new. Object new];
+
+ add: [Object new copy copy copy copy copy copy copy copy copy copy];
+
+ add: [0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+ 0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself];
+
+ add: [[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+ [] value. [] value. [] value. [] value. [] value. [] value. [] value.
+ [] value. [] value. [] value. [] value. [] value. [] value. [] value.
+ [] value. [] value. [] value. [] value. [] value. [] value. [] value.
+ [] value. [] value. [] value. [] value. [] value. [] value. [] value.
+ [] value. [] value. [] value. [] value. [] value. [] value. [] value.
+ [] value. [] value. [] value. [] value. [] value. [] value. [] value.
+ [] value. [] value. [] value. [] value. [] value. [] value. [] value]
+!
+
+setup4
+ |b v|
+
+testBlocks
+ add: [b := 1.
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b];
+
+ add: [b := 1.0.
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+ b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b];
+
+ add: [[]. []. [] . [] . [] . [] . [] .
+ [] . [] . [] . [] . [] . [] . [] .
+ [] . [] . [] . [] . [] . [] . [] .
+ [] . [] . [] . [] . [] . [] . [] .
+ [] . [] . [] . [] . [] . [] . [] .
+ [] . [] . [] . [] . [] . [] . [] .
+ [] . [] . [] . [] . [] . [] . [] .
+ [] . [] . [] . [] . [] . [] . [] ];
+
+ add: [b := [].
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value];
+
+ add: [[self]. [self]. [self] . [self] . [self] . [self] . [self] .
+ [self] . [self] . [self] . [self] . [self] . [self] . [self] .
+ [self] . [self] . [self] . [self] . [self] . [self] . [self] .
+ [self] . [self] . [self] . [self] . [self] . [self] . [self] .
+ [self] . [self] . [self] . [self] . [self] . [self] . [self] .
+ [self] . [self] . [self] . [self] . [self] . [self] . [self] .
+ [self] . [self] . [self] . [self] . [self] . [self] . [self] .
+ [self] . [self] . [self] . [self] . [self] . [self] . [self] ];
+
+ add: [b := [self].
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value];
+
+ add: [[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+ [self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+ [self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+ [self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+ [self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+ [self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+ [self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+ [self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value];
+
+ add: [[ v := 0]. [v := 0]. [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+ [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+ [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+ [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+ [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+ [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+ [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+ [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] ];
+
+ add: [b := [v := 0].
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value.
+ b value. b value. b value. b value. b value. b value. b value];
+
+ add: [[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+ [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+ [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+ [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+ [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+ [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+ [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+ [v := 0] value. [self] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value]
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSmopstone.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,628 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSmopstone
+ instanceVariableNames:'testParams testBlocks'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSmopstone class methodsFor:'documentation'!
+
+documentation
+"
+ this is a medium-level benchmark.
+
+ The results are biased towards a 33Mhz/486, running ParcPlace VisualWorks v.4.0.
+ This configuration has a rating of 1 for all tests.
+
+ See also: readme method
+
+ [Notice:]
+ the sorcererBenchmark times are not directly comparable
+ between ST/X and other ST systems, since ST/X has to create
+ a new Point instance for every access to a rectangles origin
+ or corner (see implementation of Rectangle);
+ Therefore, that benchmarks time is higher in ST/X.
+
+ [author:]
+ Bruce Samuelson
+
+ [start with:]
+ Benchmarks::SmopstoneBenchmark new runBenchmark
+ Benchmarks::SmopstoneBenchmark new runBenchmark2
+"
+!
+
+readme
+
+"INTRODUCTION
+
+Smopstone: Smalltalk Medium level OPeration Stones
+Portable Medium level Benchmarks for ST80 and ST/V (using 16-bit SmallInts)
+Placed in public domain January 1993 (c) Bruce Samuelson
+Permission is given to place this in public Smalltalk archives
+
+Use monospaced fonts if possible to view the methods in this class.
+
+(1) Collect garbage if supported (2) do 'SmopstoneBenchmark new runBenchmark'.
+Results are printed in the Transcript window.
+Post results for your machines to comp.lang.smalltalk or
+mail them to bruce@ling.uta.edu or bruce@utafll.uta.edu.
+
+DISCUSSION
+
+This readme method would normally be in the class comment for ST80. ST/V-DOS
+doesn't support class comments.
+
+These benchmarks are a companion to the SlopstoneBenchmark class posted to
+comp.lang.smalltalk this month. Slopstones tested low level operations.
+
+Smopstones test medium level operations that exercise recursive block and
+method calls, collection building and enumeration, streaming, and sorting. The
+lower level operations contained in them exercise arithmetic (mostly integer,
+with some fractions and floats) string manipulation, and low level streaming.
+
+The benchmarks do not test applications. They also do not test user interface
+performance because of the non-portability of this area of Smalltalk and its
+sensitivity to the speed of the video subsystem. The tests are cpu bound. They
+do not access files and should not cause disk paging.
+
+The main weaknesses of the benchmarks are (1) they are not high enough level
+to test actual applications, and (2) they concentrate in too few areas of
+Smalltalk, omitting many of the diverse capabilities of its class library. My
+excuse is that one can only devote limited time writing public domain
+benchmarks.
+
+The tests avoid generating integers larger than 16383, the maximum
+SmallInteger in ST/V-DOS. 16-bit implementions would perform worse with larger
+integers. The benchmarks are also suitable for testing 32-bit versions of
+Smalltalk. They try to avoid other pitfalls that would skew the results such
+as the lack of an adequate hash function for a class. Someone warned of this
+in comp.lang.smalltalk (I forget who).
+
+DEFINITION OF REFERENCE MACHINE (ONE SMOPSTONE)
+
+The following machine is the one on which I developed these benchmarks. By
+convention it is defined to operate at one smopstone. It's a mid range
+performer for current ParcPlace versions of Smalltalk.
+
+Hardware: Amax 486DX/33 (includes internal floating point processor and
+internal 8K cache), 256K external cache, 16MB RAM.
+
+Software: ParcPlace VisualWorks 1.0, Windows 3.1, DOS 5.0 (plain vanilla
+setup).
+
+COMPARISON TO XEROX DORADO
+
+For reference, the machine runs at 649% of a Dorado on ParcPlace benchmarks
+for ST80 4.1. Its fast video card helps on these PPS benchmarks. I didn't run
+them for VisualWorks 1.0. It would be somewhat slower because there are vastly
+more classes.
+
+EXAMPLE RESULTS FOR REFERENCE MACHINE
+
+time in smop-
+seconds stones explanation
+
+
+3.157 1.0 generating fractonaccis
+1.123 1.0 generating primes
+1.091 1.0 generating and parsing streams
+3.091 1.0 generating strings
+1.167 1.0 forming sets
+5.139 1.0 sorting strings
+5.601 1.0 sorcerer's apprentice
+
+2.355 1.0 harmonic mean"
+!
+
+results
+"
+ Benchmarks::SmopstoneBenchmark new runBenchmark
+
+ P6/400 linux/egcs/elf
+
+ 0.069 45.7536 generating fractonaccis
+ 0.032 35.0938 generating primes
+ 0.044 24.7955 generating and parsing streams
+ 0.009 343.444 generating strings
+ 0.016 72.9375 forming sets
+ 0.091 56.4725 sorting strings
+ 0.419 13.3675 sorcerer's apprentice
+
+ 0.047 49.7365 harmonic mean
+
+
+ alpha/433 osf1
+ 0.103 30.6505 generating fractonaccis
+ 0.047 23.8936 generating primes
+ 0.036 30.3056 generating and parsing streams
+ 0.024 128.792 generating strings
+ 0.029 40.2414 forming sets
+ 0.166 30.9578 sorting strings
+ 0.226 24.7832 sorcerer's apprentice
+
+ 0.064 36.6164 harmonic mean
+
+
+ P6/266 linux/gcc/elf
+ 0.117 26.9829 generating fractonaccis
+ 0.048 23.3958 generating primes
+ 0.051 21.3922 generating and parsing streams
+ 0.045 68.6889 generating strings
+ 0.016 72.9375 forming sets
+ 0.16 32.1187 sorting strings
+ 0.721 7.76838 sorcerer's apprentice
+
+ 0.08145 28.9107 harmonic mean
+
+
+ Ultra/250 solaris2.6
+ 0.15 21.0467 generating fractonaccis
+ 0.056 20.0536 generating primes
+ 0.062 17.5968 generating and parsing streams
+ 0.036 85.8611 generating strings
+ 0.026 44.8846 forming sets
+ 0.204 25.1912 sorting strings
+ 0.635 8.82047 sorcerer's apprentice
+
+ 0.09364 25.1473 harmonic mean
+
+
+ P5/200 linux/gcc/elf (slow notebook nemory interface)
+ 0.21 15.0333 generating fractonaccis
+ 0.079 14.2152 generating primes
+ 0.112 9.74107 generating and parsing streams
+ 0.08 38.6375 generating strings
+ 0.031 37.6452 forming sets
+ 0.23 22.3435 sorting strings
+ 1.72 3.2564 sorcerer's apprentice
+
+ 0.151395 15.5546 harmonic mean
+
+
+ P5/133 linux/gcc/a.out
+ 0.328 9.625 generating fractonaccis
+ 0.103 10.9029 generating primes
+ 0.134 8.14179 generating and parsing streams
+ 0.09 34.3444 generating strings
+ 0.067 17.4179 forming sets
+ 0.306 16.7941 sorting strings
+ 2.022 2.77003 sorcerer's apprentice
+
+ 0.208082 11.3171 harmonic mean
+
+
+ ss10/40 solaris 2.5
+ 0.862 3.66241 generating fractonaccis
+ 0.362 3.10221 generating primes
+ 0.226 13.677 generating strings
+ 0.144 8.10417 forming sets
+ 1.188 4.32576 sorting strings
+ 4.325 1.29503 sorcerer's apprentice
+
+ 0.567877 4.14683 harmonic mean
+
+
+ alpha/233 osf1
+ 1.251 2.52358 generating fractonaccis
+ 0.563 1.99467 generating primes
+ 0.513 2.12671 generating and parsing streams
+ 0.281 4.15302 forming sets
+ 1.265 4.06245 sorting strings
+ 2.938 1.9064 sorcerer's apprentice
+
+ 0.775739 3.03567 harmonic mean
+"
+! !
+
+!BenchmarkSmopstone methodsFor:'benchmarking'!
+
+execute
+
+| n nTests times stones printA printC param
+time0 expln block time stone harMean hm power |
+
+n := 1. "Each test is repeated this many times. The smopstone times in
+ the test parameters are normalized to a value of one. You may
+ set it to a higher number if your machine is really blazing."
+
+Transcript cr; cr; show: 'Starting benchmarks with repetition count = '
+ , n printString , '...'.
+
+nTests := testParams size.
+nTests = testBlocks size ifFalse: [self halt: 'Inconsistent test count.'].
+
+times := OrderedCollection new.
+stones := OrderedCollection new.
+
+"The following blocks are restricted to two args by ST/V-DOS."
+
+printA :=
+ [:time1 :smop1 |
+ Transcript cr.
+ Transcript nextPutAll: time1 printString.
+ Transcript nextPutAll: ' '.
+ Transcript nextPutAll: smop1 printString.
+ Transcript nextPutAll: ' '].
+printC :=
+ [:expln1 |
+ Transcript show: expln1].
+
+Transcript show: '
+
+time in smop-
+seconds stones explanation
+'.
+
+1 to: nTests do:
+ [:i |
+ param := testParams at: i.
+ time0 := param at: 1. "seconds for one-smopstone machine"
+ expln := param at: 2.
+ block := testBlocks at: i.
+ time := Time millisecondsToRun: [n timesRepeat: block].
+ time := (time max: 1) / 1000.0. "time is now in seconds"
+ stone := n * time0 / time.
+ times add: time.
+ stones add: stone.
+ printA value: time value: stone.
+ printC value: expln.].
+
+harMean :=
+ [:numbers |
+ hm := 1.
+ power := 1 / nTests.
+ numbers do: [:number | hm := hm * (number raisedTo: power)].
+ hm].
+Transcript cr.
+printA value: (harMean value: times) value: (harMean value: stones).
+printC value: 'harmonic mean'.
+
+Transcript cr; cr; show: 'Benchmarks complete.'; cr
+!
+
+fractonacci: n
+ "Return something like the fibonacci function of n but
+ using fractional numbers rather than whole ones. The
+ reason for this variation is to run long enough to get
+ a decent time measurement without exceeding 16383, the
+ limit of small integers for ST/V-DOS. Choosing n = 13/2
+ takes enough time and computes to 13581.
+
+ Fibonacci uses n-1 and n-2 instead of n-(1/2) and n-(1/3).
+ However, I couldn't get it to run in the above constraints.
+
+ This benchmark tests the efficiency of recursively calling
+ a method that does a little fractional arithmetic internally."
+
+ n > 1
+ ifTrue: [^(self fractonacci: n - (1/2)) + (self fractonacci: n - (1/3))]
+ ifFalse: [^1]
+!
+
+primesUpTo: n
+ "Return the prime numbers between 1 and n.
+
+ This method tests the efficiency of recursively calling a block
+ that does some collection enumeration based on integer arithmetic."
+
+ | nSqrt lowPrimes highPrimes genNext first |
+ n < 5 | (n > 16363) ifTrue: [self halt: 'Upper limit out of range.'].
+ nSqrt := n sqrt rounded.
+ lowPrimes := OrderedCollection with: 2.
+ highPrimes := 5 to: n by: 2.
+ genNext :=
+ [:nextPrime |
+ lowPrimes add: nextPrime.
+ highPrimes := highPrimes select: [:k | k \\ nextPrime ~= 0].
+ first := highPrimes first.
+ first <= nSqrt ifTrue: [genNext value: first]].
+ genNext value: 3.
+ ^lowPrimes , highPrimes
+!
+
+runBenchmark
+ "SmopstoneBenchmark new runBenchmark"
+
+ self setup.
+ self execute
+!
+
+runBenchmark2
+ "SmopstoneBenchmark new runBenchmark2"
+
+ self setup2.
+ self execute
+
+ "Created: 11.6.1997 / 17:40:10 / cg"
+!
+
+setFrom: collection
+ "Form a set from collection and return it.
+
+ This method tests the efficiency of building a fairly large set
+ from strings. It indirectly tests the effectiveness of the string
+ hash function. Strings are used often enough as dictionary keys
+ that this may be worth including in the benchmark suite. ST/V-DOS
+ has a primitive hash for strings, and ST80 has an elaborate one
+ written in Smalltalk."
+
+ ^collection asSet
+!
+
+setup
+ "Numbers in testParams represent the approximate number of seconds it
+ takes to run the tests for a one-smopstone machine.
+
+ Numbers in testBlocks are parameters tuned for each test. Do not
+ change them. The times for several tests depend on them non-linearly."
+
+ | primes strings set |
+
+ testParams := OrderedCollection new.
+
+ testParams
+ add: #(3.157 'generating fractonaccis');
+ add: #(1.123 'generating primes');
+ add: #(1.091 'generating and parsing streams');
+ add: #(3.091 'generating strings');
+ add: #(1.167 'forming sets');
+ add: #(5.139 'sorting strings');
+ add: #(5.601 'sorcerer''s apprentice').
+
+ testBlocks := OrderedCollection new.
+
+ testBlocks
+ add: [self fractonacci: 13/2];
+ add: [primes := self primesUpTo: 9000];
+ add: [self streamTestsOn: primes];
+ add: [strings := self stringsUpTo: 8000];
+ add: [set := self setFrom: strings];
+ add: [self sort: set];
+ add: [self sorcerersApprentice]
+!
+
+setup2
+ "claus:
+ just to show the difference ...
+ (read documentations [Notice] section)"
+
+ | primes strings set |
+
+ testParams := OrderedCollection new.
+
+ testParams
+ add: #(3.157 'generating fractonaccis');
+ add: #(1.123 'generating primes');
+ add: #(1.091 'generating and parsing streams');
+ add: #(3.091 'generating strings');
+ add: #(1.167 'forming sets');
+ add: #(5.139 'sorting strings');
+ add: #(5.601 'sorcerer''s apprentice').
+
+ testBlocks := OrderedCollection new.
+
+ testBlocks
+ add: [self fractonacci: 13/2];
+ add: [primes := self primesUpTo: 9000];
+ add: [self streamTestsOn: primes];
+ add: [strings := self stringsUpTo: 8000];
+ add: [set := self setFrom: strings];
+ add: [self sort: set];
+ add: [self sorcerersApprentice2]
+
+ "Created: 11.6.1997 / 17:40:03 / cg"
+!
+
+sorcerersApprentice
+
+" FORMATTED FOR MONOSPACED FONT
+
+ Perform various operations on rectangles.
+
+ This method tests the efficiency of recursively calling a block that
+ includes lots of integer arithmetic, collection building, and collection
+ enumeration. The method:
+
+ (1) Creates a collection of pseudo random rectangles
+ (2) Forms a new collection of all their intersections
+ (3) Recursively continues until there are no more intersections
+ (4) Returns a collection with the counts of rectangles in each generation.
+
+ Because the intersections are forming progressively smaller rectangles
+ (we exclude intersections of a rectangle with itself), the algorithm will
+ eventually converge. Depending on the choice of numeric parameters, it may
+ converge very quickly or very slowly. The parameters used below make it
+ converge in a reasonable amount of time (a few seconds on a one-smopstone
+ machine). It took some experimentation with different combinations to
+ achieve this.
+
+ The pseudo random number generator isn't very good, but it's adequate
+ for this benchmark.
+
+ One could write an algorithm that would converge much more quickly and in
+ a more predictable amount of time by sorting the intermediate rectangles
+ in two dimensions and not bothering to test for intersections those
+ rectangles that are contained in mutually exclusive regions. We have
+ chosen algorithmic simplicity over performance optimization. We simply
+ perform intersections of each rectangle with every possible partner in
+ each generation. The time consumed is quadratic in the number of rectangles.
+
+ The algorithm originally stored rectangles in sets to eliminate duplicates.
+ Unfortunately, ST/V-DOS uses the hash function inherited from Object for
+ Rectangle, which will allow duplicates to be stored. So we were forced to
+ store rectangles in ordered collections and eliminate duplicates by brute
+ force. The brutality was heightened because we could not use the test
+ collection>>includes: to decide whether to add a rectangle to the ordered
+ collections, since ST/V-DOS does not define equality (=) for rectangles
+ either. The remaining warts in the code are not worth explaining.
+
+ In an actual application, these shortcomings of ST/V-DOS would have been
+ overcome by adding subclasses and methods rather than writing kludgy code."
+
+ | m n firstGen intersection isIncluded counts r random
+ a b c d e f g h generate nextGen |
+ m := 80.
+ n := 20 * m.
+ firstGen := OrderedCollection new.
+ counts := OrderedCollection new.
+ r := 50.
+ random := [r := r + 1 * 87 \\ n].
+ m timesRepeat: [
+ a := random value.
+ b := random value.
+ c := random value.
+ d := random value.
+ e := a min: b.
+ f := c min: d.
+ g := a max: b.
+ h := c max: d.
+ firstGen add: (Rectangle origin: e @ f corner: g @ h)].
+ generate :=
+ [:lastGen |
+ counts add: lastGen size.
+ nextGen := OrderedCollection new.
+ lastGen do:
+ [:r1 |
+ lastGen do:
+ [:r2 |
+ (r1 origin ~= r2 origin and: [r1 corner ~= r2 corner])
+ "In ST80 this test would have simply been r1 ~= r2"
+ ifTrue:
+ [(r1 intersects: r2)
+ ifTrue:
+ [intersection := r1 intersect: r2.
+ isIncluded := false. "All these lines"
+ nextGen do: "would have been"
+ [:rec | "avoided if we"
+ (rec origin = intersection origin and: "could have used"
+ [rec corner = intersection corner]) "a set for"
+ ifTrue: [isIncluded := true]]. "nextGen. See"
+ isIncluded "explanation"
+ ifFalse: "above."
+ [nextGen size > 500
+ ifTrue: [self halt: 'Converges too slowly.']
+ ifFalse: [nextGen add: intersection]]]]]].
+ nextGen size > 0 ifTrue: [generate value: nextGen]].
+ generate value: firstGen.
+ ^counts
+!
+
+sorcerersApprentice2
+
+"
+ claus: just to show the difference ...
+ (read the comment about rectangle internals in
+ the documentations [Notice] section)
+
+"
+
+ | m n firstGen intersection isIncluded counts r random
+ a b c d e f g h generate nextGen |
+ m := 80.
+ n := 20 * m.
+ firstGen := OrderedCollection new.
+ counts := OrderedCollection new.
+ r := 50.
+ random := [r := r + 1 * 87 \\ n].
+ m timesRepeat: [
+ a := random value.
+ b := random value.
+ c := random value.
+ d := random value.
+ e := a min: b.
+ f := c min: d.
+ g := a max: b.
+ h := c max: d.
+ firstGen add: (Rectangle origin: e @ f corner: g @ h)].
+ generate :=
+ [:lastGen |
+ counts add: lastGen size.
+ nextGen := OrderedCollection new.
+ lastGen do:
+ [:r1 |
+ lastGen do:
+ [:r2 |
+ (r1 ~= r2)
+ "In ST80 this test would have simply been r1 ~= r2"
+ ifTrue:
+ [(r1 intersects: r2)
+ ifTrue:
+ [intersection := r1 intersect: r2.
+ isIncluded := false. "All these lines"
+ nextGen do: "would have been"
+ [:rec | "avoided if we"
+ (rec = intersection) "a set for"
+ ifTrue: [isIncluded := true]]. "nextGen. See"
+ isIncluded "explanation"
+ ifFalse: "above."
+ [nextGen size > 500
+ ifTrue: [self halt: 'Converges too slowly.']
+ ifFalse: [nextGen add: intersection]]]]]].
+ nextGen size > 0 ifTrue: [generate value: nextGen]].
+ generate value: firstGen.
+ ^counts
+
+ "Created: 11.6.1997 / 17:38:34 / cg"
+ "Modified: 11.6.1997 / 17:39:24 / cg"
+!
+
+sort: collection
+ "Form a sorted collection from collection and return it.
+
+ This method tests the efficiency of sorting a fairly large
+ collection of strings. It indirectly measures the efficiency
+ of the sorting algorithm and of string comparison operations."
+
+ ^collection asSortedCollection
+!
+
+streamTestsOn: integers
+ "Test steaming operations on the collection of integers.
+
+ This method measures the efficiency of integer-to-float conversion, of
+ printing numbers to a write stream, of parsing tokens in a read stream,
+ and of converting the tokens from strings to numbers. The technique for
+ converting tokens into floats is constrained by portability between
+ ST80 and ST/V.
+
+ To validate the logic, the original integers are compared with the final
+ floats. There should be no roundoff errors."
+
+ | space s floats float string |
+ space := Character value: 32. "Can't use Character space in ST/V-DOS"
+ s := ReadWriteStream on: String new.
+ integers do: [:i | i asFloat printOn: s. s space].
+ "Now make sure the underlying string size is < 16383, a 16-bit small int."
+ s contents size > 8191 ifTrue: [self halt: 'String too big.'].
+ s reset.
+ floats := OrderedCollection new: integers size.
+ [s atEnd] whileFalse:
+ [float := 0.
+ string := s upTo: $..
+"/ s upTo: space.
+ s skipThrough:space.
+ "In the following, digitValue is portable between ST80 and ST/V-DOS."
+ string do: [:char | float := float * 10.0 + char digitValue].
+ floats add: float].
+ integers = floats ifFalse: [self halt: 'Numbers do not compare.']
+!
+
+stringsUpTo: n
+ "Return a collection of strings representing the integers from 1
+ to n with their digits reversed.
+
+ This method tests the efficiency of creating small streams, performing
+ string operations, and building collections. It includes a gross kludge
+ to coerce portability between ST80 and ST/V. They vary slightly in the
+ selector used to reverse collections."
+
+ | selector |
+ (Array with: #reverse with: #reversed) do:
+ [:symbol |
+ (String canUnderstand: symbol) ifTrue: [selector := symbol]].
+ ^(1 to: n) collect: [:m | m printString perform: selector]
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSortedCollectionLike.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,138 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+BenchmarkCollection subclass:#BenchmarkSortedCollectionLike
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSortedCollectionLike class methodsFor:'sorted collections'!
+
+test_Btree
+ |coll sc randomNumbers|
+
+ randomNumbers := (1 to:1000) collect:[:i |Random nextInteger].
+
+ sc := SortedCollection new.
+ sc addAll:randomNumbers.
+
+ coll := BinaryTree new.
+ coll addAll:randomNumbers.
+
+ randomNumbers do:[:each |
+"/ Transcript showCR:'-----------'.
+"/ Transcript showCR:(coll instVarNamed:'treeRoot').
+"/ Transcript showCR:each.
+ coll remove:each.
+ sc remove:each.
+ self assert:(sc asOrderedCollection = coll asOrderedCollection).
+ ].
+! !
+
+!BenchmarkSortedCollectionLike methodsFor:'benchmarks'!
+
+benchmarkOrderedAscAddEnBloque
+ <benchmark: 'Insert ordered (asc) data individually'>
+
+ collection := collectionClass new.
+ collection addAll: (1 to: collectionDatasetSize)
+
+ "Created: / 09-03-2014 / 10:23:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedAscAddIndividually
+ <benchmark: 'Insert ordered (asc) data individually'>
+
+ collection := collectionClass new.
+ 1 to: collectionDatasetSize do:[:each | collection add:each]
+
+ "Created: / 09-03-2014 / 10:20:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedAscRemoveIndividually
+ <benchmark: 'Remove ordered (asc) data individually'>
+ <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedAsc)>
+
+ collectionDataset1OrderedAsc do:[:each | collection remove:each]
+
+ "Created: / 09-03-2014 / 10:32:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 09-03-2014 / 23:45:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescAddEnBloque
+ <benchmark: 'Insert ordered (desc) data en-bloque'>
+
+ collection := collectionClass new.
+ collection addAll: (collectionDatasetSize downTo: 1)
+
+ "Created: / 09-03-2014 / 10:24:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescAddIndividually
+ <benchmark: 'Insert ordered (desc) data individually'>
+
+ collection := collectionClass new.
+ collectionDatasetSize downTo: 1 do:[:each | collection add:each]
+
+ "Created: / 09-03-2014 / 10:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescRemoveIndividually
+ <benchmark: 'Remove ordered (desc) data individually'>
+ <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedDesc)>
+
+ collectionDataset1OrderedDesc do:[:each | collection remove:each]
+
+ "Created: / 09-03-2014 / 10:32:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 09-03-2014 / 23:44:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomAddEnBloque
+ <benchmark: 'Insert random data en-bloque'>
+
+ collection := collectionClass new.
+ collection addAll:collectionDataset1
+
+ "Created: / 09-03-2014 / 10:18:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-03-2014 / 11:31:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomAddIndividually
+ <benchmark: 'Insert random data individually'>
+
+ collection := collectionClass new.
+ collectionDataset1 do:[:each | collection add:each]
+
+ "Created: / 09-03-2014 / 10:17:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomRemoveIndividually
+ <benchmark: 'Remove random data individually'>
+ <setup: #setUpCollectionDataset1>
+
+ collectionDataset1 do:[:each | collection remove:each]
+
+ "Created: / 09-03-2014 / 10:30:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 09-03-2014 / 23:45:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkSortedCollectionLike methodsFor:'parameters'!
+
+collectionClassName:aSymbol
+ <parameter: 'Collection class name to benchmark' type: #Symbol values: #(SortedCollection AATree BinaryTree)>
+
+ super collectionClassName:aSymbol
+
+ "Modified (format): / 09-03-2014 / 11:07:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkSortedCollectionLike methodsFor:'setup'!
+
+setUpCollectionDataset1
+ collection := collectionClass new.
+ collection addAll: collectionDataset1
+
+ "Created: / 09-03-2014 / 10:26:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSpeedTester.st Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,606 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+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"
+! !
+
--- a/s/benchmarks/stx/Make.proto Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/Make.proto Mon Mar 10 11:40:06 2014 +0000
@@ -82,7 +82,7 @@
# run default testsuite for this package
test: $(TOP)/goodies/builder/reports
- $(MAKE) -C $(TOP)/goodies/builder/reports
+ $(MAKE) -C $(TOP)/goodies/builder/reports -f Makefile.init
$(TOP)/goodies/builder/reports/report-runner.sh -D . -r Builder::TestReport -p $(PACKAGE)
@@ -121,8 +121,18 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)BenchmarkStXMicro.$(O) BenchmarkStXMicro.$(H): BenchmarkStXMicro.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkCollection.$(O) BenchmarkCollection.$(H): BenchmarkCollection.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkLinkedList.$(O) BenchmarkLinkedList.$(H): BenchmarkLinkedList.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX1.$(O) BenchmarkSTX1.$(H): BenchmarkSTX1.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX2.$(O) BenchmarkSTX2.$(H): BenchmarkSTX2.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX3.$(O) BenchmarkSTX3.$(H): BenchmarkSTX3.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSimpleHanoi.$(O) BenchmarkSimpleHanoi.$(H): BenchmarkSimpleHanoi.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSlopstone.$(O) BenchmarkSlopstone.$(H): BenchmarkSlopstone.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSmopstone.$(O) BenchmarkSmopstone.$(H): BenchmarkSmopstone.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSpeedTester.$(O) BenchmarkSpeedTester.$(H): BenchmarkSpeedTester.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)jv_calipel_s_benchmarks_stx.$(O) jv_calipel_s_benchmarks_stx.$(H): jv_calipel_s_benchmarks_stx.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkDictionaryLike.$(O) BenchmarkDictionaryLike.$(H): BenchmarkDictionaryLike.st $(INCLUDE_TOP)/jv/calipel/s/benchmarks/stx/BenchmarkCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSortedCollectionLike.$(O) BenchmarkSortedCollectionLike.$(H): BenchmarkSortedCollectionLike.st $(INCLUDE_TOP)/jv/calipel/s/benchmarks/stx/BenchmarkCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/s/benchmarks/stx/Make.spec Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/Make.spec Mon Mar 10 11:40:06 2014 +0000
@@ -50,15 +50,35 @@
STCWARNINGS=-warnNonStandard
COMMON_CLASSES= \
- BenchmarkStXMicro \
+ BenchmarkCollection \
+ BenchmarkLinkedList \
+ BenchmarkSTX1 \
+ BenchmarkSTX2 \
+ BenchmarkSTX3 \
+ BenchmarkSimpleHanoi \
+ BenchmarkSlopstone \
+ BenchmarkSmopstone \
+ BenchmarkSpeedTester \
jv_calipel_s_benchmarks_stx \
+ BenchmarkDictionaryLike \
+ BenchmarkSortedCollectionLike \
COMMON_OBJS= \
- $(OUTDIR_SLASH)BenchmarkStXMicro.$(O) \
+ $(OUTDIR_SLASH)BenchmarkCollection.$(O) \
+ $(OUTDIR_SLASH)BenchmarkLinkedList.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSTX1.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSTX2.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSTX3.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSimpleHanoi.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSlopstone.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSmopstone.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSpeedTester.$(O) \
$(OUTDIR_SLASH)jv_calipel_s_benchmarks_stx.$(O) \
+ $(OUTDIR_SLASH)BenchmarkDictionaryLike.$(O) \
+ $(OUTDIR_SLASH)BenchmarkSortedCollectionLike.$(O) \
--- a/s/benchmarks/stx/abbrev.stc Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/abbrev.stc Mon Mar 10 11:40:06 2014 +0000
@@ -1,5 +1,15 @@
# automagically generated by the project definition
# this file is needed for stc to be able to compile modules independently.
# it provides information about a classes filename, category and especially namespace.
-BenchmarkStXMicro BenchmarkStXMicro jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkCollection BenchmarkCollection jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkLinkedList BenchmarkLinkedList jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSTX1 BenchmarkSTX1 jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSTX2 BenchmarkSTX2 jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSTX3 BenchmarkSTX3 jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSimpleHanoi BenchmarkSimpleHanoi jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSlopstone BenchmarkSlopstone jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSmopstone BenchmarkSmopstone jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSpeedTester BenchmarkSpeedTester jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
jv_calipel_s_benchmarks_stx jv_calipel_s_benchmarks_stx jv:calipel/s/benchmarks/stx '* Projects & Packages *' 3
+BenchmarkDictionaryLike BenchmarkDictionaryLike jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSortedCollectionLike BenchmarkSortedCollectionLike jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
--- a/s/benchmarks/stx/bc.mak Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/bc.mak Mon Mar 10 11:40:06 2014 +0000
@@ -67,8 +67,18 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)BenchmarkStXMicro.$(O) BenchmarkStXMicro.$(H): BenchmarkStXMicro.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkCollection.$(O) BenchmarkCollection.$(H): BenchmarkCollection.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkLinkedList.$(O) BenchmarkLinkedList.$(H): BenchmarkLinkedList.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX1.$(O) BenchmarkSTX1.$(H): BenchmarkSTX1.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX2.$(O) BenchmarkSTX2.$(H): BenchmarkSTX2.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX3.$(O) BenchmarkSTX3.$(H): BenchmarkSTX3.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSimpleHanoi.$(O) BenchmarkSimpleHanoi.$(H): BenchmarkSimpleHanoi.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSlopstone.$(O) BenchmarkSlopstone.$(H): BenchmarkSlopstone.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSmopstone.$(O) BenchmarkSmopstone.$(H): BenchmarkSmopstone.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSpeedTester.$(O) BenchmarkSpeedTester.$(H): BenchmarkSpeedTester.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)jv_calipel_s_benchmarks_stx.$(O) jv_calipel_s_benchmarks_stx.$(H): jv_calipel_s_benchmarks_stx.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkDictionaryLike.$(O) BenchmarkDictionaryLike.$(H): BenchmarkDictionaryLike.st $(INCLUDE_TOP)\jv\calipel\s\benchmarks\stx\BenchmarkCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSortedCollectionLike.$(O) BenchmarkSortedCollectionLike.$(H): BenchmarkSortedCollectionLike.st $(INCLUDE_TOP)\jv\calipel\s\benchmarks\stx\BenchmarkCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/s/benchmarks/stx/jv_calipel_s_benchmarks_stx.st Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/jv_calipel_s_benchmarks_stx.st Mon Mar 10 11:40:06 2014 +0000
@@ -11,20 +11,21 @@
!jv_calipel_s_benchmarks_stx class methodsFor:'description'!
excludedFromPreRequisites
- "list all packages which should be ignored in the automatic
- preRequisites scan. See #preRequisites for more."
+ "list packages which are to be explicitely excluded from the automatic constructed
+ prerequisites list. If empty, everything that is found along the inheritance of any of
+ my classes is considered to be a prerequisite package."
^ #(
)
!
mandatoryPreRequisites
- "list all required mandatory packages.
- Packages are mandatory, if they contain superclasses of the package's classes
- or classes which are extended by this package.
- This list can be maintained manually or (better) generated and
- updated by scanning the superclass hierarchies
- (the browser has a menu function for that)"
+ "list packages which are mandatory as a prerequisite.
+ This are packages containing superclasses of my classes and classes which
+ are extended by myself.
+ They are mandatory, beacuse we need these packages as a prerequisite for loading and compiling.
+ This method is generated automatically,
+ by searching along the inheritance chain of all of my classes."
^ #(
#'stx:libbasic' "LibraryDefinition - superclass of jv_calipel_s_benchmarks_stx "
@@ -32,23 +33,24 @@
!
referencedPreRequisites
- "list all packages containing classes referenced by the packages's members.
- This list can be maintained manually or (better) generated and
- updated by looking for global variable accesses
- (the browser has a menu function for that)
- However, often too much is found, and you may want to explicitely
- exclude individual packages in the #excludedFromPreRequisites method."
+ "list packages which are a prerequisite, because they contain
+ classes which are referenced by my classes.
+ We do not need these packages as a prerequisite for loading or compiling.
+ This method is generated automatically,
+ by searching all classes (and their packages) which are referenced by my classes."
^ #(
- #'jv:calipel/s' "BenchmarkInstance - referenced by BenchmarkStXMicro class>>run: "
+ #'jv:calipel/s' "BenchmarkInstance - referenced by BenchmarkCollection class>>run: "
+ #'stx:libbasic2' "BinaryTree - referenced by BenchmarkSortedCollectionLike class>>test_Btree "
+ #'stx:libview' "Color - referenced by BenchmarkSTX1 class>>lineDrawing2 "
)
!
subProjects
- "list packages which are known as subprojects.
+ "list packages which are known as subprojects.
The generated makefile will enter those and make there as well.
- However: they are not forced to be loaded when a package is loaded;
- for those, redefine requiredPrerequisites"
+ However: they are not forced to be loaded when a package is loaded;
+ for those, redefine requiredPrerequisites."
^ #(
)
@@ -64,14 +66,24 @@
^ #(
"<className> or (<className> attributes...) in load order"
- BenchmarkStXMicro
+ BenchmarkCollection
+ BenchmarkLinkedList
+ BenchmarkSTX1
+ BenchmarkSTX2
+ BenchmarkSTX3
+ BenchmarkSimpleHanoi
+ BenchmarkSlopstone
+ BenchmarkSmopstone
+ BenchmarkSpeedTester
#'jv_calipel_s_benchmarks_stx'
+ BenchmarkDictionaryLike
+ BenchmarkSortedCollectionLike
)
!
extensionMethodNames
- "lists the extension methods which are to be included in the project.
- Entries are 2-element array literals, consisting of class-name and selector."
+ "list class/selector pairs of extensions.
+ A correponding method with real names must be present in my concrete subclasses"
^ #(
)
@@ -80,25 +92,29 @@
!jv_calipel_s_benchmarks_stx class methodsFor:'description - project information'!
companyName
- "Return a companyname which will appear in <lib>.rc"
+ "Returns a company string which will appear in <lib>.rc.
+ Under win32, this is placed into the dlls file-info"
^ 'My Company'
!
description
- "Return a description string which will appear in vc.def / bc.def"
+ "Returns a description string which will appear in nt.def / bc.def"
^ 'Class Library'
!
legalCopyright
- "Return a copyright string which will appear in <lib>.rc"
+ "Returns a copyright string which will appear in <lib>.rc.
+ Under win32, this is placed into the dlls file-info"
^ 'My CopyRight or CopyLeft'
!
productName
- "Return a product name which will appear in <lib>.rc"
+ "Returns a product name which will appear in <lib>.rc.
+ Under win32, this is placed into the dlls file-info.
+ This method is usually redefined in a concrete application definition"
^ 'LibraryName'
! !
--- a/s/benchmarks/stx/libInit.cc Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/libInit.cc Mon Mar 10 11:40:06 2014 +0000
@@ -27,8 +27,18 @@
void _libjv_calipel_s_benchmarks_stx_Init(pass, __pRT__, snd)
OBJ snd; struct __vmData__ *__pRT__; {
__BEGIN_PACKAGE2__("libjv_calipel_s_benchmarks_stx", _libjv_calipel_s_benchmarks_stx_Init, "jv:calipel/s/benchmarks/stx");
-_BenchmarkStXMicro_Init(pass,__pRT__,snd);
+_BenchmarkCollection_Init(pass,__pRT__,snd);
+_BenchmarkLinkedList_Init(pass,__pRT__,snd);
+_BenchmarkSTX1_Init(pass,__pRT__,snd);
+_BenchmarkSTX2_Init(pass,__pRT__,snd);
+_BenchmarkSTX3_Init(pass,__pRT__,snd);
+_BenchmarkSimpleHanoi_Init(pass,__pRT__,snd);
+_BenchmarkSlopstone_Init(pass,__pRT__,snd);
+_BenchmarkSmopstone_Init(pass,__pRT__,snd);
+_BenchmarkSpeedTester_Init(pass,__pRT__,snd);
_jv_137calipel_137s_137benchmarks_137stx_Init(pass,__pRT__,snd);
+_BenchmarkDictionaryLike_Init(pass,__pRT__,snd);
+_BenchmarkSortedCollectionLike_Init(pass,__pRT__,snd);
__END_PACKAGE__();
--- a/s/benchmarks/stx/stx.rc Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/stx.rc Mon Mar 10 11:40:06 2014 +0000
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "LibraryName\0"
VALUE "ProductVersion", "6.2.3.0\0"
- VALUE "ProductDate", "Fri, 28 Feb 2014 16:08:14 GMT\0"
+ VALUE "ProductDate", "Mon, 10 Mar 2014 11:38:04 GMT\0"
END
END