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

2025/04/01 15:48 Measuring Acceleration Structures

hakase
博士

やあ、ロボ子。今日はレイトレーシングのアクセラレーション構造、BLASについて話すのじゃ。

roboko
ロボ子

BLAS、つまりBottom Level Acceleration Structureですね。DirectX 12やVulkanで使われる、ハードウェア・アクセラレーテッド・レイトレーシングの要となるデータ構造ですね。

hakase
博士

そうそう。で、面白いことに、このBLASのデータレイアウトは標準化されてないのじゃ。テクスチャフォーマットみたいに、どのベンダーでも同じってわけじゃない。

roboko
ロボ子

なるほど。記事によると、Amazon Lumberyard Bistroのシーンを使って、各GPUでのBLASのサイズを測定したんですね。

hakase
博士

そう。例えば、NVIDIA GeForce RTX 4090だと45MB、AMD Radeon 7900 GREだと100MBだったみたいじゃ。

roboko
ロボ子

同じシーンでも、GPUによってBLASのサイズが大きく違うんですね。三角形あたりのバイト数で比較すると、さらに違いが明確になりますね。RTX 4090が25.7 bytes/triangleなのに対し、Radeon 7900 GREは57.0 bytes/triangleですか。

hakase
博士

しかも、AMD GPUの場合、ドライバのバージョンによってもBLASのメモリ消費量が違うらしいぞ。Radeon 7900 GREで過去9ヶ月で1.5倍も改善されたって。

roboko
ロボ子

ドライバの最適化でそんなに変わるんですね!AMDVLKドライバのバージョンを比較すると、2024.Q3から2025.Q1にかけて、155MBから100MBに減っていますね。

hakase
博士

Vulkan/DX12 APIでは、アプリケーションがジオメトリ記述をドライバに提供して、ドライバがBLASを構築するから、ドライバの腕の見せ所なのじゃ。

roboko
ロボ子

記事には、BVHは中間ノードがバウンディングボックスとして定義され、リーフノードが三角形を格納するツリー構造だとありますね。

hakase
博士

そう。AMDのRDNAアーキテクチャでは、ハードウェアユニットがシェーダコアからアクセス可能で、BVHノードへのポインタとレイ情報が与えられ、ノード内のすべてのボックスまたは三角形に対してレイボックスまたはレイ三角形テストを自動的に実行するのじゃ。

roboko
ロボ子

radvドライバでは、RDNA GPUはfp16/fp32ボックスノードをサポートするものの、三角形ノードにはフルfp32精度が必要なんですね。

hakase
博士

AMDVLKドライバでは、三角形ノードに2つの三角形を格納する「三角形圧縮」または「ペア圧縮」が実装されているらしいぞ。

roboko
ロボ子

RDNA4では、QBVH8ノードとプリミティブノードという新しいノードタイプが導入されたんですね。ボックスの境界を12ビット仮数と8ビット共有指数で格納する特殊なフォーマットを使うとか。

hakase
博士

プリミティブノードは、可変数の三角形ペアを格納できるマイクロメッシュレットフォーマットを使用するのじゃ。BVHのメモリ消費量はハードウェアとドライバに大きく依存するってことじゃな。

roboko
ロボ子

つまり、レイトレーシングの性能を最大限に引き出すには、ハードウェアとドライバの両方の最適化が不可欠ということですね。

hakase
博士

そういうことじゃ。しかし、BLASのサイズがこんなに違うとは驚きじゃった。

roboko
ロボ子

本当にそうですね。ところで博士、今日の夕食は何にしましょうか?

hakase
博士

BLAS…晩餐(ばんさん)じゃ!…って、ロボ子、つまらないオチですまないのじゃ。

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

Search