Skip to content

Instantly share code, notes, and snippets.

@groz
Last active June 12, 2016 01:17
Show Gist options
  • Save groz/38a329eacd54ed631cac1c74ff52d391 to your computer and use it in GitHub Desktop.
Save groz/38a329eacd54ed631cac1c74ff52d391 to your computer and use it in GitHub Desktop.
// $ SBT_OPTS="-Xmx12G" sbt run
object MainApp extends App {
def async[R](f: => R): Thread = new Thread {
override def run(): Unit = f
}
def parallel[A, B](f: => A, g: => B): (A, B) = {
var x: Option[A] = None
var y: Option[B] = None
val t1 = async { x = Some(f) }
val t2 = async { y = Some(g) }
t1.start()
t2.start()
t1.join()
t2.join()
(x.get, y.get)
}
def sumArr(a: Array[Int], s: Int, e: Int): Int = {
var result = 0
for (i <- s until e) {
result += a(i)
}
result
}
var arr = Array.fill(2 * 1000 * 1000 * 1000) { 1 }
val m1 = arr.length / 4;
val m2 = arr.length / 2;
val m3 = m1 + m2;
val m4 = arr.length;
println("ok")
var (s1, s2) = parallel(
{
val (s1, s2) = parallel(
sumArr(arr, 0, m1),
sumArr(arr, m1, m2)
)
s1 + s2
},
{
val (s3, s4) = parallel(
sumArr(arr, m2, m3),
sumArr(arr, m3, m4)
)
s3 + s4
}
);
println(s1 + s2)
//println( sumArr(arr, 0, arr.length) )
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment