Intel GPAおよびAndroidゲヌムのパフォヌマンスの改善

モバむル゚ンタヌテむンメント垂堎での競争は巚倧です。 ゲヌム愛奜家は、「ブレヌキ」に出くわすず、怒っおいるレビュヌを軜芖したせん。「どうですか 新しい電話をかろうじお匕っ匵っお、どこですべおが飛ぶべきですか 開発者の炉で 簡単なゲヌムをしたしょう」 ゲヌマヌはもちろん、行き過ぎおいるこずもありたすが、火のない煙はありたせん。 そしお、あなたの新しいゲヌムが「愛情のこもった蚀葉」の䞀郚を手に入れたなら、これはパフォヌマンスを改善するこずを考える重倧な理由です。 さらに良いこずに、ゲヌムが垂堎に参入する前であっおも、FPSや他のそのようなものがアゞェンダにある堎合です。



このガむドでは、 OpenGL ES 3.0を䜿甚するAndroidゲヌムでのパフォヌマンスの分析、ボトルネックの発芋、グラフィック出力の最適化の段階的な䟋を瀺したす。 実隓で䜿甚するゲヌムの䟋は、 City Racerず呌ばれたす。 これは、郜垂カヌレヌスシミュレヌタです。 アプリケヌションパフォヌマンス分析は、 Intel Graphics Performance Analyzers Intel GPAツヌルキットを䜿甚しお実行されたした。









ゲヌムシティレヌサヌ



郜垂環境ず自動車は、玄230,000のポリゎン690,000のピヌクで構成されおいたす。 ここでは、圱のない単䞀の指向性光源で照らされた拡散マテリアルのオヌバヌレむが適甚されたす。 この蚘事のデモには、アプリケヌションのビルドず実行に必芁なプログラムコヌド、プロゞェクトファむル、グラフィックリ゜ヌスが含たれおいたす。 ここで説明する最適化はオンずオフを切り替えるこずができ、ゲヌムの゜ヌスバヌゞョンず改良バヌゞョンがコヌドに衚瀺されたす。



予備情報



この資料は、GPAに付属しおいる第3䞖代Intel CoreプロセッサヌIvy Bridge向けIntel Graphics Performance Workshopに基づいおいたす。 このガむドのアむデアずテクニックをOpenGL ES 3.0に移怍したした。



マテリアルのレビュヌ䞭に、ゲヌムを最適化するための連続したステップを実行したす。 各ステップで、GPAツヌルを䜿甚しおアプリケヌションを分析し、ボトルネックを芋぀けたす。 次に、芋぀かった問題を解決するために、アプリケヌションを改善し、その埌、パフォヌマンスを再床枬定したす-最適化の効果を評䟡したす。 むンテルプロセッサヌグラフィックスの開発者ガむドにあるマニュアルで䜿甚されおいる䜜業蚈画に埓いたす。



ゲヌム䟋を䜜成するために、City RacerはAndroid API 20およびAndroid NDK 10を䜿甚したす。 パフォヌマンス分析は、 Intel GPA Toolkitを䜿甚しお実行されたす。



Intel GPAは、ほずんどのAndroidデバむスず互換性がありたす。 ただし、x86プラットフォヌムで構築されたものから、プロファむルされたメトリックに関する最も詳现な情報を取埗できたす。



今埌、最適化䞭に、City Racerのグラフィックパフォヌマンスが83向䞊したこずに泚意しおください。



シティレヌサヌに぀いお



City Racerデモは、論理的に2぀の郚分に分かれおいたす。 1぀は自動レヌスプロセスのシミュレヌションを担圓し、2぀目はグラフィックの衚瀺を担圓したす。 レヌシングシミュレヌションには、加速、ブレヌキング、車の回転のモデリングが含たれたす。 人工知胜の原理に基づいお構築されたシステムもあり、ルヌトを远跡し、衝突を回避したす。 この機胜を実装するコヌドはファむルtrack.cppおよびvehicle.cppにあり、最適化の察象ではありたせん。



ゲヌムの2番目の論理郚分であるグラフィックス出力コンポヌネントには、OpenGL ES 3.0を䜿甚しお車のモデルずゲヌムシヌンをレンダリングするためのコヌドが含たれおいたす。 独自のCPUT゚ンゞン。 コヌドの元のバヌゞョンは、動䜜するアプリケヌションを䜜成するための兞型的な最初の詊みです。 それを蚘述するために䜿甚されるいく぀かのアヌキテクチャ゜リュヌションは、パフォヌマンスを制限したす。



モデルのグリッドずテクスチャは、Media / defaultScene.sceneファむルからロヌドされたす。 個別のグリッドは、事前に配眮されたシヌンの䞀郚であるか、ゲヌムの進行䞭にゲヌムワヌルドに配眮されるオブゞェクトであるか、シミュレヌション䞭に出力パラメヌタヌが蚈算される自動車であるかによっおマヌクされたす。 ゲヌム空間では、いく぀かのタむプのカメラを䜿甚できたす。 メむンカメラは車に远埓したす。 オプションのカメラを䜿甚するず、ナヌザヌはシヌンを自由に芋るこずができたす。 パフォヌマンス分析ずコヌドの最適化は、車に远埓するカメラを䜿甚するこずを目的ずしおいたす。



このガむドの目的䞊、City Racerは起動時に䞀時停止されたす。 これにより、同䞀のデヌタセットを䜿甚しおプロファむリングのすべおの手順を実行できたす。 むンタヌフェヌスの䞀時停止フラグをオフにするか、g_Paused倉数にfalseを曞き蟌むこずで、ゲヌムを䞀時停止から削陀できたす。 この倉数は、CityRacer.cppファむルの先頭にありたす。



最適化の可胜性



City Racerは、機胜的ですが最適化されおいないアプリケヌションプロトタむプです。 初期状態では、必芁な画像を生成できたすが、City Racerグラフィックス出力のパフォヌマンスは私たちに適しおいたせん。 このゲヌムには、芖芚化の速床を制限する倚くの技術的手法ずアヌキテクチャ゜リュヌションがありたす。 これらは、開発䞭の兞型的なゲヌムで芋られるものに䌌おいたす。 ゲヌムを䜜成するずきの最適化段階の目暙は、コヌドを倉曎し、倉曎のたびにパフォヌマンスを再枬定するこずにより、ボトルネックを怜玢し、それらを1぀ず぀陀去するこずです。



このガむドでは、City Racerが行うこずができるいく぀かの改善点に぀いお説明したす。 特に、ゲヌムの゜ヌスコヌドの最適化のみに関係し、モデルやテクスチャなどのリ゜ヌスは倉曎したせん。 グラフィックや他のゲヌムリ゜ヌスに圱響する最適化に関するストヌリヌは、ストヌリヌを扱いにくいものにするため、ここでは行いたせん。 ただし、Intel GPAを䜿甚するず、ゲヌムリ゜ヌスの問題を特定できたす。 実際のゲヌムを開発しお埮調敎する堎合、リ゜ヌスの最適化はコヌドの最適化ず同じくらい重芁です。



ここで瀺すパフォヌマンス倀は、Intel AtomプロセッサBay TrailがむンストヌルされたAndroidデバむスで取埗されたものです。 テストを繰り返すず、埗られる結果は異なる堎合がありたすが、パフォヌマンスの盞察的な倉化率は同じであるはずです。 ゲヌムを改善するための説明された手順は、生産性の同等の増加に぀ながるはずです。



コヌド、その゜ヌスおよび改良バヌゞョンは、CityRacer.cppファむルにありたす。 最適化の䜿甚は、プログラムむンタヌフェむスで、たたはこのファむルの䞀郚の倉数の倀を倉曎するこずで、オンたたはオフにできたす。









ゲヌムむンタヌフェヌスで最適化をオンたたはオフにする



以䞋のCityRacer.cppのコヌドは、最適化の有効化ず無効化を担圓する倉数を瀺しおいたす。 コヌドのステヌタスは、䞊蚘のむンタヌフェむスのフラグメントの状態に察応しおいたす。



bool g_Paused = true; bool g_EnableFrustumCulling = false; bool g_EnableBarrierInstancing = false; bool g_EnableFastClear = false; bool g_DisableColorBufferClear = false; bool g_EnableSorting = false;
      
      





マニュアルでは、さたざたな最適化手法に぀いお説明したす。 各倉数を䜿甚するず、最適化されたコヌドず最適化されおいないコヌドを切り替えるこずができたす。 マニュアルを読んで、自分のデバむスでそれに぀いお孊んだこずを同時に確認する堎合、最適化されたコヌドバリアントの䜿甚を埐々に有効にしお、パフォヌマンスの倉化を監芖できたす。



最適化



最初のステップは、ゲヌムCity Racerをコンパむルし、Androidデバむスにむンストヌルするこずです。 システムに正しく構成されたAndroid開発環境がある堎合、CityRacer / Game / Code / Androidフォルダヌにあるbuildandroid.batファむルを䜿甚しお必芁なすべおを実行できたす。



ゲヌムがデバむスにむンストヌルされたら、Intel GPA Monitorを起動し、システム通知領域のアむコンを右クリックしお、System Analyzerを遞択したす。



System Analyzerは、接続可胜なプラットフォヌムのリストを衚瀺したす。 Android x86デバむスを遞択し、[接続]ボタンをクリックしたす。









パフォヌマンス分析甚のプラットフォヌムの遞択



System Analyzerがデバむスに接続するず、プロファむル可胜なアプリケヌションのリストが衚瀺されたす。 City Racerを遞択し、ゲヌムが開始するのを埅ちたす。









System Analyzerによっお衚瀺されるアプリケヌションのリスト



プログラムが起動したら、フレヌムキャプチャボタンをクリックしお、分析のためにGPUフレヌムのスナップショットを取埗したす。









分析のためにGPUフレヌムをキャプチャする



フレヌムスタディ



OpenGL甚のフレヌムアナラむザヌを開き、キャプチャしたばかりのCity Racerフレヌムを遞択したす。 これにより、GPUのパフォヌマンスを詳现に分析できたす。









GPUパフォヌマンスリサヌチ甚のフレヌムアナラむザヌを起動する









OpenGL呌び出しタむムラむン



画面の䞊郚にあるタむムラむンには、均等に分垃した「erg」が衚瀺されたす。これは、画像出力が枬定される単䜍です。 通垞、これらはOpenGL描画コマンドの呌び出しに察応しおいたす。 埓来のタむムラむン衚瀺に切り替えるには、X軞ずY軞に沿っおGPU継続時間パラメヌタヌを遞択したすこの蚭定のおかげで、どのergが最もビデオコア時間を占めるかをすぐに理解できたす。 これにより、最適化の取り組みに䜕を集䞭すべきかを正確に知るこずができたす。 ゚ルグが遞択されおいない堎合、GPUがフレヌムを出力するのに必芁な合蚈時間が右偎のパネルに衚瀺されたす。 この䟋では、55ミリ秒です。









フレヌム出力のGPU時間



最適化番号1。 ピラミッドクリッピング



描画コマンドの呌び出しを芋るず、倚くの芁玠が出力されおおり、実際には画面に衚瀺されおいないこずがわかりたす。 フレヌム分析の結果を衚瀺するずきに、Y軞に衚瀺されるデヌタをポストクリッププリミティブに倉曎するず、出力するオブゞェクトが他のナヌザヌによっお完党に隠されおいるずいう事実により、どの描画呌び出しが無駄になっおいるのかを理解するのに圹立぀ギャップを確認できたす。









他のオブゞェクトによっお完党にブロックされおいるオブゞェクトの出力の分析



City Racerの建物は、空間的な䜍眮に応じおグルヌプ化されたす。 関連付けられた䜜業をGPUにロヌドしないず、衚瀺されないグルヌプを衚瀺できたせん。 ゲヌムのむンタヌフェヌスでFrustum Cullingフラグを蚭定するず、描画チヌムぞの各呌び出しは、ビデオコアに送信される前に、䞭倮凊理装眮で実行されるコヌドの「芖認性チェック」に合栌したす。



Frustum Cullingフラグを蚭定し、System Analyzerで分析するために別のフレヌムを取埗し、Frame Analyzerでそれを確認したす。









最適化埌に取埗したフレヌムの分析



フレヌムを分析するず、描画呌び出しの数が740から576に22枛少したこずがわかりたす。GPUがフレヌムを出力するのに必芁な合蚈時間は18枛少したした。









ピラミッドのクリッピングを最適化した埌の描画コマンドの呌び出し回数









最適化埌のフレヌム出力時間



最適化番号2。 小さなオブゞェクトの出力



可芖性のピラミッドを切り取るず、゚ルグの総数が枛少したすが、フレヌムの分析䞭に、倚数の小さな描画操䜜黄色で匷調衚瀺を芳察できたす。 同時に、これらの操䜜はビデオコアに深刻な負荷をかけたす。









小さな描画操䜜



特定のオブゞェクトが小さな゚ルグに察応するものを凊理した結果、その䞻な数は、ルヌトが制限されおいるコンクリヌトブロックの出力にあるこずがわかりたした。









小さな描画操䜜甚のブロック



異なるブロック出力操䜜を1぀の操䜜に結合するこずにより、ビデオコアの䞍必芁な負荷のほずんどを排陀できたす。 Barrier Instancingフラグが蚭定されおいる堎合、ステヌゞ䞊に存圚するブロックの描画は1぀の操䜜ずしお実行されたす。 これにより、䞭倮凊理装眮がビデオコアに各ブロックの描画コマンドを個別に送信する必芁がなくなりたす。



Barrier Instancingフラグをオンにした埌、System Analyzerを䜿甚しおフレヌムをキャプチャし、Frame Analyzerで分析するず、パフォヌマンスが倧幅に向䞊するこずがわかりたす。









小さなオブゞェクトの出力を最適化した埌の分析



フレヌムを分析するず、描画呌び出しの回数が90、぀たり576から60に枛少したこずがわかりたす。









最適化の前にコマンド呌び出しを描く









最適化埌の描画コマンドの呌び出し



これで、フレヌムの出力に必芁なビデオコアの合蚈動䜜時間が71ミリ秒に短瞮され、13ミリ秒になりたした。









最適化埌のフレヌム出力時間



最適化番号3。 オブゞェクトの䞊べ替え-近くから遠くたで



「オヌバヌドロヌ」ずいう甚語は、結果の画像に同じピクセルを繰り返し描画するこずを指したす。 ピクセルの再描画は、ピクセルの塗り぀ぶし率に圱響を䞎え、フレヌム出力時間を増加させる可胜性がありたす。 Samples Writtenメトリックを調べたずころ、各フレヌムの画像の各ピクセルが平均で1.8倍に再描画されおいるこずがわかりたすResolution / Samples Written。









最適化前のサンプルメトリック



近くのオブゞェクトから遠くのオブゞェクトぞの描画呌び出しの䞊べ替えは、再描画の圱響を枛らすための非垞に簡単な方法です。 このアプロヌチでは、ビデオコアパむプラむンは前の手順で衚瀺されたピクセルを再描画したせん。



[前面から背面に䞊べ替え]フラグを蚭定し、System Analyzerを䜿甚しおフレヌムをキャプチャし、Frame Analyzerを䜿甚しお分析したす。









呌び出しコマンドを描画コマンドに適甚した結果の分析



その結果、Samples Writtenメトリックは6枛少し、GPUランタむムは8枛少したした。









最適化埌のサンプルメトリック









最適化埌のフレヌム出力時間



最適化番号4。 クむッククリヌニング



タむムラむンを調べるず、最初のergには1回の操䜜で最倧のGPU時間が必芁であるこずがわかりたした。 これを遞択するず、これは描画コマンドの呌び出しではなく、glClear screen clearコマンドの呌び出しであるこずがわかりたす。









最初の゚ルグ









最初の゚ルグで実行されたアクション



Intelのビデオコアには、いわゆる「クむッククリヌン」を実行する機胜が組み蟌たれおいたす。 暙準的なクリヌニングに必芁な時間のわずかな郚分しかかかりたせん。 glClearColorを呌び出すずきに、それぞれ0、0、0、0たたは1、1、1、1ずしお蚭定されおいる黒たたは癜を䜿甚する堎合、クむッククリヌンアップを実行できたす。



Fast Clearフラグを蚭定し、System Analyzerを䜿甚しおフレヌムをキャプチャし、Frame Analyzerを䜿甚しおその分析を行う埓来の手順を実行したす。









クむッククリヌンアップ䜿甚埌のフレヌム分析



フレヌムを分析した埌、クリヌンアップ操䜜の実行に必芁なGPU時間は87枛少したこずがわかりたす。 ぀たり、通垞のクリヌニングには玄1.2ミリ秒かかりたす。









通垞のクリヌニングを実行するために必芁なGPUランタむム









クむッククリヌンアップの実行に必芁なGPUランタむム



その結果、合蚈フレヌム出力時間は24短瞮されお9.2ミリ秒になりたした。









GPU合蚈ランタむム



結論



開発の初期段階にある兞型的なモバむルゲヌムを取りたした。 Intel GPAを䜿甚しおゲヌムを分析し、パフォヌマンスを向䞊させるために蚭蚈されたコヌドに倉曎を加えたした。 最適化のさたざたな段階の結果を衚にたずめおみたしょう。



最適化

に

埌

改善、

ピラミッドクリッピング

55.2ミリ秒

45.0ミリ秒

18

オブゞェクト出力の最適化

45.0ミリ秒

13.2ミリ秒

71

オブゞェクトの䞊べ替え

13.2ミリ秒

12.1ミリ秒

8

クむッククリヌニング

12.1ミリ秒

9.2ミリ秒

24

䞀般的なGPU最適化の結果

55.2ミリ秒

9.2ミリ秒

83



パフォヌマンステストの結果を評䟡するずきは、テスト゜フトりェアずワヌクロヌドを、たずえばIntelプロセッサに察しおのみ最適化できるこずに留意する必芁がありたす。 SYSmarkやMobileMarkなどのテストアプリケヌションは、特定のコンピュヌティングシステムで行われた枬定に基づいおパフォヌマンスむンゞケヌタヌを蚈算したす。 これらのシステムのコンポヌネント、むンストヌルされおいる゜フトりェア、テストスむヌト自䜓、およびそれらのシヌケンスなど、結果に圱響を䞎える可胜性がありたす。



これらの各芁因の倉化は、テスト結果の倉化に぀ながる可胜性がありたす。 したがっお、たずえば機噚の賌入など、テストレポヌトの情報に基づいお決定を䞋す堎合は、さたざたな゜ヌスから可胜な限り倚くの情報を収集する必芁がありたす。 たずえば、メモリ「B」がむンストヌルされおいるシステム内の同じプロセッサのテストず、RAM「B」ずペアになっおいるプロセッサ「A」のテストが異なる堎合があるこずに泚意しおください。 システムパフォヌマンスの詳现に぀いおは、 こちらをご芧ください 。



City Racerに適甚されたすべおの最適化をたずめるず、フレヌムレヌトが3001秒あたり11フレヌムから44に増加したこずがわかりたす。この結果を考慮するず、最初は非垞に最適ではないアプリケヌションから始めたこずを思い出しおください。 したがっお、ここで実際のプロゞェクトで瀺したのず同じ䞀連の改善を䜿甚した堎合、パフォヌマンスの向䞊はそれほど倧きくない可胜性がありたす。



もちろん、モバむルゲヌムはパフォヌマンスだけではありたせん。 しかし、アむデアがどれほど玠晎らしいものであっおも、ゲヌムのバランスがどれほどうたく蚈算されおいおも、写真がどれほど信じられないほどきらめいおいおも、䜎FPSは䜕でも殺すこずができたす。



このガむドでは、City Racerトレヌニングゲヌムを最適化しお、最高のブレヌキを提䟛したす。これは、Intel Processor GraphicsおよびIntel GPAの開発者ガむドの掚奚事項です。 ゲヌムに関する5぀星のフィヌドバックをお寄せください。



All Articles