CSV プロファイラ

レンダリングスレッドおよびゲームスレッドのための個別のタイムラインでフレームごとのタイミングを出力する、軽量の範囲指定されたタイムスタンプベースのプロファイラです。

Choose your operating system:

Windows

macOS

Linux

このページは、できる限り迅速に情報を提供できるようにドラフト段階で公開されています。最新情報については、このページを再度ご確認ください。

レンダリングスレッドおよびゲームスレッドのための個別のタイムラインでフレームごとのタイミングを出力する、軽量の範囲指定されたタイムスタンプベースのプロファイルである CSV プロファイラは、すべてのコンソールと PC、そして Shipping ビルドを除くすべてのビルドで機能します。

CSV ファイルに統計情報をキャプチャする

コマンドラインを使用してキャプチャする

-csvCaptureFrames=N 引数を指定して自分のプロジェクトの実行可能ファイルを実行し、起動時から N 個のフレームをキャプチャします。

UE4.exe [Project] -csvCaptureFrames=N

コンソール コマンドを使用してキャプチャする

csvprofile [start/stop] コンソール コマンドを使用すると、ランタイム中にキャプチャを開始または停止できます。 csvprofile frames=N を指定すると固定数のフレームをキャプチャできます。

出力

CSV プロファイラによって生成された CSV ファイルは、「 [ProjectDirectory]/Saved/Profiling/CSV 」ディレクトリに書き出されます。

統計情報カテゴリ

CSV_DEFINE_CATEGORY(CategoryName, bEnableByDefault) を使用すると、統計情報カテゴリを定義できます。 CSV_DECLARE_CATEGORY_EXTERN(CategoryName) を使用すると、既存のカテゴリを外部から使用できます。これには、モジュールを超えて使用するための _MODULE バリアントがあります。

-csvcategories="First,Second" などの -csvcategories を指定したコマンドラインを使用すると、カテゴリを指定できます。

理想的には、デフォルトでは主要な統計情報のみを有効にしてください。新しいカテゴリをデフォルトで有効にする前に、慎重に計画してください。また、本当に必要でない限り、デフォルトで有効になる既存のカテゴリには統計情報を追加しないようにしてください。

統計情報を追加する

ユニットの統計情報と空きメモリにはビルトインのインストルメンテーションがありますが、 CSV_ マクロを使用するとキャプチャ対象の独自の統計情報を追加できます。 CSV_ マクロは「 CsvProfiler.h 」の一番上で定義されています。次のタイプの統計情報を追加できます。

  • 範囲指定のタイミング統計情報 - CSV_SCOPED_TIMING_STAT(Category, StatName)

  • カスタム (値) 統計情報 - CSV_CUSTOM_STAT(Category, StatName,Value, Op) またはそのバリアント

    Op は、Set、Min、Max、Accumulate のいずれかである統計情報の列挙演算 (ECsvCustomStatOp) です。

例については、「 CSVProfiler.cpp 」の CSVTest() を参照してください。

統計情報はインラインで追加できるため、事前に定義する必要はありませんが、必要に応じて事前に定義することもできます。 CSV_DEFINE_STAT(Category,StatName) マクロおよび CSV_CUSTOM_STAT_DEFINED マクロを参照してください。

統計情報はフレームごとに累積され、CSV に書き出されます。CSV ファイルは行と列で構成されます (各行が 1 フレームを含み、各列が 1 つの統計情報を含む)。これらの行と列は、 CategoryName/StatName 、またはタイマー統計情報の CategoryName/ThreadName/StatName で CSV のヘッダとして表示されます。この規則により、ワイルドカードを使用して CsvToSvg ツールを介して統計情報を簡単にグラフ化できます。例:

-stats MyCategory/*

イベント

イベントは、 printf と同じパラメータを使用する CSV_EVENT マクロで追加できます。イベントは、CSV の特殊な events 列に表示され、1 フレームに複数のイベントが含まれる場合はイベント間がセミコロンで区切られます。CSVToSVG グラフ作成ツールを -showevents パラメータを指定して使用すると、複数のイベントを含むグラフに注釈を付けることができます。詳細については、「[]」(TestingAndOptimization/PerformanceAndProfiling/CSVToSVG) を参照してください。

発生率の低いものをイベントでキャプチャすることは控えることを推奨します。イベントを過剰に使用すると、パフォーマンスとメモリのオーバーヘッド増大につながります。

GPU 統計情報

CSV プロファイラでは GPU 統計情報をサポートしており、これには STATS が無効になっているテスト ビルドの GPU 統計情報も含まれます。GPU 統計情報の記録にはある程度のオーバーヘッドが伴われるため、デフォルトでは無効になっています。

GPU 統計情報の記録を有効にするには、次のいずれかを実行します。

  • コンソールで「 r.GPUCsvStatsEnabled 」を「1」に設定する。

  • コマンド ラインで -csvGpuStats を渡す。

パフォーマンスおよびメモリに関する考慮事項

インストルメンテーションのオーバーヘッドはできる限り抑えるように設計されているため、タイミング データの歪みを最小限に抑えながらも、フレームあたりに数百回ほども呼び出される関数をインストルメント化することができます。スレッドローカル ブロックでのタイミングの累積などの統計情報データの処理は最小限であるため、これらの処理はキャプチャの最後でのみ処理されます。

60 ミリ秒間隔 (デフォルト) で raw 統計データを処理することで、メモリのオーバーヘッドを削減します。プロファイリング中に結果として生じるオーバーヘッドは、フレームごと統計情報ごとに 4 バイトであり、キャプチャが終了するまで累積されます。これは、その時点まで何もディスクに書き込まれないためです。つまり、大量の統計情報を含む、非常に長時間にわたるキャプチャの場合、メモリが問題になります。メモリ使用量は、キャプチャの最後にログに要約されます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル