OCaml 多核 - 2020 年 5 月

多核 OCaml:2020 年 5 月

歡迎來到多核 OCaml 團隊 2020 年 5 月的更新!與先前的更新一樣,非常感謝 @shakthimaan 和 @kayceesrk 協助整理本月份的總結。

2020 年 5 月的一個主要里程碑是完成了將多核 OCaml 從 4.06 版本重構到 4.10 版本!執行停止世界平行次要垃圾收集的平行次要 GC 變體是編譯器的預設分支,這表示與較舊的次要 GC 設計相比,現在與 C 綁定的相容性要簡單得多。

我收到許多問題,詢問這是否表示多核 OCaml 現在可以與 opam 生態系統「直接使用」。還沒有完全達到:我們估計我們現在距離這項功能實現還差一個 PR,這需要將現有的 Threads 模組回溯移植到多核 OCaml,以支援現有 OCaml 支援的較舊(非在執行階段平行但並行)的執行緒使用方式。這項工作是由 @jhw 在一年前在 #240 中開始的,現在由 @engil 在 #342 中重構和審查。一旦合併並由我們在一批套件和大量建置上進行測試,我們應該就可以開始使用 opam 使用多核 OCaml。請繼續關注下個月的更多資訊!

多核 OCaml 正在進行和已完成的任務首先列出,然後是 Sandmark 基準測試專案的改進。最後,為方便您參考,提到了對上游 OCaml 的貢獻的狀態。本月還召開了核心 OCaml 執行階段開發人員的會議,以分配重構後的任務(例如移植 statmemprof、如何處理非 x86 架構、Windows 支援等),以確保更完整地了解未來上游任務。任務列表很長,但長度正在穩步縮短。

至於目前如何貢獻,現在已經開始在適當的程式設計抽象上進行令人難以置信的令人興奮的工作,以支援 OCaml 中的平行演算法。請參閱此執行緒以了解更多資訊,並參閱Domainslib 儲存庫以了解更多傳統平行演算法的低階範例。在大約一個月左右,我們預期多核切換也將更適合與 opam 一起使用,但不要讓這阻止您今天將您最喜歡的平行基準移植到 Domainslib。

多核 OCaml

進行中

  • ocaml-multicore/ocaml-multicore#339 網域本地儲存的提案

    已建立一個在多核 OCaml 中實作網域本地儲存的新提案。

  • ocaml-multicore/domainslib#8 如果網域數量大於 8,則任務程式庫會減速

    這項正在進行的調查是關於為什麼當網域數量大於 8 時,domainslib 版本 0.2 對於生命遊戲基準測試會出現減速。

  • ocaml-multicore/ocaml-multicore#340 修復 concurrent_minor_gc 中的 Atomic.exchange

    已提供使用 Atomic.getAtomic.compare_and_setAtomic.exchange 實作,以取得正確的語意來處理 interp.c 中的判斷失敗。

  • ocaml-multicore/ocaml-multicore#338 引入 Lazy.try_force 和 Lazy.try_force_val

    已針對並行惰性抽象實作 Lazy.try_forceLazy.try_force_val 函式,以處理 RacyLazy 例外狀況。

  • ocaml-multicore/ocaml-multicore#333 隨機模組函式在多個核心上減速

    已觀察到 Random 模組在多個核心上會減速,並且正在詳細分析該問題。

    perf Random

  • ocaml-multicore/ocaml-multicore#343 修復 extcall noalloc DWARF

    此修補程式提供 extcall noalloc 發出的 DWARF 資訊的修正。此 PR 目前正在審查中。

已完成

  • ocaml-multicore/ocaml-multicore#337 更新 opam 檔案至 4.10.0+multicore

    已完成將多核 OCaml 重構至 4.11 分支 (parallel_minor_gc_4_11) 點!適用於 4.10.0+multicore 的 opam 檔案已在 multicore-opam 儲存庫中設為預設值。

  • ocaml-multicore/ocaml-multicore#335 將 byte_domain_state.tbl 新增至安裝檔案

    現在已在 runtime/Makefile 中包含一個安裝 byte_domain_state.tblcaml/*.h 檔案的修補程式,這是 parallel_minor_gc_4_10 分支所需要的。

  • 使用 SPIN 模型檢查器的多核 OCaml 主要 GC 實作驗證可在下列 GitHub 儲存庫中取得:ocaml-multicore/multicore-ocaml-verify

基準測試

進行中

  • ocaml-bench/sandmark#115 任務 API 連接埠:LU 分解、Floyd Warshall、Mandelbrot、N 體

    將以下程式 - LU 分解、Floyd Warshall、Mandelbrot 和 N 體移植為使用任務 API。

  • ocaml-bench/sandmark#37 使基準測試包裝器可由使用者設定

    目前正在評估動態指定基準測試指令碼的輸入命令及其各自引數的功能。

  • ocaml-bench/sandmark#106 升級 dune > 2.0

    Sandmark 使用 dune 1.11.4,我們需要支援大於 2.0 的 dune 以向前發展。正在測試具有必要套件建置的升級路徑。

已完成

  • ocaml-bench/sandmark#109 已新增 sequential-interactive.ipynb

    已包含一個用於執行和分析循序基準測試的互動式筆記本。給定具有基準測試檔案的成品目錄,筆記本會在 GUI 中提示您選取不同的提交和編譯器變體進行分析。以下顯示 UI 的範例螢幕擷取畫面

    Sequentials select comparison

    PR 新增了錯誤處理、使用者輸入驗證,並且專案 README 也已更新。

  • ocaml-bench/sandmark#111 將平行初始化和平行複製新增至 LU 分解基準測試

    現在已將平行初始化新增至 LU 分解數值基準測試 (benchmarks/multicore-numerical/LU_decomposition_multicore.ml)。

  • ocaml-bench/sandmark#113 在 Makefile 中使用 --format=columns 與 pip3 list

    現在已使用 --format=columns 選項,將使用 pip3 list 時出現的「已棄用:預設格式將來會切換為欄」警告的修正新增至 Makefile。

  • ocaml-bench/sandmark#116 使用 sudo 進行平行基準測試建置

    已使用 sudo 和 OPAM 環境變數的正確組合來更新 Makefile,以便我們現在可以在 Sandmark 中執行平行基準測試。僅在使用 chrt 命令時才需要 sudo 命令。我們現在可以針對循序和平行基準測試執行夜間建置!

  • ocaml-bench/sandmark#118 重構 README 並新增 JupyterHub 資訊

    現在已更新 Sandmark README 檔案,以包含有關組態、JupyterHub 的使用方式、基準測試和快速入門指南的資訊!

OCaml

進行中

  • ocaml/ocaml#9541 新增儀器化執行階段的手冊頁面

    已建立儀器化執行階段事件記錄追蹤的手冊草稿。請隨意檢閱文件並分享您寶貴的意見反應。

  • ocaml/dune#3500 支援針對 OCaml 4.11 儀器化執行階段建置可執行檔

    OCaml 4.11.0 具有儀器化執行階段的內建支援,並且最好讓 dune 產生儀器化目標。

已完成

  • ocaml/ocaml#9082 事件記錄追蹤系統

    使用二進位追蹤格式 (CTF) 的 OCaml 執行階段事件記錄追蹤提案現在已與上游 OCaml (4.11.0) 合併。

  • ocaml/ocaml#9534 [RFC] 動態檢查裸指標

    一個用於新增動態識別 4.10.0 編譯器中的裸指標的功能的 RFC。

  • ocaml/ocaml#9573 重新實作 Unix.create_process 和相關函式,而不使用 Unix.fork

    Unix 模組中的處理程序建立函式不適合多核 OCaml,無論是在行為還是效率方面。此修補程式提供的實作使用 posix_spawn

  • ocaml/ocaml#9564 新增堆外區塊標頭的巨集

    此 PR 會新增巨集定義,以在 runtime/caml/mlvalues.h 中建構堆外區塊標頭。目的是將標頭用於堆外物件。

一如既往,我們感謝所有 OCaml 開發人員和使用者對專案的持續支援和貢獻。請在外面保持安全。

縮寫

  • API:應用程式程式設計介面
  • CTF:通用追蹤格式
  • DWARF:使用屬性記錄格式進行除錯
  • GC:垃圾收集器
  • GUI:圖形使用者介面
  • LU:下三角-上三角
  • OPAM:OCaml 套件管理員
  • PIP:Pip 安裝 Python
  • PR:提取請求
  • RFC:徵求意見稿
  • UI:使用者介面