2011-11-07 7 views

答えて

15

はい、このような方法があります。 「実世界Haskellの」からのコード:http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html

import GHC.Conc (numCapabilities) 

main = putStrLn $ "number of cores: " ++ show numCapabilities 
+16

注意(本の状態として)これが唯一のあなたのRTS経由に供給されたコアの数を与えることGHC.Conc.getNumProcessors :: IO Int getNumCapabilitiesです物理コアの数と必ずしも等しいわけではない「-N」。 – delnan

+0

ハスケルがアクセスすることができるコアの数は... OPが実際に望んでいることはほぼ確実です。 –

+0

@LouisWasserman:プログラムが必要な数のコアを使用したい場合があります(そのようなアクセス権が明示的に与えられていない場合)。あるいは、誰かがハードウェア統計を得るためのプログラムを書くことを望むかもしれません。 – ivanm

5

あなたはnumCoresというファイルにthis codeをcopy'n'pasteし、あなたのHaskellコードでそれをコンパイルすることができます。あなたは、その定義をインポートし、Haskellコードで直接それを使用するFFIを使用することができますより:

{-# LANGUAGE ForeignFunctionInterface #-} 
import Control.Applicative ((<$>)) 
import Foreign.C.Types (CInt) 

foreign import ccall "getNumCores" c_getNumCores :: IO CInt 
getNumCores :: IO Int 
getNumCores = fromEnum <$> c_getNumCores 
5

バージョン6.12以来、+RTS -Nを実装するために使用されるGHC RTS includes a function getNumberOfProcessorsを、。通常の外国の機能とほとんど同じ方法でアクセスできます。 警告:プログラムは-threadedで構築された場合はGHC-のみとのみ動作します:

{-# LANGUAGE ForeignFunctionInterface #-} 
import Foreign.C.Types (CInt) 

foreign import ccall "getNumberOfProcessors" c_getNumberOfProcessors :: IO CInt 

main :: IO() 
main = c_getNumberOfProcessors >>= print 

テスト:

$ ghc --make -threaded Main.hs 
[1 of 1] Compiling Main    (Main.hs, Main.o) 
Linking Main ... 
$ ./Main      
1 
13

base 4.5以降にGHC.ConcからgetNumProcessorsを使用することができます。能力の数は、今からsetNumCapabilitiesで動的に設定できるので、これは良いことです。

0

それはGHCに提案されているどのように多くのスレッドを伝えます(と+RTS -Nオプションパラメータに依存します。)

関連する問題