LLVM開発チームは、ThinLTOを改善するための提案として、マルチスレッド並列コンパイル(MTPC)を発表しました。現在、この技術はモジュール全体を並列化していますが、大規模なモジュールはシリアルに処理され、ボトルネックを生み出しています。MTPCは、作業を関数レベルに分割することで、その障壁を打ち破ろうとしています。
ThinLTOにおけるモジュール内並列処理の仕組み 🚀
MTPCは、大規模なモジュールを関数ベースのより小さな単位に分割する機能を導入します。データの依存関係とグローバル参照が適切に管理されていれば、各関数は独立したスレッドでコンパイルおよび最適化できます。これにより、マルチコアプロセッサが同じモジュール内で同時に動作できるようになり、ソースファイルが非常に大きいプロジェクトのコンパイル時間が短縮されます。
触れてはいけないと思われていたモジュールのドラマ 😅
これまで、大規模なモジュールは静かな生活を享受していました。すべてのコードは、スーパーマーケットのレジの列のように、シリアルにコンパイルされていました。MTPCにより、それらの怠惰な関数は、まるで上司にコーヒーが切れたと言われたかのように、並行して働かざるを得なくなります。開発者は、コンパイラが終了するのを待つ間の休憩に別れを告げることができるでしょう。ただし、同期不足のためにストライキを起こすモジュールが必ず出てくるでしょう。