Haskell wiki 显示您需要同时设置编译标志和运行时标志才能获得多核支持。为什么使用该库不足以在编译时获得正确的行为?为什么运行时可执行文件无法检测到它是使用 -threaded 编译的并使用系统上的所有内核,除非另有指定?我认为默认打开这些会更好。然后可能会有关闭或修改这些功能的标志。
http://www.haskell.org/haskellwiki/GHC/Concurrency#Multicore_GHC http://www.haskell.org/haskellwiki/GHC/Concurrency#Multicore_GHC says:
使用 -threaded 开关编译您的程序。
Run the program with +RTS -N2 to use 2 threads, for example. You should use a -N value equal to the number of CPU cores on your machine (not including Hyper-threading cores).
必须在编译时和运行时再次设置标志似乎有点麻烦。这些标志是为 GHC 添加并发性所做努力的残余吗?
当您开发程序时,额外的+RTS ...
应该不是什么大问题(尽管我承认当我第一次拿起 Haskell 时这让我感到很奇怪)。对于最终(已交付)的二进制文件,您可以将其与静态 RTS 选项链接(GHC手册 http://haskell.org/ghc/docs/6.12.2/html/users_guide/runtime-control.html#rts-hooks)通过提供包含以下内容的 C 文件char *ghc_rts_opts = "-N";
.
编辑:更新 GHC 7.x 的这个问题,现在有一种在编译时指定 RTS 选项的方法:
ghc -threaded -rtsopts -with-rtsopts=-N
1) 使用线程运行时系统 2) 启用 RTS 选项 3) 设置 RTS 选项以使用与可用内核一样多的线程(使用-Nx
where x
是手动控制操作系统线程数的数字)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)