×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
わんくま同盟 大阪勉強会 #67 Profile Guided Optimization (PGO) ソースコードを変更せずに少しだけ高速 に
Slide 2
Slide 2 text
わんくま同盟 大阪勉強会 #67 目次 • 自己紹介 • PGOとは • PGOの効果比較 • まとめ
Slide 3
Slide 3 text
わんくま同盟 大阪勉強会 #67 自己紹介 • ハンドルネーム: MSR (@msr386) • Chromium Contributor (1回だけ) • ウェブブラウザ作っています http://app.tungsten-start.net/
Slide 4
Slide 4 text
わんくま同盟 大阪勉強会 #67 Profile Guided Optimization (PGO)とは • コンパイラの最適化機能の1つ • プログラムを実行して関数の実行頻度など の情報を収集し、それをもとに最適化を行 う • プログラム全体の最適化(WPO)といった 普通の最適化コンパイルよりも一歩踏み込 んだ最適化が可能 • C/C++ ネイティブコード専用
Slide 5
Slide 5 text
わんくま同盟 大阪勉強会 #67 PGOビルドの流れ 1. プロファイル採取用バイナリをビルド (PGI、またはインストルメントと呼ぶ) 2. 1.でビルドしたアプリを実行してプロ ファイルを収集 3. 収集したプロファイルを基に最適化
Slide 6
Slide 6 text
わんくま同盟 大阪勉強会 #67 パフォーマンス解析も可能 • 情報を見るにはpgomgrコマンドを使う D:¥src¥out¥Release>pgomgr /summary chrome_child.pgd Microsoft(R) Profile Guided Optimization Manager 12.00.31101.0 Copyright (C) Microsoft Corporation. All rights reserved. PGD ファイル: chrome_child.pgd 02/03/2015 00:28:32モジュールの数: 1 関数の数: 586981 Arc の数: 671409 値の数: 32002 段階名: 静的命令: 8323316 基本ブロック: 1814819 平均 BB サイズ: 4.6 動的命令: 726802157884 entry static dynamic % run 関数名 count instr instr total total S32A_Opaque_BlitRow32_SSE2 20676366 67 24168429278 3.3 3.3 v8::internal::Internals::HasHeapObjectTag 3686518393 6 18303068176 2.5 5.8 Color32_SSE2 203563802 120 14054118872 1.9 7.8 SkARGB32_Blitter::blitAntiH 110836115 66 9857294901 1.4 9.1
Slide 7
Slide 7 text
わんくま同盟 大阪勉強会 #67 メリットとデメリット メリット • パフォーマンス解析ができる • 生成されるバイナリは小さくなる傾向にある • うまいプロファイルなら9%程度高速 • ソースコードを変更する必要なし デメリット • ビルドステップ、リソース消費増加 • コンパイラバグ遭遇確率も増加 • 苦労した割に速くならないこともある
Slide 8
Slide 8 text
わんくま同盟 大阪勉強会 #67 PGOの効果比較 • Firefoxでは実績が多数あるので、 実績の少ないChromiumで試す • 51.0.2704.106 32ビット版を使用 • プロファイルはWeb上のベンチマーク数 種類を走らせたものを使用 • 速度比較はJavaScript、DOMに限定
Slide 9
Slide 9 text
わんくま同盟 大阪勉強会 #67 Chromium PGOビルド 比較対象: 1. Chrome相当のリリースビルド (Official) 2. 全コードをプロシージャ間最適化したビ ルド (MAX) 3. PGOビルド 4. Chrome (参考記録 Official同等確認用)
Slide 10
Slide 10 text
わんくま同盟 大阪勉強会 #67 PGO, 非PGOベンチマーク比較(1) • バイナリサイズ、ビルドコスト Official MAX PGO Chrome バイナリサイズ *1 43.7MB 50.5MB 40.2MB 43.8MB 中間ファイル 42.1GB 79.4GB 80.6GB N/A ビルド時間 1時間16分 1時間43分 約6時間 *2 N/A ビルド中最大メ モリ使用量 *3 16.8GB 31.5GB 35.5GB N/A *1 chrome_child.dll *2 全工程の合計時間 *3 リンク2並列時 バイナリサイズ: PGO < Official < MAX ビルド時間: Official < MAX << PGO メモリ使用: Official << MAX < PGO
Slide 11
Slide 11 text
わんくま同盟 大阪勉強会 #67 PGO, 非PGOベンチマーク比較(2) • 速度比較 (Overall Score) Official MAX PGO Chrome Dromaeo DOM 3112.03±1.1% 3221.44±1.1% 3290.65±1.1% 3175.21±0.6% Simple Maze 253.29 280.59 275.19 250.96 Speedometer 146.8±1.0 148.1±0.9 162.8±1.1 146.9±1.0 Dromaeo JS 2381.51±1.2% 2387.58±0.7% 2451.32±1.6% 2383.98±0.7% JetStream 242.14 ±2.2 239.76 ±3.3 245.06 ±4.0 240.03 ±1.6 Octane 2.0 40670 41226 43734 42151 Peacekeeper 4954 5129 5369 4897
Slide 12
Slide 12 text
わんくま同盟 大阪勉強会 #67 Dromaeo詳細(1) Dromaeo JavaScript Tests
Slide 13
Slide 13 text
わんくま同盟 大阪勉強会 #67 Dromaeo詳細(2) DOM Core Tests
Slide 14
Slide 14 text
わんくま同盟 大阪勉強会 #67 MAXとPGOとの比較 優位差があったもの: • Speedometer – 9% • Peacekeeper – 4% • Dromaeoの一部項目 DOM Query, DOM Traversal, Arrays, Base64 Encoding/Decoding ※DOMが速い?
Slide 15
Slide 15 text
わんくま同盟 大阪勉強会 #67 MAXとPGOとの比較 優位差がなかったもの: • Jetstream • Octane (誤差大) • Simple Maze (誤差大) ※JavaScriptはそれほど速くならない
Slide 16
Slide 16 text
わんくま同盟 大阪勉強会 #67 まとめ • PGOはソースコード変更なしで高速化可 能 • 時間とリソースは必要 • 大規模であれば適当なプロファイルでも速 くなる • 使うなら最終リリースで
Slide 17
Slide 17 text
わんくま同盟 大阪勉強会 #67 References • コンパイラの最適化についてすべてのプログラマが知っておくべき こと https://msdn.microsoft.com/ja-jp/magazine/dn904673.aspx • ガイド付き最適化のプロファイル https://msdn.microsoft.com/ja-jp/library/e7k32f4k.aspx • リンカーオプション /LTCG https://msdn.microsoft.com/ja-jp/library/xbf3tbeh.aspx • pgomgr https://msdn.microsoft.com/ja-jp/library/2kw46d8w.aspx • ninja generator doesn't handle LinkTimeCodeGeneration/ProfileGuidedDatabase for PGO https://bugs.chromium.org/p/gyp/issues/detail?id=385 • Windows Build Instructions (Chromium) https://chromium.googlesource.com/chromium/src/+/mast er/docs/windows_build_instructions.md