「Async.Parallel」結構是否真的有助於在多核系統上更快地進行計算? .NET TPL「任務」是否涉及這裏?F#異步並行加速計算?
open System;
let key = Console.ReadKey(true);
let start = System.DateTime.Now
let pmap f l = seq { for a in l do yield async {return f a} } |> Async.Parallel |> Async.RunSynchronously
let map f l = seq {for a in l do yield f a}
let work f l =
match key.KeyChar with
| '1' -> pmap f l
| '2' -> Seq.toArray (map f l)
| _ -> [||]
let result = work (fun x -> (x * x)/75) (seq { 1 .. 100000*3})
let endtime = DateTime.Now - start
printfn "%A"endtime;
let pause = Console.ReadKey(true);
我想你們中的一些人會在理論上解釋它,但我也很感激一些真實世界的測試。
隨着序列加速到60000000,它會在40秒左右的時間內運行10秒鐘,其映射和崩潰在pmap內存不足。兩個版本都只使用我的兩個內核之一。現在我需要一個F#專家來解釋這個:-) – TToni 2011-01-31 14:19:44