# Dynamic Parallelism ## 定義 Dynamic Parallelism(DP、動的並列化)とは、実行中のGPU「親」カーネルが自身の中間結果を検査し、CPUを介さずGPU側で直接「子」カーネルを起動できるCUDAの機能である。CPU駆動フローでは、カーネルAを実行→結果をホストへコピー→CPUがカーネルBの起動要否を判断→起動、という往復でGPUがアイドルになる区間が生じるが、DPはこの判断と起動をGPU常駐のまま完結させる。階層的リダクション、適応メッシュ細分化、グラフ探索など、後続タスクの数がデータ処理を進めるまで判明しない不規則な問題に向く。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 12 Dynamic Scheduling, CUDA Graphs, and Device-Initiated Kernel Orchestration]], §Dynamic Parallelism) DPの利用には `-rdc=true`(リロケータブルデバイスコード)によるコンパイルが必要で、子カーネルの起動はスタック領域と未処理デバイスローンチの上限(既定2,048、`cudaDeviceSetLimit` で変更可)を消費する。ホスト駆動版に対し、GPUアイドルサイクルを約40%から約5%へ削減し全体実行時間を25%短縮する例が示される一方、1回あたりのローンチオーバーヘッドはわずかに増加する(約20µs→25µs)。子カーネルの処理が小さすぎるとこのオーバーヘッドが利得を相殺し、DPがかえって遅くなる場合がある。 ## 横断的知見 - (本concept は本ソースが初出のため、横断的知見は今後のソース追加を待って蓄積する) ## 未解決の問い - CUDA Graphsのデバイス起動グラフローンチ(fire-and-forget/tail/sibling)とDPはいずれもCPUを排除した自律的なGPU側分岐・起動を実現するが、両者の使い分け基準(実行フローが事前に既知かどうか)は本章で示された。実際のLLM推論エンジン(vLLM、TensorRT-LLM等)はDPとデバイス起動グラフのどちらを、どの決定ポイントで採用しているか。 - DPの子カーネルローンチオーバーヘッド(約20〜25µs)は、どの程度の子カーネル実行時間があれば償却できるか。実務上の損益分岐点を示す定量データはまだ本ソースにはない。 ## 関連 - 隣接concept: [[CUDAGraph]](固定パイプラインのキャプチャ・リプレイに対し、DPは実行時に形が決まる不規則な問題に向く) / [[Rooflineモデル]](DPはローンチオーバーヘッド削減により演算律速カーネルをコンピュートルーフへ近づける手段の一つ) - ソース: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 12 Dynamic Scheduling, CUDA Graphs, and Device-Initiated Kernel Orchestration]] ## 出典 - Chris Fregly, *AI Systems Performance Engineering*, O'Reilly Media, 2025, Chapter 12, §Dynamic Parallelism.