/mobile Handheld Friendly website
Ubuntu : Intel® Q6600® one core |
Each table row shows performance measurements for this Scala program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 60,000 | 0.53 | 0.53 | 17,164 | 1171 | 0% 0% 2% 100% |
| 600,000 | 1.88 | 1.88 | 36,088 | 1171 | 0% 1% 0% 99% |
| 6,000,000 | 15.05 | 15.06 | 85,260 | 1171 | 0% 1% 0% 100% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read chameneos-redux benchmark to see what this program should do.
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) Server VM (build 23.6-b04, mixed mode)
Scala compiler version 2.10.0 -- Copyright 2002-2012, LAMP/EPFL
/* The Computer Language Benchmarks Game http://benchmarksgame.alioth.debian.org/ Contributed by Eric Willigers Port of Java implementation by Michael Barker and Luzius Meisser */ object Colours extends Enumeration { val Blue = Value("blue") val Red = Value("red") val Yellow = Value("yellow") } import Colours.{Blue, Red, Yellow, Value => Colour} final class Creature(place: MeetingPlace, var colour: Colour) extends Runnable { val id = System.identityHashCode(this) var sameCount = 0 var count = 0 def run() = try { while (true) { val p = place.meet(id, colour) colour = p.colour if (p.sameId) sameCount += 1 count +=1 } } catch { case _: Exception => () } override def toString = String.valueOf(count)+" "+chameneosredux.getNumber(sameCount) } final class MeetingPlace(var meetingsLeft: Int) { var firstColour: Option[Colour] = None var firstId = 0 var current: Future = _ def meet(id: Int, c: Colour) = synchronized { if (meetingsLeft == 0) { throw new Exception("Finished") } else { if (firstColour.isEmpty) { firstColour = Some(c) firstId = id current = new Future() } else { current.setItem(new Pair(id == firstId, chameneosredux.doCompliment(c, firstColour.get))) firstColour = None meetingsLeft -= 1 } current } }.getItem() } final class Future { @volatile var p: Pair = _ def getItem() = { while (p == null) Thread.`yield`() p } def setItem(_p: Pair) { this.p = _p } } final case class Pair(sameId: Boolean, colour: Colour) object chameneosredux { def doCompliment(c1: Colour, c2: Colour) = (c1, c2) match { case (Blue, Blue) => Blue case (Blue, Red) => Yellow case (Blue, Yellow) => Red case (Red, Blue) => Yellow case (Red, Red) => Red case (Red, Yellow) => Blue case (Yellow, Blue) => Red case (Yellow, Red) => Blue case (Yellow, Yellow) => Yellow } def run(n: Int, colours: Colour*) { val place = new MeetingPlace(n) colours.foreach { c => print(" "+c) } val creatures = colours.map { new Creature(place, _) }.toArray println() val ts = creatures.map { new Thread(_) } ts.foreach { _.start() } ts.foreach { _.join() } creatures.foreach { println(_) } println(getNumber(creatures.foldLeft(0){_ + _.count})) println() } def main(args: Array[String]) { val n = if (args.isEmpty) 600 else Integer.parseInt(args(0)) printColours() println() run(n, Blue, Red, Yellow) run(n, Blue, Red, Yellow, Red, Yellow, Blue, Red, Yellow, Red, Blue) } val Numbers = Array[String]("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine") def getNumber(n: Int) = String.valueOf(n).toList.map { ch => Numbers(Character.getNumericValue(ch)) } .mkString(" ") def printColours() { printColours(Blue, Blue) printColours(Blue, Red) printColours(Blue, Yellow) printColours(Red, Blue) printColours(Red, Red) printColours(Red, Yellow) printColours(Yellow, Blue) printColours(Yellow, Red) printColours(Yellow, Yellow) } def printColours(c1: Colour, c2: Colour) { println(c1+" + "+c2+" -> "+doCompliment(c1, c2)) } }
Sat, 26 Jan 2013 13:53:52 GMT MAKE: mv chameneosredux.scala-2.scala chameneosredux.scala /usr/local/src/scala-2.10.0/bin/scalac -optimise -target:jvm-1.7 chameneosredux.scala 8.02s to complete and log all make actions COMMAND LINE: /usr/local/src/jdk1.7.0_11/bin/java -server -XX:+TieredCompilation -XX:+AggressiveOpts -Xbootclasspath/a:/usr/local/src/scala-2.10.0/lib/scala-library.jar:/usr/local/src/scala-2.10.0/lib/akka-actors.jar:/usr/local/src/scala-2.10.0/lib/typesafe-config.jar chameneosredux 6000000 PROGRAM OUTPUT: blue + blue -> blue blue + red -> yellow blue + yellow -> red red + blue -> yellow red + red -> red red + yellow -> blue yellow + blue -> red yellow + red -> blue yellow + yellow -> yellow blue red yellow 4009594 zero 4030945 zero 3959461 zero one two zero zero zero zero zero zero blue red yellow red yellow blue red yellow red blue 1209347 zero 1197571 zero 1205884 zero 1194796 zero 1192754 zero 1186701 zero 1191548 zero 1200805 zero 1211771 zero 1208823 zero one two zero zero zero zero zero zero