Haskellで並列計算を行うのに問題があります。私は、並列と非並列の形式で非常に単純な計算を試みましたが、非並列のものは数秒高速でした。私は何か間違っているのですか?これがなぜそのようなのでしょうか?前もって感謝します。parが効果を持たない
これは私のテストコードの並列バージョンです:
-- par.hs
import Control.Parallel
a = sum [1, 3 .. 99999999]
b = sum [2, 4 .. 100000000]
main = (a `par` b) `pseq` print (a + b)
、これは非平行バージョンです:いいえ
-- nopar.hs
a = sum [1, 3 .. 99999999]
b = sum [2, 4 .. 100000000]
main = print (a + b)
が、私はそれをしようとしたとき、並列化が持っていました、またはさらに悪影響:
➜ 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
あなたは数字の合計です。違いを見るのはそれほど簡単ではないでしょう。 – Carcigenicate
'-threaded'フラグをGHCに追加して、複数のシステムスレッドを使用できるRTSを実際に使用するようにしてください。 – Carl
@Carcigenicate明らかに、30秒間シングルスレッドを実行するのには些細なことはありません。あなたが2つのスレッドでそれを半分にすることができると仮定するのは妥当と思われます。 – amalloy