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 开发人员和用户,他们审查了我们的代码、报告了错误或在本月提供了其他帮助。