`
cookoo
  • 浏览: 648274 次
  • 性别: Icon_minigender_1
  • 来自: Shanghai
社区版块
存档分类
最新评论

GHC 6.6宣布支持SMP

    博客分类:
  • FP
阅读更多
Haskell工业级编译器GHC 6.6版本刚刚发布,重要更新是可以在编译期选择让Haskell线程调度器使用多少本地线程


Perl6实现Pugs马上采用了这一新特性,并取得明显的提速

但是,Pugs领导者唐凤(Audrey Tang)又补充道因为受仍然是单线程的GC的限制,提速未能接近理想化的线性增加。并行GC是GHC下一版本6.8的工作目标。
分享到:
评论
1 楼 cookoo 2006-10-24  
Ocaml.cn的站长code17详细解释了Ocaml为什么不支持SMP的这个令人困扰的问题。

引用
在OCaml社区,对SMP的支持是一个老问题了,据Xavier说,因为每年都有人提这个问题,他每年都需要就这个问题在mailing list上重新布一次道,最近几年当然更加频繁一些。

大概说来,Caml team对SMP的结论从始至终都是这样的:
基于SMP的编程所用的是shared memory parallelism模型,在OCaml里就是thread。在一个有side effect的语言里使用thread programming,既不安全(deadlock/race condition/...)也很复杂(lock/condition/semaphore/...),这是一般性的常识,并非是OCaml特有。如果是为了并发,用message passing来进行并发编程才是更值得鼓励的模式。
那么OCaml为什么还要有thread? thread并不仅仅是用来并发加速程序,它有三种应用场景(略...)。比如OCaml最初引入thread library的目的并不是为了并行计算,而是为了提供阻塞式IO与运算重叠进行的编程模式。
那么不支持SMP?(支持它会有什么损失呢?) 这里主要的问题是runtime system特别是GC和存储管理必须是MP-safe的。这在实现上意味着尽量减少global state,并对共享资源的获取设置lock —— 设想如果是简单地对于每次heap allocation都这样做的话,代价显然小不了,如果想减小代价,那么就只能使用复杂的设计,整个VM都会更加复杂化。这些还都是些容易解决的小问题,关键在于GC:如果GC工作在一种“时间停止”的简单模式下——即GC的时候暂停所有线程,那么程序的效率显然会受到很大的限制,而解决这一问题的办法就就是使用真正的concurrent GC。这很难,但对于OCaml来说,这不仅完全做得到而且已经做过了,现在的Caml GC作者在90年代初就做出来过!但后来这个方向被放弃。为什么? 实现太复杂,太难debug(尽管连机器证明都有),可维护性存疑,此外还不要忘了这一切问题的解决都是有效率作为代价的(对于那些使用单个CPU的机器——目前的大部分机器,即使不使用SMP,还是一样要为VM里的SMP设计付出额外的代价,除非维护两个非常不同的VM;对于那些没有使用并行编程技术的源代码——目前的大部分代码,即使运行在SMP上,也一样没有speedup只有额外的cost)。
最后的结论是什么呢? 就是在无法确定在大部分场合下肯定会产生足够的speedup以前,OCaml不会添加对SMP的支持。一个例子是:如果目前常见PC里最新的Dual Core CPU,在理想状况下可以给你170%的speedup(因为一般程序本身就不可能是完全并行的),而VM添加SMP支持所导致的效率损失是30%的话,那么最后的speedup也不过是170% * 0.7 = 119%,这还是基于你的程序是用并行指令写的以及你的机器是并行CPU的情况,其他情况下的用户只会是损失30%的效率。当然,如果将来常见单机CPU数目增加并且你的程序又可以轻松增加并行度话,情况也许会好一些,即便如此,VM/GC所提供的speedup是否能够在多大程度上scale依然是一个问题。


但是message passing在mutable data难免矛盾巴,除非在语言级别禁止在process里用mutable数据以避免锁。

相关推荐

    Mac GHC 8.6.3 64位

    Mac GHC 8.6.3 64位 压缩包, GHC包括一个高效的Haskell编译器ghc,以及一个相似 python 交互环境的解释器 ghci 。GHC能够编译生成高效的可运行程序。

    ghc-proposals, GHC和 GHC/haskell的编译器和语言变化.zip

    ghc-proposals, GHC和 GHC/haskell的编译器和语言变化 GHC建议这个库包含对 Haskell编译器( )的建议更改的规范。 of方案和of转向委员会的目的是扩大of的演化讨论。建议的时间线是什么?作者草拟了一份提案。什么是...

    Atom-haskell-ghc-mod,哈斯克尔.zip

    `Atom-Haskell-GHC-Mod` 是一个专为Atom设计的插件,旨在增强对哈斯克尔语言的支持。GHC(Glasgow Haskell Compiler)是哈斯克尔的主要编译器,提供了丰富的编译时和运行时特性。GHC-Mod是GHC的一个辅助工具,它提供...

    Ghc编译器(windows)

    windows下的GHC,很好用。 windows下的GHC,很好用。 windows下的GHC,很好用。

    Ghc编译器(windows)part2

    windows下的GHC,很好用。 windows下的GHC,很好用。

    Ghc编译器(windows)part3

    windows下的GHC,很好用。 windows下的GHC,很好用。

    Ghc编译器(windows)part4

    Ghc编译器(windows)part4 Ghc编译器(windows)part4

    EIR-GHC-3B三相电流继电器

    【EIR-GHC-3B三相电流继电器】是一种专用于电机、变压器和其他主设备以及输配电系统继电保护的设备。它具备过电流和欠电流保护功能,能够检测到输入信号超出预设范围时,按照设定方案可靠地动作并发出报警。此继电器...

    haskell-ghc-mod:haskell-ghc-mod原子包

    多年来,GHC-Mod一直不受支持。 该软件包仍可与较早的GHC版本一起使用(GHC-Mod仍可在其中使用),但总体而言,其实用性值得怀疑。 因此,该存储库已弃用并存档。 如果您想讨论haskell-ghc-mod,请随时在上打开一个...

    ghc-grin:GHC的GRIN后端

    GHC(Glasgow Haskell Compiler)是Haskell编程语言的一个广泛使用的编译器,以其高效、先进的特性以及对现代编程范式的支持而闻名。GRIN是GHC的一个实验性后端,它代表了“Generic Reduced Instruction Set”,是一...

    GHC磁条读写器程序712.zip

    GHC磁条读写器程序712.zip

    ghc-version:在不同版本的GHC之间快速切换

    在不同版本的GHC之间快速切换ghc-version是用纯便携式外壳编写的脚本,可让您快速轻松地在GHC的不同版本之间进行切换。 如果您要开发可移植的Haskell代码,则这一点很重要。设置首先,请检查该存储库。 git clone ...

    ghc-generic-instances:GHC 的派生实例。 GHC AST 的通用

    在Haskell编程语言中,`GHC`(Glasgow Haskell Compiler)是广泛使用的编译器,它提供了许多高级特性,如类型类、惰性求值、模式匹配等。`GHC`的抽象语法树(AST)是编译器内部表示源代码结构的数据结构。`ghc-...

    vscode-ghc-simple:VSCode的简单GHC(Haskell)集成

    仅使用GHCi的简单Haskell支持。 (图标来自徽标)。 闪亮的徽章 相关和推荐的扩展 为GHC报告的丢失/冗余导入等任务提供了快速修复操作。 通过阅读它产生的诊断信息,它可以与此扩展一起使用。 安装 从获取vscode-...

    GHC--尖端的编译器与交互式环境

    GHC-----------------尖端的编译器与交互式环境

    ghc.rar_ghc_matlab 控制_位置控制_最优控制_最优控制 飞机

    标题中的“ghc.rar_ghc_matlab 控制_位置控制_最优控制_最优控制 飞机”表明这是一个关于使用MATLAB进行飞行控制系统设计,特别是针对三自由度直升机的位置控制和最优控制的项目。MATLAB是数学计算、建模和编程的...

    用于针对多个GHC版本构建Hackage包版本的MassiveHacka.zip

    在Haskell的世界里,GHC(Glasgow Haskell Compiler)是主流的编译器,而Hackage是Haskell的软件仓库,类似于Java的Maven ...如果你正在为Hackage构建包并希望支持多个GHC版本,`MassiveHacka`可能是你的理想选择。

    ghc-stack:破解GHC的堆栈以获得乐趣和收益(以The Glorious Haskell Debugger v0.0.1 Pre-alpha为特色)

    GHC本身支持多种剖析模式,如CPU时间、内存分配等。ghc-stack可能集成了这些功能,使得开发者可以方便地生成剖析报告,并根据报告调整代码。 ### Haskell与C++ 由于Haskell是一种静态类型的函数式编程语言,有时...

    haskell-ghc-mod:haskell-ghc-mod原子包

    它已被废弃以支持ide-haskell的UPI。 您可以在找到说明 执照 版权所有:copyright:2015 Atom-Haskell 贡献者(按提交数量): 尼古拉·亚基莫夫(Nikolay Yakimov) 丹尼尔·格伯 彼得·格拉德基克(Petr ...

Global site tag (gtag.js) - Google Analytics