BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース OCaml 5、マルチコアサポートを導入へ

OCaml 5、マルチコアサポートを導入へ

原文(投稿日:2021/10/11)へのリンク

OCamlチームが言語ランタイムのマルチコアサポート追加に関する詳細なロードマップを公開した。OCaml 5に向けた次期マイナーリリースでは、マルチコアランタイムと標準ランタイムの統合に重点が置かれている。

OCamlマルチコア版の開発は順調に進んで、OCamlのメインブランチへのさらなる統合のためには、Ocamlマルチコアへの切り替えを完全にコミットする必要のある段階に達している。

マルチコアサポートとは、共有メモリ並列処理(shared memory parallel multiprocessin)を意味する。単一CPU内の異なるコア上で動作する複数のスレッドを使った本格的な並列処理が、OCamlプログラムで利用できるようになる。OCamlコミュニティは長年にわたって、同言語に対称型マルチプロセッシングを導入する作業に取り組んできたが、並列ガベージコレクタの実装が大きな障害となっていた。

Multicore OCamlでは、並列処理の単位を表現するためにドメインの概念を使用して、これをネイティブスレッドにマップする方法を用いる。低レベルのドメインAPIは、spawn、join、wait、notifyといった一般的なオペレーションに加えて、ドメインローカルストレージやアトミックなメモリ操作を少ないオーバーヘッドでサポートする。

ドメイン間でのメモリ共有を可能にするために、Multicore OCamlでは、標準OCamlで使用している世代別、非移動、インクリメンタルなマーク・アンド・スイープGCをリプレースする新たなガベージコレクタが開発された。この新しいMulticore OCaml GCは、マイナーヒープ(若いオブジェクト)用のストップ・ザ・ワールド型並列コレクションと、メジャーヒープ(GBに達する場合もある長期間生存オブジェクト)用の最も並列性の高いマーク・アンド・スイープコレクションを組み合わせて使用する。

実務で運用されている数百万行のOCamlコードの中に、並列性や並行性を考慮して書かれたものがまったくない、という事実を考えると、下位互換性とパフォーマンスの維持がひとつの大きな懸念点になるが、

新たに開発されたGCは、シーケンシャルなプログラムのパフォーマンスと機能的な下位互換性のバランスを巧に取ることによって、最新のマルチコアプロセッサ上で優れたスケール性を発揮します。

実際に最新ベンチマークにおいて、新GCはマイナーヒープコレクションで10ms、メジャーヒープコレクションで5msの停止時間と、旧OCaml GCに対して1パーセントの総合的パフォーマンス改善を実現している。

注意が必要なのは、OCaml 5に含まれるのは最低限のマルチコアランタイムシステムであることだ。ユーザ向けの並行および並列処理ライブラリの安定版は、最初のリリースには含まれない。この点に関しては、TaskTaskプール、async/await、parallel forなど、数多くの実証済みの抽象化をDomain API上で提供する、DomainLib APIの実現に向けた大規模な試験が実施中である。ただし、OCamlのメンテナたちによれば、"ユーザ向け並行並列プログラミングの抽象化機能を長期的に提供するための開発作業がまだ残っている"ため、これらの抽象化はOCaml 5では見送られることになりそうだ。

メモリ共有プログラミング以外にも、Multicore OCamlでは、ジェネレータや軽量スレッド、コルーチンなど抽象化を可能にする非ローカルコントロールフローのための基盤を提供する、エフェクトハンドラの導入による並行プログラミングの改善も実現されている。

Multicore OCamlは、2022年3月~4月に提供される次期メジャーリリースのOCaml 5では標準になる予定だ。ただし、自身でビルドを行うか、OPAMを使用してインストールすれば、Multicore OCamlを今すぐ使用することができる。

この記事に星をつける

おすすめ度
スタイル

BT