相关疑难解决方法(0)

为什么Haskell中没有隐式并行性?

Haskell功能强大且纯粹,所以基本上它具有编译器能够处理隐式并行性所需的所有属性.

考虑这个简单的例子:

f = do
  a <- Just 1
  b <- Just $ Just 2
  -- ^ The above line does not utilize an `a` variable, so it can be safely
  -- executed in parallel with the preceding line
  c <- b
  -- ^ The above line references a `b` variable, so it can only be executed
  -- sequentially after it
  return (a, c)
  -- On the exit from a monad scope we wait for all computations to …
Run Code Online (Sandbox Code Playgroud)

parallel-processing concurrency haskell compiler-optimization

57
推荐指数
3
解决办法
4487
查看次数

为什么必须同时使用编译器标志和运行时标志来获得Haskell中的多核支持?

Haskell wiki显示您需要设置编译标志和运行时标志以获得多核支持.为什么不使用足够的库来在编译时获得正确的行为?为什么运行时可执行文件检测不到它是使用-threaded编译并使用系统上的所有核心,除非另有说明?我认为默认情况下打开这些会更好.然后可能会有标志关闭或修改这些功能.

http://www.haskell.org/haskellwiki/GHC/Concurrency#Multicore_GHC说:

  • 使用-threaded开关编译程序.
  • 例如,使用+ RTS -N2运行程序以使用2个线程.您应该使用-N值等于计算机上的CPU核心数(不包括超线程核心).


    让标志必须在编译时和运行时再次设置似乎有些繁琐.这些标志是否是为GHC增加并发性的遗留因素?

  • parallel-processing concurrency haskell multicore

    19
    推荐指数
    2
    解决办法
    2360
    查看次数