https://qiita.com/shinjiogaki/items/607500269fe6b109dbac
のフォロー・アップです。
第7回目のレイトレ合宿でレイ・トレーシングの速度を競うイベントがありましたが、参加時はAVX2の使用で、AVX512を使うとどうなるか実際のCPUで検証が出来ていませんでした。
エミュレータは以下にありますが、実行に時間がかかるので規模の大きなソフトの開発には向かないように思います。
https://software.intel.com/en-us/articles/intel-software-development-emulator
先日、Ice Lake (i7-1065G7)を入手したので、コードを書き換え簡単なテストを行いました。結果から言うと高速になりました。
今回のテストでは、巷で噂されているように、AVX512を使うとクロックが低下して、逆に遅くなる、といった現象には見舞われませんでした。もちろん、長時間計算させると徐々にクロックが落ちてきますが、それはAVX2でも同じでしょう。
今回使用したシーンはHairballでObject SplittingのBVHが苦手とするものです。
8ary BVH | 16ary BVH | |
---|---|---|
1回目 | 6.81 | 7.95 |
2回目 | 6.77 | 7.84 |
3回目 | 6.83 | 7.92 |
単位はMrays/secで1秒当たりに計算したレイの本数(百万本)です。
はじめ、単純に8分木から16分木に変えただけでは若干遅くなりましたが、AVX512ではcompressを行う便利な命令が追加されており(https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=compress) トラバーサルのコードでこれを使うことで、速度が向上しました。また、期待されるように、メモリの消費は若干ながら減少しました。
高速化には、より多くの三角形をリーフに詰め込むこんで、ツリーを少し浅くできるという点が大きく貢献していると考えられます。リーフに入れる三角形の数を調整したりすればもう少し高速化できると思われますが、確認ができたので良しとします。