OCaml 多核心 - 2020 年 2 月

歡迎來到多核心 OCaml 團隊在 2020 年 2 月的新聞更新,我們的團隊分散在英國、印度、法國和瑞士! 這是繼上個月的更新之後,由 @shakthimaan 和 @kayceesrk 共同整理。

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 來避免符號擴展,並清理 write_barrier 以提高整體效能,從而解決了 Sandmark 中 chameneos_redux_lwt 基準測試的回歸問題。

  • 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 現在可協助處理執行時期記錄,並產生擷取 GC 暫停時間的 .bench 檔案。 這適用於一般 OCaml 和多核心 OCaml。

  • ocaml-bench/sandmark#86 讀取和寫入 Irmin 基準測試

    正在使用不同的讀取和寫入速率測試測量 Irmin 以 Git 作為其檔案系統的合併功能測試。

  • 許多其他平行基準測試,例如合併排序、Floyd-Warshall 矩陣、質數產生、平行映射、篩選等等,已新增到 Sandmark。

文件

  • 目前正在開發使用 domainslib 和修改域的範例,以編寫多核心 OCaml 的平行程式設計章節。 我們將向社群發布早期草稿以徵求您的意見。

OCaml

本月開啟了一個 OCaml PR,它修復了可與多核心相容的編組方案。 完整的上游多核心先決條件已在編譯器問題追蹤器中標記。

  • ocaml/ocaml#9293 使用 addrmap 雜湊表進行編組

    已將來自多核心 OCaml 的雜湊表 (addrmap) 實作移植到上游 OCaml,以避免使用 GC 標記位元來表示已訪問的狀態。

縮寫

  • CTF:通用追蹤格式
  • CI:持續整合
  • GC:垃圾收集器
  • PR:提取請求

一如既往,非常感謝我們的 OCaml 開發人員和使用者,他們審查了我們的程式碼、報告了錯誤或在本月提供了其他協助。