OCaml 多核 - 2020 年 2 月

欢迎阅读来自多核 OCaml 团队的 2020 年 2 月新闻更新,团队成员分布在英国、印度、法国和瑞士!这篇文章延续了上个月的更新,由 @shakthimaan 和 @kayceesrk 共同撰写。

The OCaml 4.10.0 版本的发布已成功将一些先决条件功能推送到上游编译器。我们在 2 月份的工作重点是让多核 OCaml 分支在完整 OCaml 语言方面“功能齐全”,并进行广泛的基准测试和压力测试,以测试我们的两个次要堆实现。

为此,我们已经将许多重要的补丁合并到多核 OCaml 树中,这些补丁基本上提供了对语言功能的完全覆盖。我们鼓励您测试这些补丁是否有回归,并向我们提供任何改进或报告缺陷。目前正在审核的 OCaml PR 和问题也在进行中,我们希望在 4.11 版本周期中完成这些工作。我们已将一组新的并行基准测试添加到我们的Sandmark 基准测试套件(实时实例此处),包括对构建设置的增强。

多核 OCaml

已完成

以下 PR 已合并到多核 OCaml 中

  • ocaml-multicore/ocaml-multicore#281 引入 Forcing_tag 以修复与延迟值相关的并发错误

    Forcing_tag 用于实现延迟值以处理并发错误。它表现得像一个锁定位,任何变异器并发访问都会在该域上引发异常。

  • ocaml-multicore/ocaml-multicore#282 安全点

    安全点的初步版本已合并到多核 OCaml 树中。 ocaml-multicore/ocaml-multicore#187 还包含更多关于如何在将来的 PR 中改进覆盖率的讨论和背景信息。

  • ocaml-multicore/ocaml-multicore#285 引入“机会性”主收集切片

    此 PR 中实现了“机会性工作信贷”,它为在等待与其他域同步时执行标记和清除工作奠定了基础。

  • ocaml-multicore/ocaml-multicore#286 在 caml_gc_log 中执行 fflush 和可变参数

    caml_gc_log() 函数已更新,以确保仅在启用 GC 日志记录时调用 fflush

  • ocaml-multicore/ocaml-multicore#287 提高 EVENT_BUF_SIZE

    在使用事件跟踪数据进行调试时,减少缓冲区刷新时间非常有用,因此 EVENT_BUF_SIZE 现在已增加。

  • ocaml-multicore/ocaml-multicore#288 写屏障优化

    此 PR 通过使用 intnat 来避免符号扩展,从而关闭了 Sandmark 中 chameneos_redux_lwt 基准测试的回归,并清理了 write_barrier 以提高整体性能。

  • ocaml-multicore/ocaml-multicore#290 将扫描预算统一为字大小

    PR 将所有扫描工作单元更新为字大小。这是为了处理块中设置、扫描和大型分配的预算之间的差异。

正在进行

  • 为多核 OCaml 的同步次要垃圾收集器实现正在进行大量工作,包括对停止世界 (stw) 分支进行基准测试。我们将发布未来更新中对此的评估结果,因为我们正在对运行时与主流运行时进行全面评估。

基准测试

Sandmark 现在支持运行并行基准测试。我们现在还可以获得标准 OCaml 和多核 OCaml 编译器的 GC 延迟测量。

  • ocaml-bench/sandmark#73 更多并行基准测试

    现在,许多并行基准测试,例如 N 体、快速排序和矩阵乘法,已添加到 Sandmark 中!

  • ocaml-bench/sandmark#76 提升包。修复 CI。

    更新和提升 Sandmark 中的包后,现在可以执行持续集成构建。

  • ocaml-bench/sandmark#78 添加支持在主干上收集关于 GC 暂停时间的的信息

    PR 现在可以帮助处理运行时日志,并生成一个 .bench 文件来捕获 GC 暂停时间。这在标准 OCaml 和多核 OCaml 中都有效。

  • ocaml-bench/sandmark#86 读取和写入 Irmin 基准测试

    正在使用 Git 作为其文件系统来测试 Irmin 的合并功能,并使用不同的读写速率进行测试。

  • 许多其他并行基准测试,如归并排序、弗洛伊德-沃舍尔矩阵、素数生成、并行映射、过滤等,已添加到 Sandmark 中。

文档

  • 目前正在使用 domainslib 和修改 Domains 来创建关于多核 OCaml 并行编程的章节示例。我们将发布一个早期草稿供社区反馈。

OCaml

本月向 OCaml 开放了一个 PR,该 PR 修复了封送方案以使其与多核兼容。完整的上游多核先决条件在编译器问题跟踪器中进行了标记。

  • ocaml/ocaml#9293 对封送使用 addrmap 哈希表

    来自多核 OCaml 的哈希表 (addrmap) 实现已移植到上游 OCaml,以避免使用 GC 标记位来表示已访问状态。

缩略词

  • CTF:通用跟踪格式
  • CI:持续集成
  • GC:垃圾收集器
  • PR:拉取请求

与往常一样,非常感谢我们的 OCaml 开发人员和用户,他们审查了我们的代码、报告了错误或在本月提供了其他帮助。