2012-09-03 5 views
8

में समानांतर गणना जब मैं इस हास्केल स्निपेट को चलाता हूं तो इसे केवल 1 सीपीयू लोड किया जाता है। f और g दोनों गैर-समझदार हैं, लेकिन क्या उपलब्ध होने पर दो CPU लोड नहीं करना चाहिए? ghc -O2 snippet.hs के रूप में संकलित।हास्केल

./snippet +RTS -N4 

या आप हो सकता है:

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 

उत्तर

9

आप थ्रेडेड विकल्प के साथ संकलित करने के लिए यानी ghc -O2 -threaded snippet.hs, और उसके बाद के रूप में चार कोर के लिए इस प्रकार है निष्पादन योग्य कमांड लाइन पर कोर की संख्या से पारित की जरूरत है मशीन -N का उपयोग कर कोर की संख्या का चयन करें।

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

+0

की कोशिश की देखो, लेकिन मैं अभी भी केवल 100% लोड देखते हैं, नहीं 200% लोड (मेरी सीपीयू में 4 कोर है)। – Cartesius00

+0

रुको, मैं भूल गया कि आपको निष्पादन योग्य कोर की संख्या को पास करने की भी आवश्यकता है, जैसे: चार। कोर के लिए './snippet + RTS -N4'। –

+0

यही वह है! धन्यवाद :) – Cartesius00