Added BenchmarkPerform to bemnchmark perform: methods.
--- a/s/benchmarks/micro/BenchmarkMicro.st Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/BenchmarkMicro.st Sat Jul 20 12:25:48 2013 +0100
@@ -23,6 +23,19 @@
"Modified: / 10-06-2013 / 21:53:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!BenchmarkMicro methodsFor:'accessing'!
+
+iterations
+ ^ iterations
+!
+
+iterations:anInteger
+ <parameter: #iterations type: #Integer default: 1000>
+ iterations := anInteger.
+
+ "Modified: / 20-07-2013 / 00:35:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!BenchmarkMicro methodsFor:'benchmarks'!
ackermann
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/micro/BenchmarkPerform.st Sat Jul 20 12:25:48 2013 +0100
@@ -0,0 +1,509 @@
+"{ Package: 'jv:calipel/s/benchmarks/micro' }"
+
+Object subclass:#BenchmarkPerform
+ instanceVariableNames:'receivers selectors iterations nreceivers nselectors nargs'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'CalipeL-S-Benchmarks-Micro'
+!
+
+!BenchmarkPerform class methodsFor:'documentation'!
+
+documentation
+"
+ Replace 'Object', 'NewClass1' and
+ the empty string arguments by true values.
+
+ Install (or change) the class by 'accepting',
+ either via the menu or the keyboard (usually CMD-A).
+
+ You can also change the category simply by editing
+ the categoryString and accepting.
+
+ To be nice to others (and yourself later), do not forget to
+ add some documentation; preferably under the classes documentation
+ protocol.
+ (see the `create documentation stubs' item in the methodList menu;
+ switch from instance to class to find this menu item.)
+
+ Notice, that ST/X uses the convention to document the class using
+ comment-only class methods (however, ST80 comments are supported and
+ can be changed via the class-documentation menu).
+
+"
+! !
+
+!BenchmarkPerform methodsFor:'benchmarks'!
+
+benchmark0
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+0.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s
+ ]
+
+ "Created: / 20-07-2013 / 11:13:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark1
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+1.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1
+ ]
+
+ "Created: / 20-07-2013 / 11:14:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark2
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+2.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2.
+ ]
+
+ "Created: / 20-07-2013 / 11:14:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark3
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+3.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3
+ ]
+
+ "Created: / 20-07-2013 / 11:15:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark4
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+4.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3 with: 4
+ ]
+
+ "Created: / 20-07-2013 / 11:15:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark5
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+5.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3 with: 4 with:5
+ ]
+
+ "Created: / 20-07-2013 / 11:16:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark6
+ <benchmark>
+
+ | sels r ri s si ripsi|
+
+ ri := 1.
+ si := 1.
+ sels := selectors at: 1+6.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s with: 1 with: 2 with: 3 with: 4 with:5 with:6
+ ]
+
+ "Created: / 20-07-2013 / 11:16:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark7
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 7.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark8
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 8.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmark9
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 9.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkA
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 10.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkB
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 11.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:17:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkC
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 12.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkD
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 13.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkE
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 14.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkF
+ <benchmark>
+
+ | na sels r ri s si ripsi args |
+
+ ri := 1.
+ si := 1.
+ na := 15.
+ sels := selectors at: 1+7.
+ args := Array new: na.
+ 1 to: iterations * 1000 do:[:i|
+ ripsi := ri + si.
+ ri := ri + 1.
+ si := si + 1.
+ r := receivers at: (ripsi \\ nreceivers) + 1.
+ s := sels at: (ripsi \\ nselectors) + 1.
+
+ r perform: s withArguments: na
+ ]
+
+ "Created: / 20-07-2013 / 11:18:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkPerform methodsFor:'parameters'!
+
+iterations
+ ^ iterations
+!
+
+iterations:anInteger
+ <parameter: 'How many interations in outer loop' type: #Integer default: 1000>
+ iterations := anInteger.
+
+ "Modified: / 20-07-2013 / 01:16:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+nreceivers
+ ^ nreceivers
+!
+
+nreceivers:anInteger
+ <parameter: 'Number of different receivers to send messages to' type: #Integer>
+ nreceivers := anInteger.
+
+ "Modified: / 20-07-2013 / 01:06:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+nselectors
+ ^ nselectors
+!
+
+nselectors:anInteger
+ <parameter: 'Number of different messages to send' type: #Integer>
+ nselectors := anInteger.
+
+ "Modified: / 20-07-2013 / 01:07:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkPerform methodsFor:'running'!
+
+setUp
+ <setup>
+
+ | random |
+
+ nreceivers isNil ifTrue:[
+ BenchmarkParameterError new signal:'No value set for parameter ''nreceivers''!!'.
+ ].
+ nselectors isNil ifTrue:[
+ BenchmarkParameterError new signal:'No value set for parameter ''nselectors''!!'.
+ ].
+
+ receivers := Smalltalk allClasses asArray copyFrom: 1 to: nreceivers.
+
+ random := Random new seed: 173.
+ selectors := Array new: 16.
+ 1 to: 16 do:[:na|
+ | bucket |
+
+ bucket := (1 to: nselectors) collect:[:i|
+ | no suffixSel suffixMethod |
+ suffixSel := #(
+ "00" ''
+ "01" ':'
+ "02" ':a:'
+ "03" ':a:a:'
+ "04" ':a:a:a:'
+ "05" ':a:a:a:a:'
+ "06" ':a:a:a:a:a:'
+ "07" ':a:a:a:a:a:a:'
+ "08" ':a:a:a:a:a:a:a:'
+ "09" ':a:a:a:a:a:a:a:a:'
+ "10" ':a:a:a:a:a:a:a:a:a:'
+ "11" ':a:a:a:a:a:a:a:a:a:a:'
+ "12" ':a:a:a:a:a:a:a:a:a:a:a:'
+ "13" ':a:a:a:a:a:a:a:a:a:a:a:a:'
+ "14" ':a:a:a:a:a:a:a:a:a:a:a:a:a:'
+ "15" ':a:a:a:a:a:a:a:a:a:a:a:a:a:a:'
+ ) at: na.
+ suffixMethod := #(
+ "00" ''
+ "01" ':a1'
+ "02" ':a1 a:a2'
+ "03" ':a1 a:a2 a:a3'
+ "04" ':a1 a:a2 a:a3 a:a4'
+ "05" ':a1 a:a2 a:a3 a:a4 a:a5'
+ "06" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6'
+ "07" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7'
+ "08" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8'
+ "09" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9'
+ "10" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA'
+ "11" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB'
+ "12" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC'
+ "13" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC a:aD'
+ "14" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC a:aD a:aE'
+ "15" ':a1 a:a2 a:a3 a:a4 a:a5 a:a6 a:a7 a:a8 a:a9 a:aA a:aB a:aC a:aD a:aE a:aF'
+ ) at: na.
+ no := random nextInteger printString.
+ Object compile: 'm' , no , suffixMethod , '
+ ^ 123456' classified: 'benchmark-mocks'.
+ ('m', no , suffixSel) asSymbol.
+ ].
+ selectors at: na put: bucket.
+ ]
+
+ "Created: / 20-07-2013 / 00:55:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 20-07-2013 / 02:35:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+tearDown
+ <teardown>
+
+ selectors do:[:bucket|
+ bucket do:[:selector|
+ Object removeSelector: selector
+ ]
+ ]
+
+ "Created: / 20-07-2013 / 02:11:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/s/benchmarks/micro/Make.proto Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/Make.proto Sat Jul 20 12:25:48 2013 +0100
@@ -121,6 +121,7 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)BenchmarkPerform.$(O) BenchmarkPerform.$(H): BenchmarkPerform.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)jv_calipel_s_benchmarks_micro.$(O) jv_calipel_s_benchmarks_micro.$(H): jv_calipel_s_benchmarks_micro.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/s/benchmarks/micro/Make.spec Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/Make.spec Sat Jul 20 12:25:48 2013 +0100
@@ -50,12 +50,14 @@
STCWARNINGS=-warnNonStandard
COMMON_CLASSES= \
+ BenchmarkPerform \
jv_calipel_s_benchmarks_micro \
COMMON_OBJS= \
+ $(OUTDIR_SLASH)BenchmarkPerform.$(O) \
$(OUTDIR_SLASH)jv_calipel_s_benchmarks_micro.$(O) \
--- a/s/benchmarks/micro/abbrev.stc Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/abbrev.stc Sat Jul 20 12:25:48 2013 +0100
@@ -2,4 +2,5 @@
# this file is needed for stc to be able to compile modules independently.
# it provides information about a classes filename, category and especially namespace.
BenchmarkMicro BenchmarkMicro jv:calipel/s/benchmarks/micro 'CalipeL-S-Benchmarks-Micro' 0
+BenchmarkPerform BenchmarkPerform jv:calipel/s/benchmarks/micro 'CalipeL-S-Benchmarks-Micro' 0
jv_calipel_s_benchmarks_micro jv_calipel_s_benchmarks_micro jv:calipel/s/benchmarks/micro '* Projects & Packages *' 3
--- a/s/benchmarks/micro/bc.mak Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/bc.mak Sat Jul 20 12:25:48 2013 +0100
@@ -67,6 +67,7 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)BenchmarkPerform.$(O) BenchmarkPerform.$(H): BenchmarkPerform.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)jv_calipel_s_benchmarks_micro.$(O) jv_calipel_s_benchmarks_micro.$(H): jv_calipel_s_benchmarks_micro.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/s/benchmarks/micro/jv_calipel_s_benchmarks_micro.st Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/jv_calipel_s_benchmarks_micro.st Sat Jul 20 12:25:48 2013 +0100
@@ -41,6 +41,7 @@
^ #(
#'jv:calipel/s' "BenchmarkInstance - referenced by BenchmarkMicro class>>run: "
+ #'stx:libbasic2' "Random - referenced by BenchmarkPerform>>setUp "
)
!
@@ -77,6 +78,7 @@
^ #(
"<className> or (<className> attributes...) in load order"
(BenchmarkMicro autoload)
+ BenchmarkPerform
#'jv_calipel_s_benchmarks_micro'
)
!
--- a/s/benchmarks/micro/libInit.cc Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/libInit.cc Sat Jul 20 12:25:48 2013 +0100
@@ -27,6 +27,7 @@
void _libjv_calipel_s_benchmarks_micro_Init(pass, __pRT__, snd)
OBJ snd; struct __vmData__ *__pRT__; {
__BEGIN_PACKAGE2__("libjv_calipel_s_benchmarks_micro", _libjv_calipel_s_benchmarks_micro_Init, "jv:calipel/s/benchmarks/micro");
+_BenchmarkPerform_Init(pass,__pRT__,snd);
_jv_137calipel_137s_137benchmarks_137micro_Init(pass,__pRT__,snd);
--- a/s/benchmarks/micro/micro.rc Fri Jul 19 23:38:23 2013 +0100
+++ b/s/benchmarks/micro/micro.rc Sat Jul 20 12:25:48 2013 +0100
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
VALUE "ProductName", "LibraryName\0"
VALUE "ProductVersion", "6.2.3.0\0"
- VALUE "ProductDate", "Sun, 14 Jul 2013 18:36:56 GMT\0"
+ VALUE "ProductDate", "Sat, 20 Jul 2013 11:19:41 GMT\0"
END
END