2012-09-03 7 views
8

Lorsque j'exécute cet extrait Haskell, seul 1 processeur est chargé. Les deux f et g sont non-sens, mais ne devrait-il pas charger deux processeurs lorsqu'ils sont disponibles? Compilé en tant que ghc -O2 snippet.hs.Calcul parallèle dans 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 

Répondre

9

Vous devez compiler avec l'option filetée, c.-à-ghc -O2 -threaded snippet.hs, puis passer l'exécutable le nombre de cœurs sur la ligne de commande suivante pour quatre cœurs:

./snippet +RTS -N4 

Ou vous pouvez avoir les machine choisir le nombre de cœurs en utilisant seulement -N.

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

+0

Essayé, mais je vois encore que la charge à 100%, pas 200% de charge (ont 4 cœurs dans mon CPU). – Cartesius00

+0

Attendez, j'ai oublié que vous devez également passer l'exécutable le nombre de cœurs, comme ceci: './snippet + RTS -N4' pour quatre cœurs. –

+0

C'est tout! Merci :) – Cartesius00

Questions connexes