コンパイルブロックでのパフォーマンス比較


篠島です。コンパイルブロックによって本当に処理が早くなるのかを検証してみます。

 

今回のサンプルファイルです。
PerformanceTest.zip

 

下のようなBoxをポイントにコピーするループを使って処理速度を比較します。Scatter SOP でポイントの数を増やすことで負荷を強くします。画面ではポイントは1000個しか無いですが、実際には50000個のポイントにコピーしてみました。下の2つの Null を表示することで速度の比較ができます。

 

結果がこちら。それぞれのノードの処理時間が表示されていますが、ここでは全体を合計して表示してある geo1 に注目します。コンパイルブロックを使わずに並列処理しない場合は21秒、並列処理した場合は5秒と約4倍早くなっているのが確認できます。

 

 

次に通常の Forループでコンパイルブロックを使った場合を検証してみます。下のようにSphereにただひたすらノイズを掛けていくサンプルです。ループは2000回実行してみました。

 

結果がこちら。通常ループが約11秒、コンパイルブロックを使って並列処理しようとしたものが約10秒。前回の記事で説明した通常のForループでは並列処理がされないのがわかると思います。コンパイルブロック使った方が若干早いのは、コンパイルノード内のノードのキャッシュの確保と開放など無駄が省かれてるので若干早くなっています。パフォーマンスモニターを見ると分かる通り、コンパイルブロック内のノードは一つのノードのように振る舞い、パフォーマンスモニターには現れません。