気候モデル放射カーネル
のGPUへの移植と高速化
山岸 孝輝
高度情報科学技術研究機構
日本気象学会2013年度春季大会
Ver. 1.1
はじめに
本研究で行ったこと
気候モデルの放射過程をGPUに移植して高速化
放射過程はNICAMから切り出したもの
CPU(京1node)比で4.7倍の高速化
何を目指しているか
気象・気候モデルをGPUで高速化→高解像度、高ス
ループットな研究環境を実現し、成果を創出
京コンピュータに続くスーパーコンピュータで求めら
れる超並列計算に向けての基礎研究
発表内容
GPUの紹介と放射過程高速化の報告
気象・気候モデルへのGPUの適用について、放射過程のみ
ならず広く議論したい
はじめに
What’s GPU?
Graphics Processing Unit
PC等の画像処理を行う装置として開発、利用
大量のデータを並列で処理
高い演算性能かつ低コスト
画像処理以外への応用
汎用のGPU用プログラ
ミング言語「CUDA」登場
GPU搭載スパコンの普及
米国オークリッジ研「Titan」
東工大「TSUBAME2.0」
NVIDIA社 GTX580
512個の演算コア
PCに差して利用する
背景
http://www.nvidia.co.jp/
気象・気候モデル研究とGPU
気象・気候モデル研究からの要求
高解像度化
雲解像モデルなど
モデルの複雑化、演算負荷の増加
地球システムモデル、LESの導入など
高スループット化
アンサンブル実験の必要性が増加
背景
高い演算性能かつ低コストなGPUは
これらの要求に応えることが期待されている
気候・気象モデルを
GPUへ適用した先行研究
WRF
放射過程のみGPUに移植
WRFの1/4の実行時間を占める放射過程を20倍高速化
ASUCA
力学・物理過程全てをGPUに移植して10倍高速化
マルチGPUでスケールさせたことも特徴
CAM-SE
8割のcodeをGPUに移植、Cray XK6スパコンで1.5倍高速化
WRFの事例を応用し、今後は3~10倍を目標に設定
NIM
各ルーチンにて2~3倍高速化
2013年にはTitanで3.5km実験を予定
COSMO, HOMME, GEOS-5, MITgcm, HYCOM, HIRLAM
一部をCUDA化し、高速化した事例の報告
複雑さ・進行状況にばらつきはあるが、複数の事例があがるようになってきた
いずれは地球科学としての成果も出てくるだろう
背景
NIM development@SC12
2013年には世界一のスパコンTitanで3.5km実験を予定
Mark Govett
(NOAA)
SC12での発表
背景
GPUの利点
CPUより優れていること
演算性能、メモリ転送速度、コスト
高い理論演算性能
多数の演算コア
最新のGPU「K20」は2496コア
K20とSPARC64 IXfx(FX10搭載CPU)比較で4倍
プロセッサ-メモリ間での高いデータ転送速度
K20とSPARC64 Ixfx比較で2.4倍
コスト
導入コスト、ランニングコスト(電力効率)共に
CPUより小さい
背景
これら利点をいかに活用するかが検討されている
GPUの欠点(?)
超並列でのプログラミングが必要
多数の演算コアを持つ
CPUとは異なるアーキテクチャ、言語
理解、習得と移植が必要
コードの可搬性
CPUで動かせない/性能が出ないコードにな
るのは困る
背景
問題は、GPUの利点と比べてどうか、ということ
利点と欠点を正しく理解し、知見を蓄積することが重要
GPUのハードウェア構造
多数の演算コアの存在
32コアでひとまとまり(=1つのSM)
32コア全てに同じ命令を同時に与える
32コアごとのローカルなキャッシュ
32コア×16=512コア
※上図はFermiアーキテクチャ
32個の
演算コア
キャッシュ
命令ユニット
背景
16個のSM(Streaming
Multiprocessor)で構成
32コア全て
に同じ命令
を同時に
データを一時保存
して再利用
高速に読み書き可能
データのGPUへの割り振り方
例:要素数128x128のデータ
例:8x8=64領域(=ブロック)
に分割
1ブロックの要素数が16x16=256
ブロックをSMに割り当てる
ブロックとSMの対応は不定
ブロック内のデータ間では、SM
のキャッシュでデータを共有可能
データを一時保存して再利用する
高速に読み書き可能
SMは、ブロック内で連続する32
個のデータに対して、同じ命令を
同時に出して処理していく
全データの処理を終了するまで以
上を繰り返す
ff
ff
1
2
ff
ff
1
ff
1
63
ff
ff
1
1
64
…
…
32
コ
ア
キャッ
シュ
32
コ
ア
キャッ
シュ
32
コ
ア
キャッ
シュ
32
コ
ア
キャッ
シュ
32
コ
ア
キャッ
シュ
32
コ
ア
キャッ
シュ
背景
A(1),,A(32)
同じ命令
A(65),,A(128)
同じ命令
A(225),,A(256)
同じ命令
… …
ブロック内のデータ間では、SMのキャッシュでデータを共有可能
128(8分割)
128
(8分割)
GPUで性能を出すには
以下の3つの条件が必要
高い並列性を持つデータ構造
限られたある範囲内(=1ブロックとその周
辺)でのデータアクセス、キャッシュ利用
多数のブロック外データへのアクセスは苦手
32個のデータに対して同じ命令を同時に出す
気象・気候モデルでの計算には、以上の条件を
満たす処理が多く存在する
GPUは気象・気候モデルに向いている可能性が高い
背景
本研究:放射過程のGPU移植
なぜ、放射過程か
NICAMでの全処理時間の25%~30%を占めてお
り、高速化に対する需要は大きい
データの並列性が強く(後述)、GPU向き
気候モデルの一部分としてだけでは無く、オフラ
インモデルとしての需要
スパコンを使わなくても、GPUを差したデスクサイド
PCで高速計算が可能!
放射過程と同じアルゴリズムの計算は、衛星デー
タ処理に応用できる
大量のデータを高速に処理する事例など
放射過程 データの構造
3次元data(i, j, k)の
loop
k方向のみ隣接アクセス
あり
気候モデル計算での例:
(128, 128, 94)/node
16384(=128x128)
個の独立な計算
(i, j, k)の他、波長帯な
どの要素でもloop回転
これら要素間でも独立に
計算
data(i, j, k)
GPU移植
16384個の
独立な鉛直カラム
16384個の多数の独立なデータ
(とその処理)を、GPUの多数
の演算コアに割り振れば良い!
放射過程 loop構造
代表的なloop構造
GPUで性能を出すための条件を満たしている
「高い並列性」→16384の並列性
限られた範囲内でのデータアクセス
複数のデータに対して同じ命令
DO ICH = 1, MICH←波長帯でのloop、独立(:30~)
DO K = 1, KMAX(:94) :鉛直
DO IJ = 1, IJMAX(:16384) ←水平面
A( IJ,K ) = B( IJ,K ) +D(ICH)*C( IJ,K )←水平面IJ方向に独立
END DO
DO IJ = 1, IJMAX(:16384)
X( IJ,K+1 ) = X( IJ,K+1 ) + Z*Y( IJ,K )←IJ方向独立、鉛直K方向に依存性有り
END DO
END DO
END DO
GPU移植
汎用のGPU用プログラミング言語CUDA Fortranを用いてGPUに移植
GPUで実行し、CPUでの実行と性能比較する
GPU移植で工夫したこと
キャッシュからのロードを削減
各スレッドの中で、k方向にloopの場合
一時変数を用いて、レジスタに確保
CUDA化
IJ = threadidx
DO K = KLEV, 1, -1
RL( IJ,K ) = RE( IJ,K ) + &
TE( IJ,K )*BB*RL( IJ,K+1 ) &
*TE( IJ,K )
end DO
IJ = threadidx
RL0 = RL ( IJ,KLEV+1 )
DO K = KLEV, 1, -1
RL1 = RE( IJ,K ) & +
TE( IJ,K )*BB*RL0 &
*TE( IJ,K )
RL( IJ,K ) = RL1
RL0 = RL1
end DO
GPU移植で工夫したこと
OFIRSTでsaveされる変数
メモリに読みに行くなら毎回演算してしまう
CUDA化
! LEGENDRE POLYNOMIALS.
IF ( OFIRST ) THEN
OFIRST = .FALSE.
AMUA(1) = 1.D0/SQRT(3.D0)
WMP (1) = SQRT(AMUA(1))
AMX (1) = 1.D0
WMX (1) = WMP(1)/AMX(1)
AMUA(2) = 1.D0/1.66D0
WMP (2) = SQRT(AMUA(2))
AMX (2) = AMUA(2)*2
WMX (2) = WMP(2)/AMX(2)
ENDIF
性能プロファイル分析
CPU GPU
adding_random 29% 19%(-10)
ptfit2 23% 14%(-9)
twst_random 16% 26%(+10)
twst_random:除算が多い
CPUのコンパイラがGPUに比べて優秀だから?
除算の逆数近似?
GPUはCPUに比べて歴史が浅いから?
全実行時間に対する各ルーチンの実行時間割合
性能プロファイル分析(続き)
twst_random:k方向に足し込み
CPU:水平面のloopを全て回す
:キャッシュが効かない
GPU:各スレッドがk方向にloopする
ptfit2:キャッシュの活用
IJに依存してkに依存しない変数の演算が大半
GPU:あるIJに対してkのloopを回転:変数の再利用
CPU:水平面のloopを全て回す
IJ = threadidx
DO K = KLEV, 1, -1
RL( IJ,K ) = RE( IJ,K ) + &
TE( IJ,K )*BB*RL( IJ,K+1 ) &
*TE( IJ,K )
end DO
DO K = KLEV, 1, -1
DO IJ = 1, IJDIM
RL( IJ,K ) = RE( IJ,K ) + &
TE( IJ,K )*BB*RL( IJ,K+1 ) &
*TE( IJ,K )
END DO
END DO
さらなる最適化
1スレッドで複数のデータ処理
力学などに比べて、参照するデータの種類が多い
吸収率etc.
各データのサイズはそれほど大きくない
(I, j)に依らない
テーブルから読み込んだデータを再利用できる
メモリからのロードが減る
命令レベルの並列性を確保できる
スレッド間のデータ並列性は少なくなるのでそれとの
トレードオフ
CUDA化
実行環境と条件
実況環境
GPU:NVIDIA C2070(東工大TSUBAME2.0搭載GPUのメ
モリ容量増強版)
CPU:FUJITSU SPARC64 VIIIfx(「京」搭載CPU)
実行条件
GPU, CPUに共通
格子点数:(i, j, k)=(128, 128, 94)/node
20time stepを計算
CPU
8スレッド自動並列
実行環境:K-1.2.0-09(2012/10/25)
コンパイルオプション: -V -Kfast,ilfunc,ocl,preex,array_private,auto,parallel,
optmsg=2 -Ksimd=2
GPU
PGI Fortranコンパイラ標準
実行
実行結果
経過時間
259.6[s]:CPU(FUJITSU SPARC64 VIIIfx)
55.4[s]:GPU(NVIDIA C2070)
実効性能
18.9GFLOPS:CPU (15%, 理論128GFLOPS)
88.6GFLOPS:GPU (17%, 理論515GFLOPS)
info.
GPUの経過時間にはCPU-GPU間データ転送時間を含まず
CPUは基本プロファイラ計測
GPUはタイマ挿入して計測
GPUの実効性能は経過時間からの比較で推定
CPUの4.7倍 CPUと同程度以上
結果
データ転送時間の影響
2.3倍でも十分速い
GPU搭載スパコン(東工大,
筑波大など)でのNICAMの高
速化へ
GPUはデータ転送と演算
を同時に処理できる
データ転送の影響を削減
分割して転送、演算を行う
CPU比較2.3倍→3.5倍に高速
化
領域をさらに細かく分割すれ
ばより高速に
分割に伴って発生する処理コ
ストとの兼ね合い
CPU GPU
1.8秒
1.0秒 2.8秒/1step
データ転送込みでは:
55.4秒/20step
→112秒/20step
CPU比較で2.3倍高速
1.8+2.8+1.0=5.6秒
0.9+0.9+1.4+0.5=3.7秒
結果
転送 演算 転送
CPU→GPU GPU GPU→CPU
領域を半分ずつ転送、演算すると
転送
転送
・力学過程
・他の物理過程
・放射過程
放射過程以外へのGPUの適用
放射過程へのGPUの適用を元に考察
力学過程:GPUで性能を出す条件に合う
有限体積法は見込み有り。スペクトル法は要検討
雲物理:詳細はコードをみる必要があるが、
性能が出る見込み有り
開発者・利用者との連携が必要
地表面:インデックス処理が苦手
全処理に対する割合が少ないので影響は少ない?
CPUに担当させるのも手
海洋過程:性能が出る見込みあり
海陸の違いをうまく取り扱うことが必要。CPU
でも必要な処理
考察
まとめと今後
放射過程をGPUに移植して高速化
CPU比較で4.7倍高速化、高い実行効率
高速化に成功したのは
本結果の応用
放射過程オフラインモデルとして利用
GPU搭載スパコンでのNICAM放射過程を高速化
放射過程以外での高速化も見込めると考えている
今後は
高速化の要因を詳細に切り分けて検討
放射過程を題材にGPUの特性を詳細に調べていく
力学過程・他の物理過程・海洋過程などへのGPUの適用
まとめ
GPU向きのコードを
GPUの構造を理解して
GPUに移植した→高速化へ
この考え方が基本
例外はある
基本を理解して、
放射過程を含む様々なケースで
調べていくことが今後必要
気象・気候モデルへのGPUの適用をさらに推し進めていく
→気象・気候学での成果創出、そして「京」次世代の超並列京算につながる成果へ
謝辞
放射カーネルは富田浩文チームリーダー、八代
尚研究員(共に理研AICS)にご提供頂きました。
放射過程については、関口美保准教授(東京海
洋大)に解説資料ご提供いただきました。

気候モデル放射カーネルのGPUへの移植と高速化