2016年2月14日日曜日

非同期ワークフロー パラレル計算 F#

http://d.hatena.ne.jp/rhasumi/20101209/p1のサイトを参照させてもらいました。

試しに、1000000回で実行時間を比べたら、ノンパラレルでないほうが速かったようなので
10000000回に一桁回数を増やしたところ、パラレルのほうが速くなりました。
シミュレーションの計算などで活用すると便利なようです。

let Runif seed n =
  let r = new System.Random(seed)
  let ans:float[] = Array.zeroCreate n
  for i in 0..(n-1) do
    ans.[i] <- r.NextDouble()
  ans

let Parallel' n =
    let r = new System.Random()
    [for x in 1..2 -> async { return Runif (r.Next ()) n }]
    |> Async.Parallel
    |> Async.RunSynchronously

let nonParallel' n =
    let r = new System.Random()
    [for x in 1..2 -> Runif (r.Next ()) n ]



[<EntryPoint>]
let main argv =
    let sw = System.Diagnostics.Stopwatch()
    sw.Start()
    let rs=[nonParallel' 10000000]
    sw.Stop()
    System.Console.WriteLine("nonParrallel Time elapsed: {0}", sw.Elapsed)
    sw.Reset()

    sw.Start()
    let rs=[Parallel' 10000000]
    sw.Stop()
    System.Console.WriteLine("Parrallel Time elapsed: {0}", sw.Elapsed)
    sw.Reset()

    System.Console.ReadKey() |> ignore
    0 // 整数の終了コードを返します

0 件のコメント:

コメントを投稿