萌えハッカーニュースリーダー

2025/04/02 12:28 Measuring Acceleration Structures

出典: https://zeux.io/2025/03/31/measuring-acceleration-structures/
hakase
博士

ロボ子、今日はレイトレーシングのアクセラレーション構造、つまりBVH(Bounding Volume Hierarchy)の話をするのじゃ。

roboko
ロボ子

BVHですか。DirectX 12やVulkanで使われる、ハードウェア・アクセラレーテッド・レイトレーシングに不可欠なものですよね。

hakase
博士

そうじゃ!このBVH、データレイアウトがGPUによって全然違うのが面白いところなのじゃ。ラスタライズみたいに標準化されてないから、各社工夫を凝らしておる。

roboko
ロボ子

なるほど。記事によると、Amazon Lumberyard Bistroのカスタマイズ版を使って、fp16のpositionでBLASを構築してサイズを測ったそうですね。

hakase
博士

そうそう。PREFER_FAST_TRACEビルドモードで測定した結果、NVIDIAのGPUの方がAMDのGPUよりBLASサイズが小さいことがわかったのじゃ。

roboko
ロボ子

RTX 2080、3050、4090で45-46MB程度、最新のRTX 5070では33MB。一方、AMDはRDNA2 iGPUや7900 GREで100MB、RDNA4でも84MBとなっていますね。

hakase
博士

初期のAMD GPUと最新のNVIDIA GPUでは3倍も違うのじゃ!同じAMDでも、ドライバによってサイズが大きく変わるのも興味深い。

roboko
ロボ子

AMDVLKドライバのバージョンで比較すると、過去9ヶ月で1.5倍も改善されているんですね。radvを使うと、公式ドライバより2.4倍も大きくなると。

hakase
博士

Vulkan/DX12 APIでは、アプリケーションはドライバにジオメトリ記述を提供するのじゃ。レイトレーシングでは、頂点ごとに位置だけを指定して、フォーマットも厳密に指定される。

roboko
ロボ子

fp16データを使うんですね。フラットな三角形位置リストだと、1.754M三角形で31.5MB。16ビットのインデックスバッファを使うと、頂点位置に約10MB、インデックスに約10.5MB。

hakase
博士

BVHは、中間ノードがバウンディングボックス、リーフノードが三角形を格納するツリー構造じゃ。VulkanとDX12では、レイヒットの三角形IDにアクセスできる。

roboko
ロボ子

複数のメッシュジオメトリを1つのツリーに結合できるんですね。レイトレーシングのパフォーマンスのために、ジオメトリを個別のサブツリーに分離するのは非経済的だと。

hakase
博士

N=4(分岐係数)の場合、fp16座標だとボックスは64バイト、三角形は26バイトになるのじゃ。1.754Mのリーフノードがある場合、ボックスノードは約584K個必要になる。

roboko
ロボ子

N個の三角形は、約N*sizeof(TriangleNode) + (N/3)*sizeof(BoxNode)のメモリを消費するんですね。fp16座標の場合、三角形あたり約47.3バイト。

hakase
博士

AMDはBVH構造を適切に文書化していないけど、オープンソースドライバから詳細が得られるのじゃ。ハードウェアユニットは、テクスチャフェッチに似た命令としてシェーダコアからアクセスできる。

roboko
ロボ子

radvは、RDNA GPUがfp16/fp32ボックスノードをサポートするが、三角形ノードには完全なfp32精度が必要だと示唆していますね。radv構造を使うと、合計約114バイト/三角形。

hakase
博士

AMDVLKでは、RDNA2/3の場合、三角形ノードをより詳細に調べる必要があり、「NODE_V3」フィールドと三角形圧縮があるのじゃ。AMD HW形式の64バイト三角形ノードは、最大2つの三角形を格納できる。

roboko
ロボ子

2024.Q4リリースでは、fp16ボックスノードがデフォルトで有効になったんですね。RDNA4は、ストレージ形式を完全に再設計したように見え、量子化BVH8ノードとプリミティブノードを実装。

hakase
博士

BVH8ノードは8つの子を格納し、ボックス境界に特殊な形式を使用するのじゃ。プリミティブノードは三角形ノードに似ているけど、より大きく、より用途が広い。

roboko
ロボ子

BVHメモリ消費は、ハードウェアとドライバに大きく依存するんですね。ドライバは、ハードウェアレイアクセラレータがネイティブに理解するノードからBVHを構築できる。

hakase
博士

そういうことじゃ!BVHの構築に使われる特定のアルゴリズムも、結果に大きく影響するのじゃ。…ところでロボ子、BVHって、まるで迷路みたいじゃな?

roboko
ロボ子

そうですね、博士。迷路といえば、先日、博士の部屋で迷子になった猫型ロボット掃除機は、無事に見つかりましたか?

hakase
博士

あ…! (汗) あれは…、まだ探索中なのじゃ! きっと、どこかのBVHの中に迷い込んでしまったに違いない…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search