2012-09-03 14 views
8

Po uruchomieniu tego fragmentu kodu Haskella ładowany jest tylko 1 procesor. Zarówno f, jak i g są bezsensowne, ale czy nie powinny ładować dwóch procesorów, jeśli są dostępne? Skompilowany jako ghc -O2 snippet.hs.Równoległe obliczenia w Haskell

f x = 1 + (f $! x) 
g x = 5 + (g $! x) 

z = a `par` b `seq` a+b 
     where 
     a = f 3 
     b = g 5 

main = do 
    print z 

Odpowiedz

9

Musisz skompilować z opcją gwintowanych, tzn ghc -O2 -threaded snippet.hs, a następnie przekazać wykonywalnego liczbę rdzeni w linii poleceń w następujący sposób dla czterech rdzeni:

./snippet +RTS -N4 

Albo możesz mieć wybierz liczbę rdzeni używając tylko -N.

Zobacz http://www.haskell.org/haskellwiki/Haskell_for_multicores

+0

próbował, ale wciąż widzę tylko 100% obciążenia, a nie 200% obciążenia (mają 4 rdzenie w moim CPU). – Cartesius00

+0

Czekaj, zapomniałem, że musisz przekazać wykonywalną liczbę rdzeni, jak to: './snippet + RTS -N4' dla czterech rdzeni. –

+0

To wszystko! Dziękuję :) – Cartesius00