EVENT ホットなイベント情報をお届けします!
PCゲーム開発で重要な「最適化」を支援するインテルの「VTune」とは?【CEDEC2020レポート】
新型コロナウイルス(COVID-19)の影響によってリモート開催となったゲーム開発者セッション「CEDEC 2020」。PCゲーム開発においてCPUとGPUの最適化支援ツールを使った用法を学べる「CPUとGPUの最適化を支援するインテル ソフトウェア開発ツール」のレポートをお届けする。このセッションにあたっては、エクセルソフト株式会社テクニカル・サポート・エンジニアの竹田賢人氏が登壇した。
このセッションで語られるのは、インテルの開発者向けツール「インテルVTuneプロファイラー」だ。
このツールは米Saber Interactiveが開発し、Epic Gamesで販売されている『Ghostbusters: The Video Game Remastered』のPC版開発に活用されるなど、実績を持っている。
セッションの内容的に一般ユーザー向けの内容ではないが、PC版の開発を進めるインディーを含めたゲーム開発者にとっては、「最適化」というポイントで注目しておきたい重要なセッションだ。
命令サイクルに注目することで
セッションは昨今のプロセッサー事情の解説から始まった。
近年のプロセッサーは、最新の製品と比べて、コア数やキャッシュ量の増加しているものの、昔から手法は変わりなくソフトウェアのアプローチもそれほど変わっていない。パフォーマンス向上は、従来からと同じでベクトル化(CPUの専用命令)とCPU機能の活用、そしてマルチスレッド化でコアを活用することで現れている。それ以外で変化している部分は多々あるものの、ソフトウェア側からの制御は難しいことが挙げられる。
CPU以外の内蔵グラフィックス機能は、過去から大幅に変化しているわけではないが、順当に性能は向上。例えば、Ice LakeのGen 11は、以前のGen9と比べるとコア数やクロックが増加し、パフォーマンスが向上していることが挙げられる。
また実行ユニット数の増加やL3キャッシュが拡張され、Gen12以降では、ディスクリート(外部)GPUを出す計画も存在。つまりグラフィックボードを出す計画もあり、それらは「XEアーキテクチャ」と呼ばれているという。
PCゲームの最適化ツールとして、ハードウェア情報に注目するパフォーマンスプロファイラー「インテルVTuneプロファイラー」がある。この「VTune」はインテルからリリースされているため、他のツールと比較してもハードウェア的な情報が取れることが特徴だ。関数ごとに時間を費やしている情報や、スレッドのコンカレンシー(並行性)、そしてキャッシュミスやCPUの命令を視覚化されている事が大きく、ソースコードと照らし合わせるとより効果的になる。
ハードウェア的な情報と聞くとハードルが高そうだが、通常のアプリケーションベースの解析と、ハードウェアベースの解析結果を合わせて表示する機能を持っているため、理解しやすいそうだ。一番演算に時間が掛かっている関数の確認や、スレッドの動作状況の確認、メモリアクセスの確認も可能。また解析タイプごとにモードが存在し、簡単にアプリケーションの解析結果を合わせてみられる。CPUの情報に熟知しているのであれば、カスタム解析から任意のCPUイベントをトレースして確認でき、逆に詳しくても解析結果から分かるようになっている。
CPUのコア内部は並列実行されており、古今1つの命令が複数実行している状況で、命令が流れているところを「パイプライン」と呼んでいる。命令のそれぞれを「命令フィッチ」→「命令デコード」→「命令実行」→「命令リタイア」と4段階のステージを繰り返しながらアプリケーションを動かしている。
動作の流れを理解するのは重要で、「VTune」ではトップダウン・マイクロアーキテクチャ解析方法によってパイプラインの実行状況を階層的に分類している。特徴としては、パフォーマンスを低下させる要因をシンプルに分類できることだ。
下図は上から下へと確認し、パイプラインの命令が流れている状況に対して、ストール(命令を実行していないタイミングがあるか? という意味)しているかで2つに分類可能。この図を上から下へ流れるような階層的に見れば最適化の手順がよりわかりやすくなる。
パイプライン・スロットの分類では大雑把に4つに分けられる。「リタイア」は正常に実行できた場合、「不正なスペキュレーション」は分岐予測に問題があった場合、「フロントエンド依存」は命令の発行自体に問題があった場合、「バックエンド依存」はメモリに関する問題があった場合だ。
CPUパイプライン向けのパフォーマンス解析に関しては、VTuneプロファイラーを使い解析するとこの結果がすぐに得られる。情報を視覚化することが大きな利点で、項目ごとにそれぞれパイプライン内部で動いている情報をダイヤグラムとして表示する機能があり、これが正常に実行できた場合がパーセンテージとして表示されている。
この場合、リタイアリングが41%正常に終了しているが、最下部のBad Speculationでは、下方に漏れ出している表現になっている。これは正しい命令を読み直す動作が頻発した場合に落ちているという状況を説明したものだ。
パイプラインの最適化については、無駄になったサイクルは実行が最適化されていないため、VTuneは命令あたりのサイクル数(CPI)を発見できるようになっている。また基本的に低ければひくいほどループ処理の命令の実行率が良いため、CPIレートを悪いところからみることがプロファイラーにおける最適化の考え方も存在する。
ハードウェア的なパフォーマンス情報の確認については、ゲーム全体のパフォーマンスを取得し、遅延している関数の処理を統計的にとることが可能だ。FPU(浮動小数点演算処理装置)を活用しているので、double型とfloat型などの演算におけるパフォーマンスも確認できる。
メモリアクセスによる負荷も表示可能。シーン切り替えやデータのロードが入る時に一度に多くのデータをロードすることによって、メモリ側の負荷や帯域の圧迫をロード時間が延びているかをタイムラインと合わせて確認できる。
米国のインディペンデントデベロッパーであるWildfire Gamesが開発しているRTS『0 A.D.』は、フレームレートが低下する問題について、VTuneを用いて特定したことが発表されている。このfps低下問題については、解析結果のフレームレートを表示しつつ、1フレームあたりの処理に絞って重い箇所を特定し、掘り下げてみるという形がとられたようだ。
こういった機能は単体でも使える他にも、「Unreal Engine 4」(UE4)では2018年3月リリースのバージョン4.19からVTuneプロファイラーとの統合がサポートされている。この場合は、タイムライン上にUE側のイベントを表示することで、処理に時間の掛かったイベントを表示できるため、何も加えずとも簡潔に活用できるようになっているのが特徴だ。
「VTuneプロファイラー」は、最新のプロセッサーの処理能力を確認することや、パフォーマンスを出したいときに力を発揮できるアプリケーションだ。最後に「インテルoneAPIツールキット(ベータ版)」を紹介しセッションを終了した。
記事冒頭で説明したとおり、このセッションはPC版開発の処理に関する「最適化」の内容であった。PC版の最適化については、PC向けを含むマルチプラットフォーム展開が一般的となった2005年以降のタイトルを中心に多く言及されていたこともあり、具体的な処理の最適化については興味があるユーザーもいることだろう。
なお、「VTuneプロファイラー」はコミュニティサポートのみ単体無償版が公式サイトにて各種情報を入力することで入手できるようになっている。
VTuneプロファイラー
https://software.intel.com/content/www/us/en/develop/tools/vtune-profiler/choose-download.html
CEDEC2020
https://cedec.cesa.or.jp/2020/
このセッションで語られるのは、インテルの開発者向けツール「インテルVTuneプロファイラー」だ。
このツールは米Saber Interactiveが開発し、Epic Gamesで販売されている『Ghostbusters: The Video Game Remastered』のPC版開発に活用されるなど、実績を持っている。
セッションの内容的に一般ユーザー向けの内容ではないが、PC版の開発を進めるインディーを含めたゲーム開発者にとっては、「最適化」というポイントで注目しておきたい重要なセッションだ。
命令サイクルに注目することで
パフォーマンスを見極める「VTuneプロファイラー」
セッションは昨今のプロセッサー事情の解説から始まった。近年のプロセッサーは、最新の製品と比べて、コア数やキャッシュ量の増加しているものの、昔から手法は変わりなくソフトウェアのアプローチもそれほど変わっていない。パフォーマンス向上は、従来からと同じでベクトル化(CPUの専用命令)とCPU機能の活用、そしてマルチスレッド化でコアを活用することで現れている。それ以外で変化している部分は多々あるものの、ソフトウェア側からの制御は難しいことが挙げられる。
CPU以外の内蔵グラフィックス機能は、過去から大幅に変化しているわけではないが、順当に性能は向上。例えば、Ice LakeのGen 11は、以前のGen9と比べるとコア数やクロックが増加し、パフォーマンスが向上していることが挙げられる。
また実行ユニット数の増加やL3キャッシュが拡張され、Gen12以降では、ディスクリート(外部)GPUを出す計画も存在。つまりグラフィックボードを出す計画もあり、それらは「XEアーキテクチャ」と呼ばれているという。
PCゲームの最適化ツールとして、ハードウェア情報に注目するパフォーマンスプロファイラー「インテルVTuneプロファイラー」がある。この「VTune」はインテルからリリースされているため、他のツールと比較してもハードウェア的な情報が取れることが特徴だ。関数ごとに時間を費やしている情報や、スレッドのコンカレンシー(並行性)、そしてキャッシュミスやCPUの命令を視覚化されている事が大きく、ソースコードと照らし合わせるとより効果的になる。
ハードウェア的な情報と聞くとハードルが高そうだが、通常のアプリケーションベースの解析と、ハードウェアベースの解析結果を合わせて表示する機能を持っているため、理解しやすいそうだ。一番演算に時間が掛かっている関数の確認や、スレッドの動作状況の確認、メモリアクセスの確認も可能。また解析タイプごとにモードが存在し、簡単にアプリケーションの解析結果を合わせてみられる。CPUの情報に熟知しているのであれば、カスタム解析から任意のCPUイベントをトレースして確認でき、逆に詳しくても解析結果から分かるようになっている。
CPUのコア内部は並列実行されており、古今1つの命令が複数実行している状況で、命令が流れているところを「パイプライン」と呼んでいる。命令のそれぞれを「命令フィッチ」→「命令デコード」→「命令実行」→「命令リタイア」と4段階のステージを繰り返しながらアプリケーションを動かしている。
動作の流れを理解するのは重要で、「VTune」ではトップダウン・マイクロアーキテクチャ解析方法によってパイプラインの実行状況を階層的に分類している。特徴としては、パフォーマンスを低下させる要因をシンプルに分類できることだ。
下図は上から下へと確認し、パイプラインの命令が流れている状況に対して、ストール(命令を実行していないタイミングがあるか? という意味)しているかで2つに分類可能。この図を上から下へ流れるような階層的に見れば最適化の手順がよりわかりやすくなる。
パイプライン・スロットの分類では大雑把に4つに分けられる。「リタイア」は正常に実行できた場合、「不正なスペキュレーション」は分岐予測に問題があった場合、「フロントエンド依存」は命令の発行自体に問題があった場合、「バックエンド依存」はメモリに関する問題があった場合だ。
CPUパイプライン向けのパフォーマンス解析に関しては、VTuneプロファイラーを使い解析するとこの結果がすぐに得られる。情報を視覚化することが大きな利点で、項目ごとにそれぞれパイプライン内部で動いている情報をダイヤグラムとして表示する機能があり、これが正常に実行できた場合がパーセンテージとして表示されている。
この場合、リタイアリングが41%正常に終了しているが、最下部のBad Speculationでは、下方に漏れ出している表現になっている。これは正しい命令を読み直す動作が頻発した場合に落ちているという状況を説明したものだ。
パイプラインの最適化については、無駄になったサイクルは実行が最適化されていないため、VTuneは命令あたりのサイクル数(CPI)を発見できるようになっている。また基本的に低ければひくいほどループ処理の命令の実行率が良いため、CPIレートを悪いところからみることがプロファイラーにおける最適化の考え方も存在する。
ハードウェア的なパフォーマンス情報の確認については、ゲーム全体のパフォーマンスを取得し、遅延している関数の処理を統計的にとることが可能だ。FPU(浮動小数点演算処理装置)を活用しているので、double型とfloat型などの演算におけるパフォーマンスも確認できる。
メモリアクセスによる負荷も表示可能。シーン切り替えやデータのロードが入る時に一度に多くのデータをロードすることによって、メモリ側の負荷や帯域の圧迫をロード時間が延びているかをタイムラインと合わせて確認できる。
米国のインディペンデントデベロッパーであるWildfire Gamesが開発しているRTS『0 A.D.』は、フレームレートが低下する問題について、VTuneを用いて特定したことが発表されている。このfps低下問題については、解析結果のフレームレートを表示しつつ、1フレームあたりの処理に絞って重い箇所を特定し、掘り下げてみるという形がとられたようだ。
こういった機能は単体でも使える他にも、「Unreal Engine 4」(UE4)では2018年3月リリースのバージョン4.19からVTuneプロファイラーとの統合がサポートされている。この場合は、タイムライン上にUE側のイベントを表示することで、処理に時間の掛かったイベントを表示できるため、何も加えずとも簡潔に活用できるようになっているのが特徴だ。
「VTuneプロファイラー」は、最新のプロセッサーの処理能力を確認することや、パフォーマンスを出したいときに力を発揮できるアプリケーションだ。最後に「インテルoneAPIツールキット(ベータ版)」を紹介しセッションを終了した。
記事冒頭で説明したとおり、このセッションはPC版開発の処理に関する「最適化」の内容であった。PC版の最適化については、PC向けを含むマルチプラットフォーム展開が一般的となった2005年以降のタイトルを中心に多く言及されていたこともあり、具体的な処理の最適化については興味があるユーザーもいることだろう。
なお、「VTuneプロファイラー」はコミュニティサポートのみ単体無償版が公式サイトにて各種情報を入力することで入手できるようになっている。
VTuneプロファイラー
https://software.intel.com/content/www/us/en/develop/tools/vtune-profiler/choose-download.html
CEDEC2020
https://cedec.cesa.or.jp/2020/