[HDK続き]やっぱりか

先日作ったSDFStickに関して、続きというか付け足し。


前回、SDFStickと同じものはVOPSOPで作成可能です、と述べたのですが、
じゃあ実際に作って速度比べてみようかと思って、簡単にVOPを組んでみました。

VOPは何度も言うとおりVEXのガワでしかなく、実際にはVEXが生成されて実行されています。
で、そのVEXという言語なのですが、マルチスレッドやらSIMDやらに対応した(という言い方で良いのか自信ありませんが、、)とても高速な言語です。
なんつったってシェーダ用の言語なわけですしね、速度は大事です。

VOPで組んだネットワーク、というかプログラムは、こちらが特に何かをせずともマルチスレッド化されます。
GUIからスレッド数選ぶだけです。

今回はHDK版と比較するにあたって1 Per Processor、つまり1コア1スレッドで走らせました。

Stickの対象のポイントは100万ポイント。
SDFStickは15秒弱程度の処理速度だったのに対し、VOPSOP版は3.5秒でした。

試しにVOPSOPをデフォルトのNo Threadingにしたところ、プラグインとほぼ同等の14秒強になりました。
誤差があるのは、プラグイン側でちょいちょい判定を入れてみたりとかしていたのが影響していると思います。
結果はほぼ同じ、と言って問題ないレベルなんじゃないかと。

VOP優秀ですねー。完璧すぎます。
単純なポイント演算を膨大なデータに行う、まさに今回のようなケースでは非常にスケーラブルな結果が出ました。
うちのマシンは4コアなんですが、ほぼ4倍速。おそるべし、です。

つまり何が良いたいかというと、
こういうケースではプラグイン書く必要なんかほとんど無いってことです。
普段の仕事しててプラグイン欲しいなー、、って思っても大体VOPでやれちゃうということです。
もちろん全く新しい機能の組み込みとかはHDKじゃないと無理ですが:P

というわけで、HDKは強力ですが、用途によってはVOPの方が速いので、普段の仕事ではふんだんにVOP使うと言いと思うよ!というお話でした。

HDKをこういうケースで使うのであれば、割りとがっちりマルチスレッド対応など考えてやらないと意味なさそうです。
逆にVOPからはみ出る場合は問答無用でHDKのお世話になるしか無いので、どっちが良いとかじゃなくてケースバイケースで使用しましょう、ということでした。

今回のはHDK覚えようキャンペーンとして作ったプラグインなので、
VOPのが速ければ別にそっち使うつもりまんまんです。
今後につながればそれでOK、なのです:)

これを機にマルチスレッドのサンプル探してみるのも良いかな、とも思っていますが、それはまた後日。

「[HDK続き]やっぱりか」への2件のフィードバック

  1. VOPは膨大なポイントなどで並列処理に得意ですが(SIMDのお陰 :D)、ポイントがお互いを干渉しあう場合はお手上げ状態

    この場合はHDKの出番になりますよね :)

  2. >AKSさん
    コメントありがとうございます。
    HDKのマニュアルにもVOPが有効ですよ、と書いてありました。
    でも仰るとおり、たしかに干渉しあう場合は難しいんでしょうね。
    N体運動(?)の計算とかでしょうか。SPHとかまさにそうなるんですかね。
    難しい話ですが、ちょいちょい勉強していきたいと思っています。

コメントを残す

メールアドレスが公開されることはありません。