Haskellには実行時にマシン上に存在するCPUコアの数を判断する方法がありますか?Haskellで実行時のコア数を調べる方法
14
A
答えて
15
はい、このような方法があります。 「実世界Haskellの」からのコード:http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html
import GHC.Conc (numCapabilities)
main = putStrLn $ "number of cores: " ++ show numCapabilities
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
オプションパラメータに依存します。)
関連する問題
- 1. Haskellで実行シーケンスを調べる方法は?
- 2. .NETで実行時にSQL Serverストアドプロシージャパルメータを調べる方法は?
- 3. C/C++でコンパイル時のコア数を調べる
- 4. SQL実行時間を調べる方法
- 5. HadoopでMap/Reduceタスクを実行するCPU時間を調べる方法
- 6. C++で実行時にオペレーティングシステムの語長を調べる方法は?
- 7. 実行された実際のbitbakeコマンドを調べる方法
- 8. 実行時にdotnetコアでアセンブリをロードする方法
- 9. Djangoテスト実行の途中でデータベースを調べる方法は?
- 10. 時間で実行されるインスタンスの数を調べるAPI - AWS
- 11. haskellのバイナリツリー内の変数の出現数を調べる
- 12. 実行時にレポートフィールドの高さを調整する方法
- 13. PERFORCEにあるファイルの行数を調べる方法は?
- 14. C/C++プログラムの実行時間を調べる
- 15. 各テーブル行を調べる方法は?
- 16. EFコア同時実行が
- 17. Haskell - 実行時に変数を変更する
- 18. Haskellのライブラリ関数の実装方法
- 19. 並べ替え方法に配列を渡して実行時間を調べる
- 20. t-sqlの型が固定長であるかどうかを調べる方法(実行時)?
- 21. golangプログラムのデバッグ時にGoLandでグローバル変数を調べる方法は?
- 22. EF7またはEFコアで実行時にデータベーススキーマを変更する方法
- 23. 実行時に同じ関数を再実行する方法
- 24. Javaで入力引数の数を調べる方法
- 25. solrサーバーが実行中であるかどうかを調べる方法
- 26. 特定の文字で始まる行の数を調べる方法は?
- 27. grepを使用して複数の行ブロックコメントの数を調べる方法は?
- 28. Haskellでこの関数を実装する方法
- 29. Haskellで代数データ型の "Ord"を実装する方法は?
- 30. どのコマンドがどのコマンドを実行したかを調べる方法
注意(本の状態として)これが唯一のあなたのRTS経由に供給されたコアの数を与えること
GHC.Conc.getNumProcessors :: IO Int
getNumCapabilities
です物理コアの数と必ずしも等しいわけではない「-N」。 – delnanハスケルがアクセスすることができるコアの数は... OPが実際に望んでいることはほぼ確実です。 –
@LouisWasserman:プログラムが必要な数のコアを使用したい場合があります(そのようなアクセス権が明示的に与えられていない場合)。あるいは、誰かがハードウェア統計を得るためのプログラムを書くことを望むかもしれません。 – ivanm