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.2k
fujiaire by shell
msr_i386
0
870
colaboratory
msr_i386
0
140
yes command faster
msr_i386
0
350
Amazon Dash Hack
msr_i386
0
1.4k
cgroup
msr_i386
0
1.4k
discover fork-bomb
msr_i386
0
1.8k
kanji banner
msr_i386
0
1.8k
ASCII art oneliner
msr_i386
0
1.9k
Featured
See All Featured
Docker and Python
trallard
44
3.3k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
It's Worth the Effort
3n
184
28k
Scaling GitHub
holman
459
140k
Done Done
chrislema
182
16k
Designing for Performance
lara
604
68k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Unsuck your backbone
ammeep
669
57k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
440
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