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
930
colaboratory
msr_i386
0
150
yes command faster
msr_i386
0
360
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.8k
ASCII art oneliner
msr_i386
0
2k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
810
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
540
Unsuck your backbone
ammeep
670
57k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Docker and Python
trallard
44
3.4k
Six Lessons from altMBA
skipperchong
28
3.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Cult of Friendly URLs
andyhume
78
6.3k
A designer walks into a library…
pauljervisheath
205
24k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
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