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
スマートフォンGPUの特性を解析! 社内で実施予定のGPUパフォーマンスチューニング研修を紹介...
Search
CyberAgent
PRO
June 23, 2024
1
610
スマートフォンGPUの特性を解析! 社内で実施予定のGPUパフォーマンスチューニング研修を紹介します!
CyberAgent
PRO
June 23, 2024
Tweet
Share
More Decks by CyberAgent
See All by CyberAgent
KDD2024参加報告
cyberagentdevelopers
PRO
1
480
FastlyとfalcoでNode.jsレスなWebサーバーの構築: IPTV版ABEMAアプリのインフラ刷新
cyberagentdevelopers
PRO
1
71
Amebaチョイス立ち上げの裏側 ~ 依存システムとの闘い ~
cyberagentdevelopers
PRO
1
97
マイグレーションコード自作して File-Based Routing に自動移行!! ~250 ページの歴史的経緯を添えて~
cyberagentdevelopers
PRO
2
38
コードメトリクス計測による課題可視化と品質確保
cyberagentdevelopers
PRO
1
64
サイバーエージェントにおけるインナーソーシングの取り組み
cyberagentdevelopers
PRO
3
1.6k
ABEMAにおけるLLMを用いたコンテンツベース推薦システム導入と効果検証
cyberagentdevelopers
PRO
6
3.2k
クリエイティブ制作領域の データ活用を0から推進した話
cyberagentdevelopers
PRO
3
930
opt-in camera:カメラによる行動計測におけるオプトインの仕組みの実現
cyberagentdevelopers
PRO
3
920
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
519
39k
How GitHub (no longer) Works
holman
311
140k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Testing 201, or: Great Expectations
jmmastey
38
7k
The World Runs on Bad Software
bkeepers
PRO
65
11k
For a Future-Friendly Web
brad_frost
174
9.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
167
49k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Faster Mobile Websites
deanohume
304
30k
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月ごろ)