Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
スマートフォンGPUの特性を解析! 社内で実施予定のGPUパフォーマンスチューニング研修を紹介...
Search
CyberAgent
PRO
June 23, 2024
1
660
スマートフォンGPUの特性を解析! 社内で実施予定のGPUパフォーマンスチューニング研修を紹介します!
CyberAgent
PRO
June 23, 2024
Tweet
Share
More Decks by CyberAgent
See All by CyberAgent
未来のテレビを形づくる ABEMAのグロース戦略:ユーザー体験と品質向上のアプローチ
cyberagentdevelopers
PRO
1
320
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
1
170
生成AIは安心・安全に貢献できるのか
cyberagentdevelopers
PRO
0
20
AIの血肉となるアノテーションデータのために大事にしている事
cyberagentdevelopers
PRO
2
26
ABEMA NEWSにおける映像データを活用した記事生成AI 〜記事制作者に寄り添ったソリューションにするまで〜
cyberagentdevelopers
PRO
0
49
ACL 2024 参加報告
cyberagentdevelopers
PRO
0
62
生成AIの強みと弱みを理解して、生成AIがもたらすパワーをプロダクトの価値へ繋げるために実践したこと / advance-ai-generating
cyberagentdevelopers
PRO
1
300
SNSマーケティングに革新! ABEMA サッカー動画切り出しを生成AIで自動化し、業務効率化を狙う! / abema-ai-marketing
cyberagentdevelopers
PRO
2
170
新卒1年目が挑む!生成AI × マルチエージェントで実現する次世代オンボーディング / operation-ai-onboarding
cyberagentdevelopers
PRO
1
260
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
150
GitHub's CSS Performance
jonrohan
1030
460k
Statistics for Hackers
jakevdp
796
220k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Teambox: Starting and Learning
jrom
133
8.8k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
The Pragmatic Product Professional
lauravandoore
32
6.3k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Transcript
スマートフォンGPUの特性を解析! 社内で 実施予定のGPUパフォーマンスチューニング 研修を紹介します! 株式会社サイバーエージェント 2024.05.28 清原 隆行
はじめに Chapter : 00
自己紹介 SGEコア技術本部(通称コアテク)という横断組織でグラ フィックチームの責任者として働いています。 著 書に「HLSLシェーダーの魔 導 書」という本がありま す。 現在は、主にグラフィックス系の基盤の開発や、開発中 のタイトルの不
具 合 修 正やパフォーマンスチューニング などを行っています。 今 回 は 各 タイトルのパフォーマンスチューニングから 得 た知 見を社 内に共 有するために、グラフィックスチーム で準備を進めている社内研修の内容についてご紹介しま す。 清原 隆行
なぜ社内研修を計画したのか? • if文のオーバーヘッドによるパフォーマンスの悪化 • シェーダーバリアントの肥大化によるメモリの圧迫 • ヘビーなメモリアクセスが発生していて、メモリの速度によるパフォーマンスの悪化 • GPUの処理負荷の計測方法が分からない 各プロジェクトで色んな事例があった
同様の事例が各子会社であった 知識を共有して属人化を防ぎたい
条件分岐 Chapter : 01
そもそも条件分岐って使っていいの? • 静的分岐 ◦ シェーダーバリアントやUniform定数などを使った分岐 • 動的分岐 ◦ マテリアルパラメータによる分岐 ◦
実行時の計算による分岐 適切に使用すれば問題ない
静的分岐 シェーダーバリアントやUniform定数などを使った分岐 half4 frag( Varings In ){ #ifdef _HOGE return
half4( 0, 0, 1, 1); #else return half4( 1, 0, 0, 1); #endif } half4 fragCore( uniform half hoge ){ if(hoge > 0.5){ return half4( 0, 0, 1, 1); } return half4( 1, 0, 0, 1); } half4 frag( Varings In ) { return flagCore( 1 ); } シェーダーバリアント Uniform定数
静的分岐 シェーダーバリアントやUniform定数などを使った分岐 分岐のないコードが生成されるので実行速度の面では問題ない だが、作られるシェーダーのバリエー ションが増えるので、メモリ使用量には 注意が必要
動的分岐 マテリアルパラメータによる分岐 • 同一のドローコールで全て同じ分岐パスを通るため大きな問題は起きない ◦ オーバーヘッドは分岐コストのみ
動的分岐 マテリアルパラメータによる分岐 if( data.x > 0.5 ){ ・ ・
・ }else{ ・ ・ ・ } スレッドグループ すべてのスレッドが同 じ分岐パスを実行して いる場合は、無駄な処 理は走らない
動的分岐 実行時の計算による分岐 • 同一のドローコールで異なる分岐パスを通る可能性がある場合は全ての分岐パスを通る のと同じコストがかかるため、大きな処理負荷となる
動的分岐 実行時の計算による分岐 if( data.x > 0.5 ){ ・ ・
・ }else{ ・ ・ ・ } スレッドグループ このスレッドは条件が成 立していないため、何も しないが時間はかかる このスレッドはdata.x > 0.5が 成立している
縮小バッファの利用 Chapter : 02
縮小バッファの利用 アセットの調整というのが、一番 妥当なのだが、開発終盤でクォリ ティ的にOKが出ていて変えにくい という状態だった pixel 5aはこのエフェクトの描画 だけで15ミリ秒ほどかかってい た。 FPSも10程度しか出ない状態
事例~その1~(リリース中のゲームのエフェクト)
縮小バッファの利用 事例~その1~(リリース中のゲームのエフェクト) 1/4の解像度の縮小バッファへのエフェクト描画で解決。 品質もほとんど落とすことなく、エフェクトの処理時間を1~2ミリ秒程度まで削減できて、 FPSも25~27と目標達成。 昔から行われてきている手法だけど、解 決策のカードとして使える人はそんなに 標いない印象だった。 属人化を解消したい!
縮小バッファの利用 事例~その2~(ぼかしアルゴリズムの変更) ぼかしアルゴリズムに縮小バッファへのダウンサンプルを行うという一手間加えて高速化。 (これも有名な手法で川瀬式bloomなどが代表例) 品 質を上げるという側 面もあるが、ダウンサンプリングという1パス追 加しているのに、パ フォーマンスが上がる場合もある。
縮小バッファの利用 ダウンサンプルせずにぼかす(Pixel 4a) 3パスでぼかしている 5.5ミリ秒かかっている
縮小バッファの利用 1/4にダウンサンプルしてぼかす(Pixel 4a) 4パスでぼかしている (1パス増えている) 4.4ミリ秒 1パス増えているのに1ミリ速 くなっている!
縮小バッファの利用 なぜパスを追加しているのにパフォーマンスがあがる? キャッシュヒット効率が上がるから。特にメモリ帯域が狭いスマートフォンアプリでは重要に なってくる。
キャッシュヒット効率 Chapter : 03
キャッシュヒット効率 キャッシュヒット率を見ることができるツールの調査 解像度の低いテクスチャの利用や圧縮テクスチャの利用でキャッシュヒット率が改善している ことを確認できるツールが欲しい Android GPU Inspector (AGI) Render Doc
XCode Perfdog どれも求めている情報は得られ なかった
キャッシュヒット効率 NSight Graphics WindowsPCでしか使えない が、L1キャッシュのヒット 率 やL2キャッシュのヒット 率 など 求
めていた 情 報 が しっかりと取れていた。
圧縮テクスチャ テクスチャ形式 フレーム時間(ms) L1TEX Throughput(%) L2 Hit Rate(%) L2 Hit
Rate from L1(%) 64bit フォーマット 133.5 34.7 19.7 18.9 32bit フォーマット 24.1 97.2 49.3 38.2 ※ L1 Hit Rate はほぼ同様の値を記録したので省略 ※ フレーム時間計測は Galaxy S20 5G - Qualcomm Adreno (TM) 650 - Valkan で行っています
解像度 テクスチャ解像度 フレーム時間(ms) L1TEX Throughput(%) L2 Hit Rate(%) L2 Hit
Rate from L1(%) 2048 x 2048 28.9 90.7 70.9 68.2 32 x 32 22.1 93.9 100.0 100.0 ※ L1 Hit Rate はほぼ同様の値を記録したので省略 ※ フレーム時間計測は Galaxy S20 5G - Qualcomm Adreno (TM) 650 - Valkan で行っています
サンプリング サンプリング形状 フレーム時間(ms) L1TEX Throughput(%) L2 Hit Rate(%) L2 Hit
Rate from L1(%) 縦方向 9 サンプリング 37.7 47.8 75.8 75.0 Box状 9 サンプリング 27.6 91.4 70.8 68.4 ※ L1 Hit Rate はほぼ同様の値を記録したので省略 ※ フレーム時間計測は Galaxy S20 5G - Qualcomm Adreno (TM) 650 - Valkan で行っています
最後に Chapter : 04
最後に 今後の予定 • コアテクブログに連載記事の掲載(5月末~) ◦ 第一回目は公開済み • 社内研修の実施(9月ごろ) • 外部に公開(12月ごろ)