GCC にコンパイルプロセスの並列化のサポートを追加するプロジェクト

研究プロジェクトの一環として 並列 GCC コンパイル プロセスを複数の並列スレッドに分割できる機能を GCC に追加する作業が開始されました。 現在、マルチコア システムでのビルド速度を向上させるために、make ユーティリティは個別のコンパイラ プロセスの起動を使用し、それぞれが個別のコード ファイルをビルドします。 新しいプロジェクトでは、コンパイラ レベルでの並列化を実験中です。これにより、マルチコア システムのパフォーマンスが向上する可能性があります。

テスト用 準備 GCC の別個の並列化ブランチでは、スレッド数を設定するための新しいパラメーター「—param=num-threads=N」が提供されます。 初期段階では、プロシージャ間の最適化を個別のスレッドに転送することを実装しました。これらのスレッドは関数ごとに周期的に呼び出され、簡単に並列化できます。 関数間の相互作用を評価するハードウェアに依存しない最適化を担当する GIMPLE 操作は、別のスレッドに配置されます。

次の段階では、ハードウェア プラットフォームの特性を考慮して、プロシージャ間の RTL 最適化を別のスレッドに移動することも計画されています。 その後、呼び出しの詳細に関係なく、関数内のコードに適用されるプロシージャ内最適化 (IPA) の並列化を実装する予定です。 現時点での制限リンクはガベージ コレクターです。これは、マルチスレッド モードでの実行中にガベージ コレクション操作を無効にするグローバル ロックを追加しました (将来、ガベージ コレクターは GCC のマルチスレッド実行に適応される予定です)。

パフォーマンスの変化を評価するために、100 万行を超えるコードと 1700 の関数を含む gimple-match.c ファイルをアセンブルするテスト スイートが準備されました。 5 つの物理コアと 8250 つの仮想コア (ハイパースレッディング) を備えた Intel Core i4-8U CPU を搭載したシステムでのテストでは、プロシージャル内 GIMPLE 最適化の実行時間が、7 つのスレッドを実行している場合は 4 秒から 2 秒に、3 つのスレッドを実行している場合は 4 秒に短縮されることが示されました。スレッド、つまり検討中の組立ステージの高速化はそれぞれ1.72倍と2.52倍に達しました。 テストでは、ハイパースレッディングで仮想コアを使用してもパフォーマンスの向上につながらないことも示されました。

GCC にコンパイルプロセスの並列化のサポートを追加するプロジェクト

全体的なビルド時間は約 10% 短縮されましたが、予測によれば、RTL 最適化を並列化することで、より具体的な結果を達成できるようになります。これは、この段階でコンパイル中にかなり長い時間がかかるためです。 RTL 並列化後、総アセンブリ時間は約 1.61 分の 5 に短縮されます。 その後、IPA 最適化を並列化することで、ビルド時間をさらに 10 ~ XNUMX% 短縮することが可能になります。

GCC にコンパイルプロセスの並列化のサポートを追加するプロジェクト

出所: オープンネット.ru

コメントを追加します