用于多核llvm的垃圾收集器?

Yor*_*ric 14 garbage-collection multicore llvm

我一直在研究LLVM作为我目前正在实现的语言的新后端.它似乎具有良好的性能,而不是高级生成API,足以支持优化异常优化的低级支持.此外,虽然我自己没有检查过,但Apple似乎已经成功地证明了LLVM用于垃圾收集的多核程序.

到现在为止还挺好.由于我对垃圾收集和多核感兴趣,下一步将是选择一个LLVM多核垃圾收集器.这让我想到了一个问题:什么是可用的?我知道Jon Harrop的HLVM工作,但就是这样.

请注意,我需要跨平台,因此Apple的GC可能不是我想要的(除非有跨平台版本).另请注意,我没有任何反对世界各地的垃圾收集器.

在此先感谢,Yoric

Wil*_*ill 6

LLVM文件说,它不支持多线程的收藏家 还没有.

正如矩阵所示,LLVM的垃圾收集基础设施已经适用于各种收集器,但目前尚未扩展到多线程程序.由于有兴趣,这将在未来添加.

文档确实说要做多线程垃圾收集你需要停止世界,这是一个不可移植的东西:

螺纹 表示多线程的变异器; 在开始可达性分析之前,收集者仍然必须停止mutator("停止世界").停止多线程mutator是一个复杂的问题.它通常需要运行时中特定于平台的高度代码,并在安全点生成精心设计的机器代码.

但是,线程之间的共享状态是一个令人讨厌的扩展问题.如果您的语言仅通过"任务"之间的消息传递进行通信,因此工作线程之间没有共享状态,那么您可以为每个线程堆使用每线程收集器吗?


Jon*_*rop 5

Will提供的引用是关于LLVM对GC的内在支持,在这里你用C++代码扩充LLVM,告诉它如何遍历堆栈,解释堆栈帧,注入读写障碍等等.我的HLVM项目的主要目标是以最小的努力和风险变得有用,因此我选择将阴影堆栈用于"不合作的环境",以避免攻击LLVM的不成熟内部.因此,关于LLVM对GC的内在支持的那些陈述不适用于HLVM的垃圾收集器,因为它根本不使用该基础结构.我的结果非常引人注目:您可以轻松地实现卓越的性能(串行性能并行性能).

我相信HLVM已经在包括Mac OS X在内的Unix上运行开箱即用,因为它只需要POSIX线程.我非常不同意写一个停止世界的GC是很困难的说法:我花了5天时间写了一个100行的多核垃圾收集器,而我对计算机几乎一无所知.我无法相信移植到Windows也很困难.