研究概要 |
まずGPUを対象とした自動チューニング手法に着手した. GPUの場合, コードの実装によって性能が何倍にも変動することが多く, またGPU製品・アーキテクチャの世代交代も非常に速いため自動チューニング手法は重要な役割を占める. NVIDIAのCUDAで自動チューニングを行うためには動的にコードを生成し, ファイルに保存し, nvccでコンパイルし, モジュールとしてロードし, 実行するという処理が通常であるが, これらの処理は全てCPU側で行われるため時間がかかる. 中でもコンパイル時の最適化に要する時間が長い. そこでFFTの計算を対象にして, メモリ上に, より低レベルなCUDA PTX言語でコードを生成し, メモリ上でコンパイルすることで大幅な時間短縮を実現した. CUDA PTXは中間言語であり, ループ不変数の検出などの通常コンパイラが担当する最適化を自ら適用しておく必要があるが, 一番難しいレジスタの最適化は行う必要がないため, 対象とする計算内容を熟知してさえいれば容易にコード生成が可能である. もう一つ重要となりつつある機能はGPU間のデータ転送である. 大規模なアプリケーションになるとGPUのメモリ容量では不足するため, 複数GPUを搭載するシステムや複数のノードを使用する必要がある. CUDAではバージョン4.0からPCI-Expressネットワークを介したGPU間の直接転送や, InfiniBand HCAとの協調動作などがサポートされ, 複数GPU化の効率が向上した. しかしながら多数のGPUを搭載する場合にはPCI-Expressネットワークのトポロジーの制約が大きく, また複数ノードの場合にはホスト側の特にメモリバスへの負荷が大きく, その辺りがボトルネックになっている.
|