Ich habe Probleme, parallele Berechnung in Haskell getan. Ich habe gerade eine sehr einfache Berechnung in parallelen und nicht-parallelen Formen versucht, und die nicht-parallele war ein paar Sekunden schneller. Mache ich etwas falsch? Irgendwelche Ideen, warum das so ist? Danke im Voraus.Par ohne Wirkung
Dies ist die parallele Version meines Testcode:
-- par.hs
import Control.Parallel
a = sum [1, 3 .. 99999999]
b = sum [2, 4 .. 100000000]
main = (a `par` b) `pseq` print (a + b)
und das ist die nicht-parallele Version:
-- nopar.hs
a = sum [1, 3 .. 99999999]
b = sum [2, 4 .. 100000000]
main = print (a + b)
aber wenn ich es versuchte, Parallelisierung hatte nein, oder sogar negativ, effekte:
➜ ghc par.hs
[1 of 1] Compiling Main (par.hs, par.o)
Linking par ...
➜ ghc nopar.hs
[1 of 1] Compiling Main (nopar.hs, nopar.o)
Linking nopar ...
➜ time ./par
5000000050000000
./par 35.02s user 12.83s system 92% cpu 51.501 total
➜ time ./nopar
5000000050000000
./nopar 31.33s user 6.44s system 98% cpu 38.441 total
Sie addieren gerade Zahlen. Das ist wahrscheinlich viel zu trivial, um einen Unterschied zu sehen. – Carcigenicate
Versuchen Sie, die GH-Markierung "-threaded" hinzuzufügen, sodass sie tatsächlich die RTS verwendet, die mehrere Systemthreads verwenden kann. – Carl
@Carcigenicate Anscheinend ist es nicht-trivial genug, 30 Sekunden Single-Threaded zu nehmen. Scheint vernünftig anzunehmen, dass Sie das mit zwei Threads halbieren könnten. – amalloy