NUKE パフォーマンスプロファイリングモードについて

こちらの記事では、NUKEのコンプファイル内の処理時間等を確認することのできるPerformance Profiling モードについて、起動方法と表示される内容、XMLファイルへの出力方法を紹介致します。

 

NUKEのパフォーマンスプロファイリングモードは、各ノードの処理にかかる時間やリソースを画面上またはXMLファイルに出力するため、処理の遅いコンプファイルの原因を判断するのに役立ちます。

パフォーマンスプロファイリングモードを有効化すると、タイミング情報がNode Graphタブ内に表示され、ノード自体も各処理時間に応じて、緑から赤にかけて色付けされます。

以下の画像は、3Dオブジェクトと実写素材との合成を行っている.nkファイルを、パフォーマンスプロファイリングモードが有効な状態で開いた画像です。ReadノードやMergeノード等、処理の早いものは緑、ScanlineRenderノードは黄色、さらに処理に時間のかかるVectorBlurノードは赤くなっていることが確認できます。

表示された内容を参考に、処理の重い部分を先にレンダリングする、Precompするといったコンプファイルの最適化が行えます。

 

 

▼パフォーマンスプロファイリングモードの起動方法

パフォーマンスプロファイリングモードを有効化するには、コマンドライン、またはScript Editorタブを使用します。それぞれの手順について紹介致します。

 

コマンドラインから起動する方法

※以下のコマンド内容は、デフォルトのディレクトリにインストールしたNUKE 10.5v5をパフォーマンスプロファイリングモードで起動する場合の内容となります。

Windows:

コマンドプロンプトウィンドウを開いて、次のコマンドを実行します。

"C:\Program Files\Nuke10.5v5\Nuke10.5.exe" -P

 

Mac OSX:

アプリケーション > ユーティリティからターミナルウィンドウを開き、次のコマンドを実行します。

/Applications/Nuke10.5v5/Nuke10.5v5.app/Contents/MacOS/Nuke10.5v5 -P

 

Linux:

ターミナルを開き、次のコマンドを実行します。

/usr/local/Nuke10.5v5/Nuke10.5 -P

起動した後の画面で、メインメニューバーに[Performance]が表示されていれば、パフォーマンスプロファイリングモードが有効化されています。このメニューでは、タイミング情報の確認の開始、リセット、停止を選ぶことができます。

 

Script Editorで起動する方法

通常通りNUKEを起動した後に、Script Editorタブを開きます。Script Editorタブは左上にある四角のボタンを押して、 [Windows] > [Script Editor] を選択することで開くことができます。

開いたScript Editorタブの下の欄に、以下の内容を入力して、[Ctrl+Enter]キーを押します。

nuke.startPerformanceTimers()

これで、パフォーマンスプロファイリングモードを有効化することができます。

 

Script Editorタブでは、以下の内容を入力するとタイミング情報をリセットすることができます。

nuke.resetPerformanceTimers()

また、以下の内容を入力するとタイミング情報の表示を停止することができます。

nuke.stopPerformanceTimers()

 

尚、パフォーマンスプロファイリングモードをコマンドラインまたはスクリプトエディタ上で有効化した場合、追加の処理が発生しますが、データではコンプファイル内の処理で実際にかかった時間が得られます。

 

 

▼パフォーマンスプロファイリングモードで表示される情報について

パフォーマンスプロファイリングモードでは、各ノードが以下の情報を表示します。

  • cpu – CPUが処理コードの実行に費やした時間をマイクロ秒単位で表示します。この数値は、すべてのCPUスレッドから集計されます。そのため、マルチスレッド処理が行われた場合は、[cpu]の時間は基本的に[wall]の時間よりもはるかに長くなります。[cpu]を使用したスレッド数で割った値が[wall]の時間よりもはるかに短い場合は、パフォーマンスの問題により、CPUスレッドがコードを実行せず、ロックを待機している可能性があります。
    尚、現在Mac OS XおよびWindowsでは[cpu]の時間は正確ではありません。 Mac OS Xでは、[cpu]の値は常に[wall]の時間に似ています。
  • wall – 実際に処理が完了するまで待たなければならない時間をマイクロ秒単位で測定し、表示します。
  • ops – ノードで呼び出されたオペレータの数。オペレータは、特定のタスクを実行するNukeのビルディングブロックのことです。ノードには、1つ以上のオペレータが含まれています。
  • memory – そのノードで使用されているシステムメモリの合計量。

 

 

▼パフォーマンスプロファイリングモードで表示される情報をファイルに出力する方法

-Pfフラグと、ファイル名を指定することでタイミング情報をXMLファイルに出力することができます。このファイルはレンダリング時、つまりWriteノードまたはコマンドラインでのレンダリングの際に生成されます。

 

Windowsの場合、次のようなコマンドで起動することで、Node Graph内のWriteノードからレンダリングするときに、プロファイルデータを指定したファイルに書き込むようになります。
※<>内には適宜使用するバージョン名やファイルパスが入ります。

Nuke<version>\Nuke<version>.exe -Pf <file path and name>.xml

NUKEX 10.5v5を使用し、Writeノードをレンダリングした時にC:\Tempにファイルを出力するように設定する場合は、以下のように入力します。

"C:\Program Files\Nuke10.5v5\Nuke10.5.exe" --nukex -Pf C:\Temp\profileTest.xml

 

コマンドラインからレンダリングする場合は、次のようなコマンドを入力します。このコマンドでは、profileTest.nkというスクリプトのWriteノードの1フレームから10フレームをレンダリングし、プロファイルデータをXMLファイルに書き込みます。
※<>内には適宜使用するバージョンが入ります。

Nuke<version>\Nuke<version>.exe -x -Pf C:\temp\profileTest.xml C:\temp\profileTest.nk 1-10

 

出力されたXMLファイルを開くと、以下のようにリストで確認できます。以下の画像に表示されているもの以外にも多数の情報が含まれており、.nkファイル名、処理日時、各ノードの処理に使用されたCPU名、スレッド数、時間など、詳細な情報が表示されます。

 

 

※参考リンク