2012-09-03 11 views
8

Cuando ejecuto este fragmento de Haskell, solo carga 1 CPU. Tanto f como g carecen de sentido, pero ¿no debería cargar dos CPU cuando están disponibles? Compilado como ghc -O2 snippet.hs.Computación en paralelo en 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 

Respuesta

9

Se necesita compilar con la opción de rosca, es decir ghc -O2 -threaded snippet.hs, y luego pasar el ejecutable del número de núcleos en la línea de comandos de la siguiente manera para los cuatro núcleos:

./snippet +RTS -N4 

o puede hacer que la la máquina elige la cantidad de núcleos usando solo -N.

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

+0

intentado, pero sigo sin ver la carga a 100%, no se carga al 200% (con 4 núcleos en mi CPU). – Cartesius00

+0

Espera, se me olvidó que también debes pasar al ejecutable la cantidad de núcleos, como este: './snippet + RTS -N4' para cuatro núcleos. –

+0

¡Eso es todo! Gracias :) – Cartesius00