Benchfib.st 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. Object subclass: #Benchfib
  2. instanceVariableNames: ''
  3. category: 'Benchfib'!
  4. !Benchfib class methodsFor: 'not yet classified'!
  5. main
  6. console log: '0 tinyBenchmarks => ', 0 tinyBenchmarks
  7. ! !
  8. !Number methodsFor: '*Benchfib'!
  9. benchFib
  10. "Handy send-heavy benchmark"
  11. "(result // seconds to run) = approx calls per second"
  12. " | r t |
  13. t := Time millisecondsToRun: [r := 26 benchFib].
  14. (r * 1000) // t"
  15. "138000 on a Mac 8100/100"
  16. ^ self < 2
  17. ifTrue: [1]
  18. ifFalse: [(self-1) benchFib + (self-2) benchFib + 1]
  19. !
  20. benchmark "Handy bytecode-heavy benchmark"
  21. "(500000 // time to run) = approx bytecodes per second"
  22. "5000000 // (Time millisecondsToRun: [10 benchmark]) * 1000"
  23. "3059000 on a Mac 8100/100"
  24. | size flags prime k count |
  25. size := 8190.
  26. 1 to: self do:
  27. [:iter |
  28. count := 0.
  29. flags := Array new.
  30. size timesRepeat: [ flags add: true].
  31. 1 to: size do:
  32. [:i | (flags at: i) ifTrue:
  33. [prime := i+1.
  34. k := i + prime.
  35. [k <= size] whileTrue:
  36. [flags at: k put: false.
  37. k := k + prime].
  38. count := count + 1]]].
  39. ^ count
  40. !
  41. tinyBenchmarks
  42. "Report the results of running the two tiny Squeak benchmarks.
  43. ar 9/10/1999: Adjusted to run at least 1 sec to get more stable results"
  44. "0 tinyBenchmarks"
  45. "On a 292 MHz G3 Mac: 22727272 bytecodes/sec; 984169 sends/sec"
  46. "On a 400 MHz PII/Win98: 18028169 bytecodes/sec; 1081272 sends/sec"
  47. | t1 t2 r n1 n2 |
  48. n1 := 1.
  49. [t1 := Date millisecondsToRun: [n1 benchmark].
  50. t1 < 1000] whileTrue:[n1 := n1 * 2]. "Note: #benchmark's runtime is about O(n)"
  51. n2 := 28.
  52. [t2 := Date millisecondsToRun: [r := n2 benchFib].
  53. t2 < 1000] whileTrue:[n2 := n2 + 1].
  54. "Note: #benchFib's runtime is about O(k^n),
  55. where k is the golden number = (1 + 5 sqrt) / 2 = 1.618...."
  56. ^ ((n1 * 500000 * 1000) / t1) printString, ' bytecodes/sec; ',
  57. ((r * 1000) / t2) printString, ' sends/sec'
  58. ! !