BenchmarkPerform: add sequential, uniform and normal distribution of both receivers and selectors.
--- a/s/benchmarks/micro/BenchmarkPerform.st Thu Aug 01 19:19:16 2013 +0100
+++ b/s/benchmarks/micro/BenchmarkPerform.st Thu Aug 01 23:33:11 2013 +0100
@@ -1,8 +1,9 @@
"{ Package: 'jv:calipel/s/benchmarks/micro' }"
Object subclass:#BenchmarkPerform
- instanceVariableNames:'receivers selectors iterations nreceivers nselectors nargs'
- classVariableNames:''
+ instanceVariableNames:'receivers selectors iterations nreceivers nselectors nargs
+ recdistrib seldistrib recindices selindices'
+ classVariableNames:'Generators GeneratorSequential GeneratorUniform GeneratorGaussian'
poolDictionaries:''
category:'CalipeL-S-Benchmarks-Micro'
!
@@ -33,360 +34,401 @@
"
! !
+!BenchmarkPerform class methodsFor:'initialization'!
+
+initialize
+ "Invoked at system start or when the class is dynamically loaded."
+
+ | rng seq |
+
+ rng := Random new seed: 131.
+ seq := 0.
+
+ GeneratorSequential := [:upper | | v | v := seq. seq := seq + 1. (v \\ upper) + 1 ].
+ GeneratorUniform := [:upper | rng nextInt: upper ].
+ GeneratorGaussian := [:upper |
+ | nrng x1 x2 w y1 y2 v0 |
+
+ nrng := [
+ | v |
+ y2 notNil ifTrue: [
+ v := y2.
+ y2 := nil.
+ ] ifFalse:[
+ [
+ x1 := (2.0 * rng next) - 1.0.
+ x2 := (2.0 * rng next) - 1.0.
+ w := x1 * x1 + (x2 * x2).
+ w >= 1.0
+ ] whileTrue.
+ w := (-2.0 * w ln / w) sqrt.
+ y1 := x1 * w.
+ y2 := x2 * w.
+ v := y1.
+ ].
+ v
+ ].
+ [
+ v0 := (((nrng value) * (upper / 2.0 / 3.5"deviations")) + (upper / 2.0)) truncated.
+ v0 < 1 or:[v0 > upper ]
+ ] whileTrue.
+ v0.
+ ].
+
+ Generators := Dictionary new.
+ Generators at: #sequential put: GeneratorSequential.
+ Generators at: #uniform put: GeneratorUniform.
+ Generators at: #normal put: GeneratorGaussian.
+
+ "
+ self initialize.
+
+ GeneratorSequential value: 10.
+ GeneratorUniform value: 10.
+ GeneratorGaussian value: 10.
+
+
+
+
+
+ "
+
+ "Modified: / 01-08-2013 / 23:03:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkPerform 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>"
+! !
+
+!BenchmarkPerform methodsFor:'accessing'!
+
+recdistrib
+ ^ recdistrib
+!
+
+recdistrib:aSymbol
+ <parameter: #recdistrib type: Symbol default: #uniform values: #(#sequential #uniform #normal)>
+ recdistrib := aSymbol.
+
+ "Modified: / 01-08-2013 / 20:16:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+seldistrib
+ ^ seldistrib
+!
+
+seldistrib:aSymbol
+ <parameter: #seldistrib type: Symbol default: #uniform values: #(#sequential #uniform #normal)>
+ seldistrib := aSymbol.
+
+ "Modified: / 01-08-2013 / 20:17:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!BenchmarkPerform methodsFor:'benchmarks'!
benchmark0
<benchmark>
- | sels r ri s si ripsi|
+ | sels r s |
- 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s
- ]
+ ].
+
+ "
+ BenchmarkPerform run: #benchmark0
+ "
"Created: / 20-07-2013 / 11:13:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 01-08-2013 / 23:22:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark1
<benchmark>
- | sels r ri s si ripsi|
+ | sels r s|
- 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s with: 1
]
"Created: / 20-07-2013 / 11:14:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:29:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark2
<benchmark>
- | sels r ri s si ripsi|
+ | sels r s|
- 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s with: 1 with: 2.
]
"Created: / 20-07-2013 / 11:14:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:29:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark3
<benchmark>
- | sels r ri s si ripsi|
+ | sels r s|
- 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ 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>"
+ "Modified: / 01-08-2013 / 23:29:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark4
<benchmark>
- | sels r ri s si ripsi|
+ | sels r s|
- 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ 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>"
+ "Modified: / 01-08-2013 / 23:29:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark5
<benchmark>
- | sels r ri s si ripsi|
+ | sels r s|
- 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ 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>"
+ "Modified: / 01-08-2013 / 23:30:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark6
<benchmark>
- | sels r ri s si ripsi|
+ | sels r s|
- 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ 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>"
+ "Modified: / 01-08-2013 / 23:30:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark7
<benchmark>
- | na sels r ri s si ripsi args |
-
- ri := 1.
- si := 1.
+ | na sels r s args |
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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:17:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:30:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark8
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:17:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:30:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmark9
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:17:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:30:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmarkA
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:17:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:30:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmarkB
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:17:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:30:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmarkC
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:18:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:31:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmarkD
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:18:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:31:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmarkE
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:31:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
benchmarkF
<benchmark>
- | na sels r ri s si ripsi args |
+ | na sels r s 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 := receivers at: (recindices at: ((i \\ nreceivers) + 1)).
+ s := sels at: (selindices at: ((i \\ nselectors) + 1)).
r perform: s withArguments: args
]
"Created: / 20-07-2013 / 11:18:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-08-2013 / 23:31:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!BenchmarkPerform methodsFor:'parameters'!
@@ -429,7 +471,7 @@
setUp
<setup>
- | random |
+ | rng1 rng2 |
nreceivers isNil ifTrue:[
BenchmarkParameterError new signal:'No value set for parameter ''nreceivers''!!'.
@@ -440,7 +482,7 @@
receivers := Smalltalk allClasses asArray copyFrom: 1 to: nreceivers.
- random := Random new seed: 173.
+ rng1 := Random new seed: 173.
selectors := Array new: 16.
1 to: 16 do:[:na|
| bucket |
@@ -483,16 +525,28 @@
"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.
+ no := rng1 nextInteger printString.
Object compile: 'm' , no , suffixMethod , '
^ 123456' classified: 'benchmark-mocks'.
('m', no , suffixSel) asSymbol.
].
selectors at: na put: bucket.
+ ].
+
+ rng2 := Generators at: recdistrib.
+ recindices := Array new: nreceivers.
+ 1 to: recindices size do:[:i|
+ recindices at: i put: (rng2 value: recindices size).
+ ].
+
+ rng2 := Generators at: seldistrib.
+ selindices := Array new: nselectors.
+ 1 to: selindices size do:[:i|
+ selindices at: i put: (rng2 value: selindices size).
]
"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>"
+ "Modified: / 01-08-2013 / 23:19:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
tearDown
@@ -507,3 +561,12 @@
"Created: / 20-07-2013 / 02:11:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!BenchmarkPerform class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
+
+BenchmarkPerform initialize!