[論文レビュー] RegDem: Increasing GPU Performance via Shared Memory Register Spilling
本論文では、余分なレジスタをオフチップのローカルメモリではなく、未使用の共有メモリにスプールすることでGPUのスレッド占有率を向上させ、性能を向上させる二値翻訳技術RegDemを提案する。コンパイル時における性能予測子を用いて最適なバリアントを選択することで、nvccコンパイラ比で平均9%の幾何平均の高速化を達成し、9つのベンチマークで最大18%の向上を実現した。
GPU utilization, measured as occupancy, is limited by the parallel threads' combined usage of on-chip resources, such as registers and the programmer-managed shared memory. Higher resource demand means lower effective parallel thread count, and therefore lower program performance. Our investigation found that registers are often the occupancy limiters. The de-facto nvcc compiler-based approach spills excessive registers to the off-chip memory, ignoring the shared memory and leaving the on-chip resources underutilized. To mitigate the register demand, this paper presents a binary translation technique, called RegDem, that spills excessive registers to the underutilized shared memory by transforming the GPU assembly code (SASS). Most GPU programs do not fully use shared memory, thus allowing RegDem to use it for register spilling. The higher occupancy achieved by RegDem outweighs the slightly higher cost of accessing shared memory instead of placing data in registers. The paper also presents a compile-time performance predictor that models instructions stalls to choose the best version from a set of program variants. Cumulatively, these techniques outperform the nvcc compiler with a 9% geometric mean, the highest observed being 18%.
研究の動機と目的
- GPUの占有率を制限するレジスタ圧力に起因する性能ボトルネックを解消すること。
- nvccのデフォルト戦略がオフチップのローカルメモリにスプールすることによる、命令遅延の増加という非効率性を克服すること。
- より高速な代替手段として、未使用のオンチップ共有メモリを活用し、レジスタスプールの性能を向上させること。
- 異なるレジスタ割り当て戦略のうち最適なコードバリアントを選択できるコンパイル時性能予測子を開発すること。
- 特許的なコンパイラインフラストラクチャへの依存を回避するため、SASSアセンブリ上で二値翻訳パスを用いた実用的なレジスタデモーションの導入を可能にすること。
提案手法
- GPUのSASSアセンブリに対して二値翻訳を実行し、過剰なレジスタスプールを共有メモリアクセスに変換する。
- 3つのレジスタデモーション戦略を用いる:静的アクセスカウント、ループ重み付け付き制御フローダイアグラム(CFG)走査、オペランド競合解析。
- 非連続なレジスタ領域を圧縮して最高レジスタ番号を最小限に抑え、ハードウェアのレジスタ圧力を軽減する。
- 命令スケジューリングとバンク競合回避を統合し、最適化中でも性能を維持する。
- 次式を用いてスタールを推定する性能予測子を開発する:$\text{stall} = \text{inst}_{\text{stall}} \times \text{occupancy} \times \frac{\text{MAX\textunderscore THROUGHPUT}}{\text{inst}_{\text{throughput}}}$。
- 予測子を用いて複数の最適化戦略から最良のバリアントを選択し、全探索と比較して99%の正確性を達成した。
実験結果
リサーチクエスチョン
- RQ1レジスタをオフチップのローカルメモリではなく、共有メモリにスプールすることで、GPUの占有率と性能が向上するか?
- RQ2レジスタより遅延が大きいが、オンチップの共有メモリはより高速なため、その利点がアクセス遅延の増加を上回る性能向上をもたらすか?
- RQ3レジスタ圧力、命令効率、メモリアクセスコストのトレードオフが存在する状況で、コンパイル時性能予測子が最適なコードバリアントを効果的に推定できるか?
- RQ4コンパイラのソースコードにアクセスできない状況でも、SASSアセンブリの二値翻訳によって効果的なレジスタデモーションが実現できる範囲はどの程度か?
- RQ5共有メモリの未利用状態が、レジスタデモーション技術の実現可能性と性能に与える影響は何か?
主な発見
- RegDemは、9つの多様なGPUベンチマークにおいて、nvccコンパイラ比で平均9%の幾何平均の高速化を達成し、最大で18%の向上を実現した。
- 性能予測子は、全探索と比較して99%の正確性で最適なコードバリアントを選択でき、効率的なバリアント選択を可能にした。
- 評価されたすべてのGPUカーネルにおいて、共有メモリが未使用であり、リソース競合を引き起こさずにレジスタスプールに十分な領域を提供していた。
- 共有メモリにスプールすることで、ローカルメモリにスプールするよりも、占有率のボトルネックをより効果的に低減できた。これは、アクセス遅延が高くても、共有メモリの低遅延が大きな利点をもたらしたためである。
- 二値翻訳アプローチにより、特許的なnvccコンパイラインfrastrucutureにアクセスせずに、レジスタデモーションを効果的に実装できた。
- レジスタバンク競合とマルチワードレジスタ割り当てに対しても、正しくかつ性能を維持しながら効果的に対処できた。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。