Skip to content

Instantly share code, notes, and snippets.

@begeric
Last active August 29, 2015 14:10
Show Gist options
  • Save begeric/f823b71290a509d895a7 to your computer and use it in GitHub Desktop.
Save begeric/f823b71290a509d895a7 to your computer and use it in GitHub Desktop.
import org.scalameter._
import org.scalameter.execution.LocalExecutor
import org.scalameter.reporting.LoggingReporter
object SwitchBenchmark extends PerformanceTest {
lazy val executor = LocalExecutor(
new Executor.Warmer.Default,
Aggregator.min,
new Measurer.Default)
lazy val reporter = new LoggingReporter
lazy val persistor = Persistor.None
val range = Gen.range("vals")(0,10,1)
val nbIters = 100000
val fun = (s: Int, res: Int) => s + res
val table = new Array[(Int, Int) => Int](10)
table(0) = fun
table(1) = fun
table(2) = fun
table(3) = fun
table(4) = fun
table(5) = fun
table(6) = fun
table(7) = fun
table(8) = fun
table(9) = fun
performance of "Access" in {
measure method "Array" in {
using(range) in { j =>
var res1 = 0
var i = 0
while (i < nbIters) {
res1 = table(i % 10)(1, res1)
i += 1
}
}
}
}
performance of "Access" in {
measure method "pattern match" in {
using(range) in { j =>
var res2 = 0
var i = 0
while (i < nbIters){
(i % 10) match {
case 0 => res2 = fun(1, res2)
case 1 => res2 = fun(1, res2)
case 2 => res2 = fun(1, res2)
case 3 => res2 = fun(1, res2)
case 4 => res2 = fun(1, res2)
case 5 => res2 = fun(1, res2)
case 6 => res2 = fun(1, res2)
case 7 => res2 = fun(1, res2)
case 8 => res2 = fun(1, res2)
case 9 => res2 = fun(1, res2)
}
i += 1
}
}
}
}
performance of "Access" in {
measure method "Switch" in {
using(range) in { j =>
var res2 = 0
var i = 0
while (i < nbIters){
(i % 10: @scala.annotation.switch) match {
case 0 => res2 = fun(1, res2)
case 1 => res2 = fun(1, res2)
case 2 => res2 = fun(1, res2)
case 3 => res2 = fun(1, res2)
case 4 => res2 = fun(1, res2)
case 5 => res2 = fun(1, res2)
case 6 => res2 = fun(1, res2)
case 7 => res2 = fun(1, res2)
case 8 => res2 = fun(1, res2)
case 9 => res2 = fun(1, res2)
}
i += 1
}
}
}
}
}
/*Results
[info] ::Benchmark Access.Array::
[info] cores: 8
[info] hostname: Eric-PC
[info] name: Java HotSpot(TM) 64-Bit Server VM
[info] osArch: amd64
[info] osName: Windows 7
[info] vendor: Oracle Corporation
[info] version: 23.5-b02
[info] Parameters(vals -> 0): 0.203925
[info] Parameters(vals -> 1): 0.203925
[info] Parameters(vals -> 2): 0.203925
[info] Parameters(vals -> 3): 0.203924
[info] Parameters(vals -> 4): 0.20437
[info] Parameters(vals -> 5): 0.203924
[info] Parameters(vals -> 6): 0.203924
[info] Parameters(vals -> 7): 0.203924
[info] Parameters(vals -> 8): 0.203924
[info] Parameters(vals -> 9): 0.203924
[info] Parameters(vals -> 10): 0.203925
[info]
[info] ::Benchmark Access.pattern match::
[info] cores: 8
[info] hostname: Eric-PC
[info] name: Java HotSpot(TM) 64-Bit Server VM
[info] osArch: amd64
[info] osName: Windows 7
[info] vendor: Oracle Corporation
[info] version: 23.5-b02
[info] Parameters(vals -> 0): 0.291384
[info] Parameters(vals -> 1): 0.291384
[info] Parameters(vals -> 2): 0.291384
[info] Parameters(vals -> 3): 0.291384
[info] Parameters(vals -> 4): 0.28246
[info] Parameters(vals -> 5): 0.28246
[info] Parameters(vals -> 6): 0.28246
[info] Parameters(vals -> 7): 0.28246
[info] Parameters(vals -> 8): 0.28246
[info] Parameters(vals -> 9): 0.28246
[info] Parameters(vals -> 10): 0.28246
[info]
[info] ::Benchmark Access.Switch::
[info] cores: 8
[info] hostname: Eric-PC
[info] name: Java HotSpot(TM) 64-Bit Server VM
[info] osArch: amd64
[info] osName: Windows 7
[info] vendor: Oracle Corporation
[info] version: 23.5-b02
[info] Parameters(vals -> 0): 0.291384
[info] Parameters(vals -> 1): 0.291384
[info] Parameters(vals -> 2): 0.28246
[info] Parameters(vals -> 3): 0.28246
[info] Parameters(vals -> 4): 0.291384
[info] Parameters(vals -> 5): 0.291384
[info] Parameters(vals -> 6): 0.291384
[info] Parameters(vals -> 7): 0.291384
[info] Parameters(vals -> 8): 0.291384
[info] Parameters(vals -> 9): 0.291384
[info] Parameters(vals -> 10): 0.291384
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment