Vik*_*ahl 17
是的,有这样一种方法.来自"Real World Haskell"的代码:http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html
import GHC.Conc (numCapabilities)
main = putStrLn $ "number of cores: " ++ show numCapabilities
Run Code Online (Sandbox Code Playgroud)
你可以将这个代码复制到一个被调用的文件中numCores,并用你的Haskell代码编译它.您可以使用FFI导入其定义并直接在Haskell代码中使用它:
{-# 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
Run Code Online (Sandbox Code Playgroud)
从版本6.12开始,GHC RTS 包含一个getNumberOfProcessors用于实现的功能+RTS -N.您可以使用与普通外部函数非常相同的方式访问它.警告:仅限GHC,仅在程序构建时使用-threaded:
{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign.C.Types (CInt)
foreign import ccall "getNumberOfProcessors" c_getNumberOfProcessors :: IO CInt
main :: IO ()
main = c_getNumberOfProcessors >>= print
Run Code Online (Sandbox Code Playgroud)
测试:
$ ghc --make -threaded Main.hs
[1 of 1] Compiling Main ( Main.hs, Main.o )
Linking Main ...
$ ./Main
1
Run Code Online (Sandbox Code Playgroud)