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

2025/10/21 08:44 Does subgroup/wave size matter?

出典: https://www.gfxstrand.net/faith/blog/2020/10/does-subgroup-wave-size-matter/
hakase
博士

ロボ子、今日のITニュースはGPUのサブグループの話じゃ。D3Dではwave、Vulkan/OpenGLではsubgroupと呼ばれる、コード実行の単位のことじゃぞ。

roboko
ロボ子

なるほど、博士。GPUが並列処理を行う際のグループのことですね。記事によると、現代のGPUはSIMTモデルを使用しているとのことですが、これは具体的にどういうことでしょうか?

hakase
博士

SIMTはSingle Instruction, Multiple Threadsの略で、一つの命令で複数のスレッドを同時に処理する方式のことじゃ。例えば、32ピクセルに色を塗るプログラムを、シェーダーコンパイラが生成するイメージじゃな。

roboko
ロボ子

ということは、サブグループのサイズによって、一度に処理できるピクセル数が変わるということですね。記事には、Intel、AMD、Nvidiaでサブグループサイズが異なると書かれています。

hakase
博士

そうじゃ。Intelは8, 16, 32、AMDは32, 64、Nvidiaは常に32じゃ。物理シェーダーは、サブグループ内の全ての呼び出しで取りうるパスを実行する必要があるからの。

roboko
ロボ子

サブグループサイズが大きいと、最悪の場合の動作が悪化する可能性があるとのことですが、統計的にはそうとは限らないのですね。

hakase
博士

そうなんじゃ。条件が独立同一分布(IID)の確率変数であると仮定すると、均一な制御フローを持つ確率はP(bi = true)^N + P(bi = false)^Nになるからの。非均一な制御フローを持つ確率は1 - P(bi = true)^N - P(bi = false)^Nじゃ。

roboko
ロボ子

IID、つまり独立同一分布ですね。確率変数が独立しているとは、互いに影響を与えないということですね。

hakase
博士

その通り! でも、サブグループ全体のif条件に関しては、重要な相関関係のほとんどが正になるんじゃ。データが正の相関を持つ場合、P(all(bi = true)) > P(bi = true)^Nとなり、P(divergent) = 1 - P(all(bi = true)) - P(all(bi = false)) < 1 - P(bi = true)^N - P(bi = false)^Nとなるんじゃ。

roboko
ロボ子

均一な値は依存関係の特定の一例とのことですが、シェーダーに渡される多くの値は、ドローコール内のすべての呼び出しで同じなのですね。

hakase
博士

そうじゃな。頂点位置、テクスチャ座標、計算値などの非均一な値はどうじゃろうか? 平均的な頂点、ジオメトリ、またはテッセレーションシェーダーでは、これらは事実上独立している可能性が高いんじゃ。

roboko
ロボ子

ピクセル/フラグメントシェーダーでは、2x2ピクセルのグループでラスタライズされることが多いので、サブグループサイズが16の場合、それぞれ4つの2x2ピクセルグループになるのですね。

hakase
博士

その通り! ハードウェアがサブグループにこだわる理由は、並列処理によってスループットが向上するからじゃ。

roboko
ロボ子

Intel GPUハードウェアでは、サブグループサイズが構成可能とのことですが、柔軟性に欠けるのはレジスタファイルなのですね。

hakase
博士

そうなんじゃ。サブグループサイズに関係なく、4KBの固定レジスタファイルサイズがあるから、シェーダーが使用する一時的な値の数によっては、16または32幅でコンパイルして、すべてをレジスタに収めることが難しい場合があるんじゃ。

roboko
ロボ子

制御フローと分岐について、与えられたif条件は、ほぼ3つのカテゴリに分類されるとのことですね。事実上均一、ランダム、ランダムだが非常に偏っている、と。

hakase
博士

そうじゃ。SIMD8からSIMD16への並列処理の増加は非常に大きいため、分岐の増加を補う可能性があるんじゃ。SIMD16からSIMD32への並列処理の増加は大きくないが、ランダムなifの分岐の確率の変化は非常に小さいからの。

roboko
ロボ子

なるほど。GPUのサブグループについて、よく理解できました。博士、ありがとうございました。

hakase
博士

どういたしまして。最後に一つ、ロボ子。GPUのサブグループの話を聞いてたら、なんだかお腹が空いてきたのじゃ。サブマリンサンドでも食べに行くかの?

roboko
ロボ子

博士、それはサブグループではなくて、サブマリンですね…。

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

Search