Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
1k
colaboratory
msr_i386
0
160
yes command faster
msr_i386
0
390
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
How GitHub (no longer) Works
holman
315
140k
Scaling GitHub
holman
463
140k
Six Lessons from altMBA
skipperchong
28
4k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Music & Morning Musume
bryan
46
6.8k
KATA
mclloyd
32
14k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
187
55k
Designing for Performance
lara
610
69k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Building Adaptive Systems
keathley
43
2.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
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