ニュース

Google Chrome、新最適化で読み込みを最大10%高速化

Chrome M85

 Googleは25日(現地時間)、Webブラウザ「Chrome」をM85に更新。プロファイルに基づく最適化(Profile Guided Optimization:PGO)を適用することにより、ページの読み込みを最大で10%ほど高速化したと発表した。

 PGOは、M53の時点でMicrosoft Visual C++を使用しており、Windows向けに実装されていた。M85では新たにClangコンパイラを採用し、MacとWindows両方に導入される。開発チームのテストによれば、最大で10%の高速化を実現できたという。

 実際に編集部の機材(Razer Blade Stealth 4K Model 2019)で試したところ、Speedomater 2.0で約7%の速度向上が確認できた。

手持ち機材でのM85のSpeedomater 2.0の結果
更新前の旧バージョン
手持ち機材でのM84のSpeedomater 2.0の結果

 ちなみにPGOの詳細についてはMicrosoftが公開しているドキュメントが詳しいが、これによれば最適化には以下のような手法が用いられている。

・インライン展開 - 関数Aが関数Bを頻繁に呼び出し、関数Bが比較的小さい場合は、BがAにインライン展開される
・仮想呼び出し推理 - 仮想呼び出しまたは関数ポインタからのその他の呼び出しが特定の関数を頻繁に呼び出す場合、呼び出される関数に条件付きで実行される直接呼び出しを挿入してインライン展開する
・レジスタ割り当て - プロファイルデータに基づいたレジスタの割り当てが改善される
・基本ブロックの最適化 - 特定フレーム内で一時的に実行されるブロックを同じページセットに配置し、メモリのオーバーヘッドを最小限に抑える
・サイズ/速度の最適化 - プログラムでもっとも多く実行時間が費やされる関数の速度を最適化
・関数のレイアウト - コールグラフとプロファイルされた呼び出し元/呼び出し先の動作に基づき、同じ実行パスになる傾向のある関数を同じセクション内に配置
・条件付き分岐の最適化 - switchステートメント内の特定の値がほかの値より頻繁に使用されているかどうかを確認可能。また、if...elseのどちらがより頻繁にtrueになるかに応じて、ブロックを先に配置する
・実行されないコードの分離 - プロファイル実行中に呼び出されないコードを、一連のセクションの最後に追加される特別なセッションに移動
・EHコードの分離 - EHコードは例外的に実行されるだけなので、例外が例外的な条件で飲み発生すると判断できる場合に、個別のセクションへ移動
・メモリの組み込み - 頻繁に呼び出されるかどうかを判断し、組み込みの拡張を最適化。また、移動やコピーのブロックサイズに基づいて最適化

 このほか、使われていないタブをスロットリングし、バッテリとメモリを節約する機能も、ベータ版でローリングアウトしたとしている。