|
@@ -0,0 +1,70 @@
|
|
|
+Object subclass: #Benchfib
|
|
|
+ instanceVariableNames: ''
|
|
|
+ category: 'Benchfib'!
|
|
|
+
|
|
|
+!Benchfib class methodsFor: 'not yet classified'!
|
|
|
+
|
|
|
+main
|
|
|
+
|
|
|
+ | result |
|
|
|
+ result := 0 tinyBenchmarks.
|
|
|
+ {'console.log(''0 tinyBenchmarks => '' + result);'}
|
|
|
+! !
|
|
|
+
|
|
|
+!Number methodsFor: '*Benchfib'!
|
|
|
+
|
|
|
+benchFib
|
|
|
+ "Handy send-heavy benchmark"
|
|
|
+ "(result // seconds to run) = approx calls per second"
|
|
|
+ " | r t |
|
|
|
+ t := Time millisecondsToRun: [r := 26 benchFib].
|
|
|
+ (r * 1000) // t"
|
|
|
+ "138000 on a Mac 8100/100"
|
|
|
+ ^ self < 2
|
|
|
+ ifTrue: [1]
|
|
|
+ ifFalse: [(self-1) benchFib + (self-2) benchFib + 1]
|
|
|
+!
|
|
|
+
|
|
|
+benchmark "Handy bytecode-heavy benchmark"
|
|
|
+ "(500000 // time to run) = approx bytecodes per second"
|
|
|
+ "5000000 // (Time millisecondsToRun: [10 benchmark]) * 1000"
|
|
|
+ "3059000 on a Mac 8100/100"
|
|
|
+ | size flags prime k count |
|
|
|
+ size := 8190.
|
|
|
+ 1 to: self do:
|
|
|
+ [:iter |
|
|
|
+ count := 0.
|
|
|
+ flags := Array new.
|
|
|
+ size timesRepeat: [ flags add: true].
|
|
|
+ 1 to: size do:
|
|
|
+ [:i | (flags at: i) ifTrue:
|
|
|
+ [prime := i+1.
|
|
|
+ k := i + prime.
|
|
|
+ [k <= size] whileTrue:
|
|
|
+ [flags at: k put: false.
|
|
|
+ k := k + prime].
|
|
|
+ count := count + 1]]].
|
|
|
+ ^ count
|
|
|
+!
|
|
|
+
|
|
|
+tinyBenchmarks
|
|
|
+ "Report the results of running the two tiny Squeak benchmarks.
|
|
|
+ ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results"
|
|
|
+ "0 tinyBenchmarks"
|
|
|
+ "On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec"
|
|
|
+ "On a 400 MHz PII/Win98: 18028169 bytecodes/sec; 1081272 sends/sec"
|
|
|
+ | t1 t2 r n1 n2 |
|
|
|
+ n1 := 1.
|
|
|
+ [t1 := Date millisecondsToRun: [n1 benchmark].
|
|
|
+ t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
|
|
|
+
|
|
|
+ n2 := 28.
|
|
|
+ [t2 := Date millisecondsToRun: [r := n2 benchFib].
|
|
|
+ t2 < 1000] whileTrue:[n2 := n2 + 1].
|
|
|
+ "Note: #benchFib's runtime is about O(k^n),
|
|
|
+ where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
|
|
|
+
|
|
|
+ ^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
|
|
|
+ ((r * 1000) / t2) printString, ' sends/sec'
|
|
|
+! !
|
|
|
+
|