Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PGO
Search
MSR
July 09, 2016
0
140
PGO
PGO (Profile Guided Optimization)について。
PGOの概要、Chromiumを通常最適化ビルドしたものとPGOビルドしたものを比較。
MSR
July 09, 2016
Tweet
Share
More Decks by MSR
See All by MSR
horizon
msr_i386
0
1.3k
fujiaire by shell
msr_i386
0
1.1k
colaboratory
msr_i386
0
170
yes command faster
msr_i386
0
410
Amazon Dash Hack
msr_i386
0
1.4k
cgroup
msr_i386
0
1.4k
discover fork-bomb
msr_i386
0
1.9k
kanji banner
msr_i386
0
1.9k
ASCII art oneliner
msr_i386
0
2k
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Navigating Team Friction
lara
191
16k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Code Review Best Practice
trishagee
73
19k
Writing Fast Ruby
sferik
630
62k
GraphQLとの向き合い方2022年版
quramy
50
14k
GitHub's CSS Performance
jonrohan
1032
470k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.2k
Practical Orchestrator
shlominoach
190
11k
Embracing the Ebb and Flow
colly
88
4.9k
Transcript
わんくま同盟 大阪勉強会 #67 Profile Guided Optimization (PGO) ソースコードを変更せずに少しだけ高速 に
わんくま同盟 大阪勉強会 #67 目次 • 自己紹介 • PGOとは • PGOの効果比較
• まとめ
わんくま同盟 大阪勉強会 #67 自己紹介 • ハンドルネーム: MSR (@msr386) • Chromium
Contributor (1回だけ) • ウェブブラウザ作っています http://app.tungsten-start.net/
わんくま同盟 大阪勉強会 #67 Profile Guided Optimization (PGO)とは • コンパイラの最適化機能の1つ •
プログラムを実行して関数の実行頻度など の情報を収集し、それをもとに最適化を行 う • プログラム全体の最適化(WPO)といった 普通の最適化コンパイルよりも一歩踏み込 んだ最適化が可能 • C/C++ ネイティブコード専用
わんくま同盟 大阪勉強会 #67 PGOビルドの流れ 1. プロファイル採取用バイナリをビルド (PGI、またはインストルメントと呼ぶ) 2. 1.でビルドしたアプリを実行してプロ ファイルを収集
3. 収集したプロファイルを基に最適化
わんくま同盟 大阪勉強会 #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
わんくま同盟 大阪勉強会 #67 メリットとデメリット メリット • パフォーマンス解析ができる • 生成されるバイナリは小さくなる傾向にある •
うまいプロファイルなら9%程度高速 • ソースコードを変更する必要なし デメリット • ビルドステップ、リソース消費増加 • コンパイラバグ遭遇確率も増加 • 苦労した割に速くならないこともある
わんくま同盟 大阪勉強会 #67 PGOの効果比較 • Firefoxでは実績が多数あるので、 実績の少ないChromiumで試す • 51.0.2704.106 32ビット版を使用
• プロファイルはWeb上のベンチマーク数 種類を走らせたものを使用 • 速度比較はJavaScript、DOMに限定
わんくま同盟 大阪勉強会 #67 Chromium PGOビルド 比較対象: 1. Chrome相当のリリースビルド (Official) 2.
全コードをプロシージャ間最適化したビ ルド (MAX) 3. PGOビルド 4. Chrome (参考記録 Official同等確認用)
わんくま同盟 大阪勉強会 #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
わんくま同盟 大阪勉強会 #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
わんくま同盟 大阪勉強会 #67 Dromaeo詳細(1) Dromaeo JavaScript Tests
わんくま同盟 大阪勉強会 #67 Dromaeo詳細(2) DOM Core Tests
わんくま同盟 大阪勉強会 #67 MAXとPGOとの比較 優位差があったもの: • Speedometer – 9% •
Peacekeeper – 4% • Dromaeoの一部項目 DOM Query, DOM Traversal, Arrays, Base64 Encoding/Decoding ※DOMが速い?
わんくま同盟 大阪勉強会 #67 MAXとPGOとの比較 優位差がなかったもの: • Jetstream • Octane (誤差大)
• Simple Maze (誤差大) ※JavaScriptはそれほど速くならない
わんくま同盟 大阪勉強会 #67 まとめ • PGOはソースコード変更なしで高速化可 能 • 時間とリソースは必要 •
大規模であれば適当なプロファイルでも速 くなる • 使うなら最終リリースで
わんくま同盟 大阪勉強会 #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