2012-10-04 19 views
3

当我运行./MyProgram +RTS -N4我希望我的程序能够自动检测到它在4个内核上运行,并创建4个火花来处理数据集。现在,每当我想改变这个选项时,我都会重新编译,这很烦人。是否有用于检测哪些RTS标志被设置的库?

+6

月['getNumCapabilities'](HTTP://hackage.haskell .org/packages/archive/base/latest/doc/html/Control-Concurrent.html#v:getNumCapabilities)是你想要的吗? –

+1

@DanielFischer它是。谢谢。 –

回答

2

回答你原来的问题:运行选项是GHC特有的,有一个由GHC提供的模块,它可以让你看到完整的参数列表(包括+RTS-RTS)传递给一个程序:GHC.Environment

这里是一个小示范:

import GHC.Environment (getFullArgs) 
import System.Environment (getArgs) 

main = do 
    getFullArgs >>= mapM putStrLn 
    putStrLn "==" 
    getArgs >>= mapM putStrLn 
    return() 

编译程序作为ghc App.hs --make -rtsopts -threaded将导致当被执行时执行以下操作:

./App hello +RTS -N4 -RTS ook ooks 
hello 
+RTS 
-N4 
-RTS 
ook 
ooks 
== 
hello 
ook 
ooks 
+0

如果对于如何表达选项的语法发生任何变化,此方法将会中断。 –

相关问题