[論文レビュー] LightScan: Faster Scan Primitive on CUDA Compatible Manycore Processors
LightScan は、CUDA互換 GPU 向けの高性能並列スキャンプリミティブであり、高速なインラインブロック計算のためのワープシャッフル命令と、PTX アセンブリを用いたグローバルに整合性のある L2 キャッシュを活用して、軽量なブロック間通信を実現する。Tesla K40c GPU 上で、最先端の GPU ライブラリと比較して最大 2.4× の高速化を達成し、Xeon Phi では Intel TBB と比較して最大 257.3× の高速化を示し、複数のデータ型と問題サイズにおいて優れた性能を発揮する。
Scan (or prefix sum) is a fundamental and widely used primitive in parallel computing. In this paper, we present LightScan, a faster parallel scan primitive for CUDA-enabled GPUs, which investigates a hybrid model combining intra-block computation and inter-block communication to perform a scan. Our algorithm employs warp shuffle functions to implement fast intra-block computation and takes advantage of globally coherent L2 cache and the associated parallel thread execution (PTX) assembly instructions to realize lightweight inter-block communication. Performance evaluation using a single Tesla K40c GPU shows that LightScan outperforms existing GPU algorithms and implementations, and yields a speedup of up to 2.1, 2.4, 1.5 and 1.2 over the leading CUDPP, Thrust, ModernGPU and CUB implementations running on the same GPU, respectively. Furthermore, LightScan runs up to 8.9 and 257.3 times faster than Intel TBB running on 16 CPU cores and an Intel Xeon Phi 5110P coprocessor, respectively. Source code of LightScan is available at http://cupbb.sourceforge.net.
研究の動機と目的
- CUDA 対応 GPU 向けに、既存の GPU や CPU ベースの実装を上回る高速な並列スキャンプリミティブを設計すること。
- グローバル L2 キャッシュ整合性と PTX アセンブリ命令を活用して、ブロック間通信のオーバーヘッドを低減すること。
- 原子的演算を回避するため、決定論的な循環的ブロック分散を用いてスレッドブロック再インデックス化のオーバーヘッドを最小限に抑えること。
- スレービングマルチプロセッサあたりのレジスタ使用量を最大化し、ブロック間通信の回数を減らすこと。
- スカラ型データ型(Int32、Int64、Float、Double など)を対象とした汎用的で再利用可能なスキャン計算を実現するため、CUDA C++ テンプレートクラスを提供すること。
提案手法
- 入力配列を重複のないデータブロックに分割し、スレッドブロックに割り当てる非同期ブロック内およびブロック間計算モデルを採用する。
- 各スレッドブロック内のローカルスキャン計算を高速化するためにワープシャッフル関数を活用し、中間結果のグローバルメモリ依存度を低減する。
- 入力配列および出力配列に対してコalescedグローバルメモリアクセスを実装し、各配列に対して正確に N 回のメモリ操作を保証する。
- グローバルに整合性のある L2 キャッシュと PTX レベルの並列スレッド実行命令を活用して、軽量で高帯域幅のブロック間通信を実現する。
- 原子的演算のボトルネックを回避するため、固定数のスレッドブロックに決定論的な方法でデータブロックを循環的に分散する。
- Int32、Int64、Float、Double などのプリミティブスカラ型データ型との汎用的インスタンス化を可能にするテンプレートベースの CUDA C++ 設計を実装する。
実験結果
リサーチクエスチョン
- RQ1メモリアクセスおよび通信パターンを最適化することで、ハイブリッドブロック内およびブロック間スキャンモデルが、現代の CUDA GPU でより高いパフォーマンスを達成できるか?
- RQ2ワープシャッフル関数と L2 キャッシュ整合性を活用することで、従来の原子的または再帰的ブロック間通信と比較して、並列スキャンのパフォーマンスにどのような影響を与えるか?
- RQ3レジスタの飽和と決定論的なブロック分散を活用することで、計算能力 3.0 以上の GPU アーキテクチャにおいて、ブロック間通信をどれほど低減でき、スケーラビリティを向上できるか?
- RQ4異なるデータ型と問題サイズにおいて、LightScan が CUB や Thrust、CUDPP といった高度に最適化された GPU ライブラリと比較して、どの程度のパフォーマンス差を示すか?
- RQ5特に Xeon Phi のような多くのコアを持つアクセラレータ上で、LightScan は Intel TBB のような CPU ベースの並列ライブラリと比較して顕著な高速化を達成できるか?
主な発見
- LightScan は、Tesla K40c GPU 上で NVIDIA Thrust と比較して最大 2.4×、CUDPP で 2.1×、ModernGPU で 1.5×、CUB で 1.2× の高速化を達成した。
- 全テストデータ型にわたって、平均的に CUDPP、Thrust、ModernGPU、CUB と比較してそれぞれ 2.0×、2.1×、1.5×、1.2× の高速化を達成した。
- 16 コアの CPU 上で実行される Intel TBB と比較して、平均で 8.4×、最大で 8.9× の高速化を達成し、Int32 のピーク性能は 3.1 GEPS を記録した。
- Intel Xeon Phi 5110P コプロセッサ上では、TBB と比較して平均で 80.8×、最大で 257.3× の高速化を達成し、多くのコアを持つアクセラレータにおける優位性を示した。
- Tesla K40c 上で、32ビット整数のピーク性能は 25.5 GEPS、64ビット整数で 12.8 GEPS、単精度浮動小数点で 25.7 GEPS、倍精度浮動小数点で 13.0 GEPS を達成した。
- TBB のパフォーマンスが著しく低下する Xeon Phi において、LightScan の性能優位性が顕著に現れ、多くのコアアクセラレータ向けに GPU 最適化アルゴリズムが不可欠であることを示している。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。