代码之家  ›  专栏  ›  技术社区  ›  Yoric

多核llvm的垃圾收集器?

  •  13
  • Yoric  · 技术社区  · 16 年前

    很长一段时间以来,我一直在研究LLVM作为我目前实现的语言的新后端。它似乎有很好的性能,相当高级别的生成api,足够低级别的支持来优化外来的优化。此外,尽管我还没有亲自检查过,但苹果似乎已经成功地演示了如何将LLVM用于垃圾收集的多核程序。

    到目前为止,还不错。由于我对垃圾收集和多核都感兴趣,下一步将选择LLVM多核垃圾收集器。这让我想到一个问题:什么是可用的?我知道 Jon Harrop 这是HLVM的工作,但仅此而已。

    请注意,我需要跨平台,所以Apple的GC可能不是我想要的(除非有跨平台版本)。还请注意,我并不反对停止世界垃圾收集者。

    提前谢谢,

    2 回复  |  直到 16 年前
        1
  •  6
  •   Will    16 年前

    LLVM docs say that it does not support multi-threaded collectors 然而 .

    如矩阵所示,LLVM 垃圾收集基础设施 已经适合各种 收集器,但当前没有 扩展到多线程程序。这个 将在将来添加

    文档确实指出,要进行多线程垃圾收集,您需要阻止世界,这是一个不可移植的东西:

    螺纹 表示多线程变异器;收集器仍必须停止 突变(“停止世界”)之前 停止多线程变异器是一个 需要高度特定于平台的代码 在运行时,以及 精心设计的机器代码 安全点。

    然而,线程之间的共享状态是一个棘手的扩展问题。如果您的语言仅通过“任务”之间的消息传递进行通信,因此在工作线程之间没有共享状态,那么您可以使用每线程收集器作为每线程堆吗?

        2
  •  5
  •   J D    16 年前

    给出的引文是关于LLVM对GC的内在支持,其中用C++代码扩充LLVM,告诉它如何走栈、解释堆栈帧、注入读写障碍等。我的主要目标 HLVM 项目将以最小的努力和风险变得有用,因此我选择在“不合作的环境”中使用影子堆栈,以避免对LLVM不成熟的内部进行黑客攻击。因此,那些关于LLVM对GC的内在支持的声明不适用于 的垃圾收集器,因为它根本不使用该基础结构。我的结果非常令人信服:你可以用最小的努力获得出色的性能( serial performance parallel performance ).

    HLVM公司 已经在unix(包括macosx)上运行,因为它只需要POSIX线程。我强烈反对那种认为编写stop the world GC很难的说法:我花了5天时间编写了一个100行多核垃圾收集器,而我对计算机几乎一无所知。我也不敢相信移植到Windows会很困难。

    推荐文章