2017-05-28 3 views
1

Ich kopiere eingefügt den parallelen Teil dieser example. Ich habe die Zeit in einem i3-Prozessor gemessen und die Messung war 37563ms. Ich schrieb das gleiche Programm in FSharp wie dieseParallel Fsharp vs parallel C++

let rec fib x = if x<2 then x else fib(x-1)+fib(x-2) 
let time_call f = 
let b=System.Environment.TickCount in 
let x = f() in 
System.Environment.TickCount-b 

let fibs() = 
    Async.Parallel[for i in [24;26;41;42]->async{return fib i}]|>Async.RunSynchronously 

[<EntryPoint>] 
let main argv = 
printfn "%A" (time_call fibs) 
0 // return an integer exit code 

Und die Zeit, die ich gemessen war 4735ms. Mache ich etwas falsch oder Fsharp Parallel-Programmierung ist so viel schneller?

+2

korrigierte ich den Code bitte Duplikat entfernen. Die Frage bezieht sich auf den Vergleich der parallelen Funktionalität von C++ PPL und F #. – Dragno

+0

Die 'in'-Syntax wird selten verwendet. Allerdings dauert die C++ - Version zu lange, können Sie den Code auch darauf veröffentlichen. – s952163

+0

Um Ihnen eine Idee zu geben, bekomme ich etwa 1750ms in F # und 1233ms für parallele Zeit in C++, die etwas schneller ist als .NET. Etwas schwereres wie ein Mandelbrot könnte ein interessantes Beispiel für Vergleiche sein. – s952163

Antwort

4

fibs/f ist ein Wert in Ihrem Beispiel, keine Funktion. fibs wird berechnet, bevor main startet sogar.

Sie möchten z.B.

let x = printfn "%A" (f()) in 

und

let fibs() = 
+1

Ich habe 'let x = printfn"% A "f in' geändert, um x = f() in' und 'let fibs =' zu 'fibs() =' zu lassen und die Zeit auf 4735ms zu erhöhen, was weniger als 37563ms ist. Ist F # also viel schneller? – Dragno