Example17.4

17.4 並列計算

次の例では、関数 par は計算のペアをパラメータとしてとり、計算結果を別のペアで返します。2つの計算は並列実行されます。

この関数はオブジェクト scala.concurrent.ops において、次のように定義されています。

     def par[A, B](xp: => A, yp: => B): (A, B) = {
       val y = new SyncVar[B]
       spawn { y set yp }
       (xp, y.get)
     }

同じ場所で replicate 関数が定義されていて、多数の計算の複製を並列実行しま す。各複製インスタンスには、それを識別する整数値が渡されます。

 def replicate(start: Int, end: Int)(p: Int => Unit) {
   if (start == end)
     ()
   else if (start + 1 == end)
     p(start)
   else {
     val mid = (start + end) / 2
     spawn { replicate(start, mid)(p) }
     replicate(mid, end)(p)
   }
 }

次の関数は、配列のすべての要素について並列計算を実行するために、replicate を使っています。

 def parMap[A,B](f: A => B, xs: Array[A]): Array[B] = {
   val results = new Array[B](xs.length)
   replicate(0, xs.length) { i => results(i) = f(xs(i)) }
   results
 }

名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月24日 09:13
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。