Ich versuche gerade zu verstehen, wie man parallel in Haskell programmiert. Ich folge der Arbeit "Ein Tutorial über parallele und gleichzeitige Programmierung in Haskell" von Simon Peyton Jones und Satnam Singh. Der Quellcode ist wie folgt:
%Vor%Ich habe es mit dem folgenden Befehl kompiliert:
%Vor%a) Lief es mit 1 Kern:
%Vor%b) Lief es mit 2 Kern:
%Vor%Der eine Kern lief jedoch 53,556 Sekunden. Wohingegen, der zwei Kern lief 73.401sek. Ich verstehe nicht, wie 2 Kerne tatsächlich langsamer als 1 Kern laufen können. Vielleicht ist die Übergabemeldung zu groß für dieses kleine Programm? Das Papier hat völlig andere Ergebnisse als Minen. Im Folgenden sind die Ausgabedaten.
Für 1 Kern:
%Vor%Für 2 Kern:
%Vor%Ich glaube, du meintest
%Vor%
Auf meiner Konfiguration (mit parSumFibEuler 45 8000
und mit nur einem Lauf):
Ich vermute, dass fib
function viel mehr CPU verbraucht als sumEuler
. Das würde die geringe Verbesserung von -N2 erklären. In Ihrer Situation wird es keinen Arbeitsraub geben.
Mit memoization wäre deine Fibonacci-Funktion viel besser, aber ich glaube nicht, dass du das versuchen wolltest.
EDIT: wie in den Kommentaren erwähnt, denke ich, dass Sie mit -N2 viele Unterbrechungen haben, da Sie zwei Kerne zur Verfügung haben.
Beispiel zu meiner Konfiguration (4 Kerne) mit sum $ parMap rdeepseq (fib) [1..40]
Von hier :
Seien Sie vorsichtig, wenn Sie alle Prozessoren in Ihrem Computer verwenden: wenn einige von Ihre Prozessoren werden von anderen Programmen verwendet, dies kann tatsächlich schaden Leistung, anstatt sie zu verbessern.
Tags und Links haskell multithreading parallel-processing