본문 바로가기

Programming/Scala

Scala 병렬 계산을 위한 Blitz library

Scala 로 병렬 프로그래밍을 하고자 할때, primitive 값들 위주의 parallel operation 을 진행하고자 한다면, scala blitz library 를 사용하는 것이 훨씬 빠르다.




import scala.collection.par._
import scala.collection.par.Scheduler.Implicits.global

object Blitz extends App {
  val array = (0 until 100000).toArray

// JVM JIT optimization 을 고려하여 충분히 해당 expression 들을 수행한뒤(1000번) body 를 수행
  val seqtime = warmedTimed(1000) {
    array.reduce(_ + _)
  }

  val partime = warmedTimed(1000) {
    array.par.reduce(_ + _)
  }

  val blitztime = warmedTimed(1000) {
    array.toPar.reduce(_ + _)
  }

  log(s"sequential time - $seqtime")
  log(s"parallel time - $partime")
  log(s"ScalaBlitz time - $blitztime")
}
실행 시간은 아래와 같다.
main: sequential time - 2.317
main: parallel time - 1.031
main: ScalaBlitz time - 0.046

놀랍게도 Blitz library 를 사용한 것이 10배 이상 빠르다.

'Programming > Scala' 카테고리의 다른 글