cpu/gpu を協調利用する ソフトウェア開発環境
DESCRIPTION
( 1 ). ( 2 ). ( 1 ). 滝沢 寛之. 佐藤 功人. 小林 広明. 2009 年 6 月 24 日 筑波大学 計算科学研究センター. CPU/GPU を協調利用する ソフトウェア開発環境. GPGPU 研究会. (1) 東北大学大学院情報科学研究科 (2) 東北大学サイバーサイエンスセンター. 描画処理用プロセッサ( GPU ). GPU を用いた汎用演算時代の到来. ・・・ 高いメモリバンド幅と浮動小数点演算性能. ピーク浮動小数点演算性能 [Gflop/s]. ピークメモリバンド幅 [GB/s]. 汎用データ並列処理を高速化. - PowerPoint PPT PresentationTRANSCRIPT
CPU/GPU を協調利用するソフトウェア開発環境
GPGPU 研究会
佐藤 功人( 1 ) 滝沢 寛之( 1 ) 小林 広明( 2 )
(1) 東北大学大学院情報科学研究科(2) 東北大学サイバーサイエンスセンター
2009 年 6 月 24 日筑波大学 計算科学研究センター
GPGPU講習会・研究会 22009/6/24
GPU を用いた汎用演算時代の到来描画処理用プロセッサ( GPU )
・・・ 高いメモリバンド幅と浮動小数点演算性能
汎用データ並列処理を高速化
ピーク浮動小数点演算性能 [Gflop/s] ピークメモリバンド幅 [GB/s]
GPGPU講習会・研究会 32009/6/24
GPU におけるプログラミング環境
CUDA ・・・ NVIDIA 社製 GPU 用プログラミング環境 GPU をコプロセッサとして利用 C 言語を拡張したプログラミング言語( C for CUDA ) GPU 内部の記憶領域や演算資源を柔軟に利用可能
CUDA によるソフトウェア開発 ハードウェアを意識したチューニングが必須 高い性能を達成するプログラム ・・・ GPU に深く依存
GPGPU講習会・研究会 42009/6/24
CUDA におけるソフトウェア開発の課題
CPU GPU
GeForce 8800 GTX
CPU GPU
GeForce GTX 280
program program
特定計算機構成に特化したプログラムの問題 同一のプログラムの性能可搬性が喪失 搭載する GPU ごとにチューニングが必要
理論性能
実効性能
高効率 低効率
理論性能
実効性能
CPU 写真出典 www.kakaku.com
GPGPU講習会・研究会 52009/6/24
CPU と GPU を搭載する複合型計算機
複合型計算機(ヘテロジニアス型)
複合型 ・・・ 異なる種類のプロセッサを搭載 高いピーク演算性能・電力あたりの演算性能 ソフトウェア開発の難易度増加
1.プロセッサごとに異なるプログラミング環境
2.計算機ごとに異なる最適な処理の割り当て
3.演算条件ごとに異なる最適なプロセッサ
効率的な利用にはプログラミング支援が必要
CPU
GPU
GPGPU講習会・研究会 62009/6/24
1. プロセッサごとに異なるプログラミング環境
GPU ・ CPU のソフトウェア開発環境の違い CPU ・・・ C, C++, FORTRAN 等 GPU ・・・ CUDA, Brook+, OpenCL
GPU ではベンダごとに開発環境が異なる NVIDIA = CUDA/PTX AMD/ATI = Brook+/CAL
・・・ ベンダを超えた標準化の動き( OpenCL )
GPGPU講習会・研究会 72009/6/24
2. 計算機ごとに異なる最適な処理の割り当て
CPU GPU
MainMemory
VideoMemory
PCIexpress
Max 25.6GB/s
2~4GB/s
Max 141.7GB/s
計算機ごとに異なる構成
高性能 CPU + 低性能 GPU 低性能 CPU + 高性能 GPU 性能比が不明な場合も・・・
データ転送オーバーヘッドの考慮 処理を担当するプロセッサの切り替え
・・・ メモリ間でのデータ転送が必要(低速) 性能差が小さい場合に特に重要
・・・ 常に GPU が高性能とは限らない
GPGPU講習会・研究会 82009/6/24
3. 演算条件ごとに異なる最適なプロセッサ
0
200
400
600
800
1000
1200
1400
0 512 1024 1536 2048行列サイズ [N]
実効
演算
性能
[M
flop/
s]
演算条件への依存性
CPU GPU
LU 分解の実効性能変化
演算対象データ量などに依存してCPU/GPU の優劣が変化
CPU Intel Core 2 QuadQ6600 2.66GHz 1core
GPU NVIDIA GeForce 8800GT
LU 分解における例
GPU の実行開始オーバーヘッドが大・・・ 中~大規模演算で優位
実行時まで演算規模が定まらない
GPGPU講習会・研究会 92009/6/24
複合型向けのプログラミング支援
処理の割り当て支援 ・・・ Runtime Library
1. 計算機ごとに異なる最適な処理の割り当て
3. 演算条件ごとに異なる最適なプロセッサ
抽象化されたプロセッサに処理を割り当て実際のプロセッサから最適なものを予測・選択
開発時実行時
統一的なプログラミング言語 + Compiler
2. プロセッサごとに異なるプログラミング環境
・・・ それぞれのプロセッサ用プログラムを自動生成
GPGPU講習会・研究会 102009/6/24
CPU GPU
ソフトウェア開発環境 SPRATStream Programming with Runtime Auto-Tuning
Compiler
プログラムの自動生成
RuntimeLibrary
プロセッサの自動選択
統一的なプログラミング言語 処理の自動割り当て
SPRATprogram
SPRAT Compiler
programfor CPU
( C++ )
programfor GPU
( CUDA )
Unified Executable Codewith SPRAT Runtime
実行時間予測機構最適プロセッサ予測機構
ExecutableCode
for CPU
ExecutableCode
for GPU
GPGPU講習会・研究会 112009/6/24
カーネル入力ストリーム 出力ストリーム
SPRAT 言語と Compiler
CPU GPU
SPRATprogram
SPRAT Compiler
programfor CPU
( C++ )
programfor GPU
( CUDA )
プロセッサに依存しないプログラミング言語
プロセッサごとのプログラミング言語を隠蔽 処理の割り当てを意識せずにプログラミング可能
ストリームプログラミングモデルの導入 ストリーム ・・・ 同じ処理を適用するデータ集合 カーネル ・・・ ストリーム要素に適用する処理を定義
GPGPU講習会・研究会 122009/6/24
SPRAT 言語による記述例
/ the main kernel of HIMENO Benchmark /kernel map jacobi( gather stream<float> p,
in stream<float> a0, in stream<float> a1, in stream<float> a2, in stream<float> a3, in stream<float> b0, in stream<float> b1, in stream<float> b2, in stream<float> c0, in stream<float> c1, in stream<float> c2, in stream<float> bnd, in stream<float> wrk1, out stream<float> wrk2, out stream<float> gosa)
{
float ss, s0;
s0 = + a0*p[+1][ 0][ 0] + a1*p[ 0][+1][ 0] + a2*p[ 0][ 0][+1]+ b0*( p[+1][+1][ 0] - p[+1][-1][ 0] - p[-1][+1][ 0] + p[-1][-1][ 0] )+ b1*( p[ 0][+1][+1] - p[ 0][-1][+1] - p[ 0][+1][-1] + p[ 0][-1][-1] )+ b2*( p[+1][ 0][+1] - p[-1][ 0][+1] - p[+1][ 0][-1] + p[-1][ 0][-1] )+ c0*p[-1][ 0][ 0] + c1*p[ 0][-1][ 0] + c2*p[ 0][ 0][-1] + wrk1;
ss = ( s0*a3 - p[0][0][0] )* bnd;gosa = ss*ss;wrk2 = p[0][0][0] + 0.8f *ss;
}
姫野ベンチマークにおける最内ループのカーネル関数化例
GPGPU講習会・研究会 132009/6/24
SPRAT 言語と自動最適化SPRAT 言語 ・・・ プロセッサに非依存
プロセッサ固有の最適化を記述できない GPU ではハードウェアを考慮した最適化が必要
CUDA 言語に対する自動最適化機構
SPRATprogram
C++program
(for CPU)
CUDAprogram
(for GPU)
SPRAT Compiler
CUDAOptimizer
再利用性のあるデータを高速メモリへ再配置 メモリアクセスの効率化
・・・ 効果の大きい最適化手法を自動適用
実効性能の向上GPU ごとの最適化の違いを吸収
GPGPU講習会・研究会 142009/6/24
SPRAT コンパイラによる自動最適化の位置付け
ハードウェアを意識しない最適化領域
アプリケーション固有の最適化領域
ハードウェアを意識した最適化領域
SPRAT 言語
CUDA 言語通常のソフトウェア開発
SPRAT のソフトウェア開発
CUDA 言語
CUDA 言語コンパイラによる自動最適化
演算方法の検討
・ 冗長演算の削減・ 乗算をシフト演算へ
メモリアクセスの最適化
・ 効率的なメモリアクセス・ 再利用性のあるデータを
高速なメモリに配置
アルゴリズムの検討
・ データ配置の検討・ 演算方法の変更
GPGPU講習会・研究会 152009/6/24
最適化 1:プリフェッチ最適化再利用性のあるデータを高速なメモリに配置
GPU における読み書き可能なメモリの特性
Global Memory
Shared Memory
記憶容量 遅延時間
大(~ 1GB )
小( 16KB )
長( 510 cycle )
短( 36 cycle )
SPRAT 言語の性質 再利用性の高いデータを
容易に抽出可能なように設計
再利用性の高いデータをShared Memory に配置
GlobalMemory
SharedMemory
i-2 i-1 i i+4 i+5i+1 i+2 i+3
i-2 i-1 i i+1 i+2 i+3 i+21 i+22 i+23i+20
i i+1 i+2i-1 i+3
GPGPU講習会・研究会 162009/6/24
姫野ベンチマークにおける自動最適化効果 演算サイズ:MIDDLE ( 256×128×128 )
0
5
10
15
20
25
30
35
SPRAT ベース実装 共有メモリへデータを配置共有メモリ + アライン調整
Sust
aine
d Pe
rform
ance
[Gflo
p/s] GeForce 8800 GTX
GeForce GTX 280自動最適化
SPRAT 言語レベルでの静的アライン調整
GPGPU講習会・研究会 172009/6/24
最適化2:統合メモリアクセス化非効率なメモリアクセスの効率化
バイトアドレス
N
16N(m-1) 16N(m) 16N(m+1)
Global Memory
Shared Memory
スレッド群
非アラインドメモリアクセス:低速
GPU ではデータアラインメントの影響が大きい GeForce 8800 series では実効メモリバンド幅に 10倍の差
アラインドメモリアクセス:高速
アラインされていないメモリアクセスを 2回に分割して効率化
GPGPU講習会・研究会 182009/6/24
LU 分解における自動最適化効果
0.0
0.5
1.0
1.5
2.0
2.5
3.0GeForce 8800GTXGeForce GTX280
実効
演算
性能
比
ーー
適用ー
ー適用
適用適用
統合メモリアクセス化
プリフェッチ最適化
1.160.95
2.04
1.29
2.74
0.82
GeForceGTX280
GeForce8800GTX
GPGPU講習会・研究会 192009/6/24
CPU 予測実行時間
GPU 予測実行時間
Runtime Library による実行時支援プロセッサの抽象化と自動選択 ストリーム処理プロセッサとして抽象化 実行時間履歴の記録と実行時間の予測
CPU GPU
StreamProcessor
Runtime System実行時間予測機構
最適プロセッサ予測機構
抽象
度
SPRAT から見える範囲
最適プロセッサ予測機構
×
×
重み付け係数
選択結果
実行時間履歴データベース
CPU 優先度
GPU優先度データ転送
時間×
データ転送オーバーヘッド
実行時間予測機構
データ転送時間予測機構
GPGPU講習会・研究会 202009/6/24
実行時間履歴の記録と実行時間予測
評価指標(例 データサイズ)
実行
時間
実測点
予測実行時間直線
評価指標(例 データサイズ)
実行
時間
予測実行時間直線
1. プロファイリング 2. 実行時間予測
自動プロファイリングと実行時間予測 各プロセッサで評価指標と実行時間の関係を記録 線形近似直線を引いて実行時間を予測 データ転送時間も同様の方法で予測
GPGPU講習会・研究会 212009/6/24
自動選択のポリシー実効性能指向で自動選択
予測実行時間をそのまま優先度として利用
消費エネルギ指向で自動選択 予測実行時間と消費電力を考慮した優先度 消費電力による重み付け
CP
U
GP
U
GPU
CPU
GPU で処理した場合のエネルギ
CPU で処理した場合のエネルギ
CPU 予測実行時間
GPU 予測実行時間
××
重み付け係数
実行時間予測機構
CPU 優先度GPU 優先度
予測実行時間 [s]
消費電力 [W=J/s]
GPGPU講習会・研究会 222009/6/24
最適なプロセッサの予測
CPU
GPU
データ転送オーバーヘッド
累積優先度
CPU
GPU
データ転送オーバーヘッドCPU
GPU GPU GPU
CPU CPU
GPU GPU GPU
CPU CPU CPU
カーネル実行1回での比較→ 切り替えが発生しない
カーネル実行 N回での比較→ 切り替えが発生する
プロセッサ間の優先度差 ≪ データ転送オーバーヘッド
累積優先度差
データ転送オーバーヘッドを考慮したプロセッサ選択 プログラムの周期性を想定 データ転送オーバーヘッド以上に優先度差が生じた場合に切り替え
GPGPU講習会・研究会 232009/6/24
プロセッサを切り替えるタイミング累積
実行
時間
差
プロセッサ切り替え
転送時間
CPU
GPU
カーネルの実行回数
累積
優先
度差
GP
U v
s C
PU
( GPU→CPU データ転送オーバーヘッド)
累積優先度差
カーネルの実行回数
切り替えまでのオーバーヘッド
累積消費
エネルギ
差
CPUGPU Switch
GPGPU講習会・研究会 242009/6/24
LU 分解による自動切り替え評価(1)
異なる構成の計算機で同じプログラムを実行 Core 2 Quad Q6600 + GeForce GTX 280 Core 2 Quad Q6600 + GeForce 8800 GTX Core 2 Quad Q6600 + GeForce 8800 GT
実効性能指向で自動切り替え 評価指標 ・・・ Gflop/s (実効演算性能)
比較対象 CPU only ・・・ CPU のみを利用 GPU only ・・・ GPU のみを利用 SPRAT ・・・ CPU/GPU を自動切り替え
GPGPU講習会・研究会 252009/6/24
実効演算指向の自動選択
CPU + GeForce GTX280 の場合
0100020003000400050006000700080009000
10000
0 256 512 768 1024 1280 1536 1792 2048Execution Size [N]
Perfo
rman
ce [M
FLOP
S]
CPU onlyGPU onlySPRAT
GPGPU講習会・研究会 262009/6/24
実効演算指向の自動選択
CPU + GeForce 8800GTX の場合
0200400600800
100012001400160018002000
0 256 512 768 1024 1280 1536 1792 2048Execution Size [N]
Perfo
rman
ce [M
FLOP
S]
CPU onlyGPU onlySPRAT
GPGPU講習会・研究会 272009/6/24
実効演算指向の自動選択
CPU + GeForce 8800GT の場合
0
200
400
600
800
1000
1200
1400
0 256 512 768 1024 1280 1536 1792 2048Execution Size [N]
Perfo
rman
ce [M
FLOP
S]
CPU onlyGPU onlySPRAT
GPGPU講習会・研究会 282009/6/24
LU 分解による自動切り替え評価(2)
異なる構成の計算機で同じプログラムを実行 Core 2 Quad Q6600 + GeForce GTX 280 Core 2 Quad Q6600 + GeForce 8800 GTX Core 2 Quad Q6600 + GeForce 8800 GT
消費エネルギ指向で自動切り替え 評価指標 ・・・ Gflop/s/W (単位電力あたりの実効演算性能)
比較対象 CPU only ・・・ CPU のみを利用 GPU only ・・・ GPU のみを利用 SPRAT ・・・ CPU/GPU を自動切り替え
GPGPU講習会・研究会 292009/6/24
消費エネルギ指向の自動選択
CPU + GeForce GTX280 の場合
0
5
10
15
20
25
30
35
0 256 512 768 1024 1280 1536 1792 2048Matrix Size [N]
Powe
r Effi
cienc
y [M
flop/
s/W
]
CPU onlyGPU onlySPRAT
GPGPU講習会・研究会 302009/6/24
消費エネルギ指向の自動選択
CPU + GeForce 8800GTX の場合
012345678
0 256 512 768 1024 1280 1536 1792 2048Matrix Size [N]
Powe
r Effi
cienc
y [M
flop/
s/W
]
CPU onlyGPU onlySPRAT
GPGPU講習会・研究会 312009/6/24
消費エネルギ指向の自動選択
CPU + GeForce 8800GT の場合
0123456789
0 256 512 768 1024 1280 1536 1792 2048Matrix Size [N]
Powe
r Effi
cienc
y [M
flop/
s/W
]
CPU onlyGPU onlySPRAT
GPGPU講習会・研究会 322009/6/24
まとめ複合型計算機におけるソフトウェア開発の困難
プロセッサごとに異なるプログラミング環境 計算機ごとに異なる最適な処理の割り当て 演算条件ごとに異なる最適なプロセッサ
・・・ 性能可搬性の低下・プログラミング難易度の上昇
SPRAT ( Stream Programming with Runtime Auto-Tuning ) プロセッサの抽象化と実行時自動プロセッサ選択機能 プロセッサに依存しないプログラミング言語
GPGPU講習会・研究会 332009/6/24
SPRAT を利用する効果
プログラムの移植性・再利用性の向上 計算機構成に依存せずに最適なプロセッサを利用可能 ハードウェア依存の最適化を自動適用
演算条件の動的な変化への対応 与えられた演算条件で最良のプロセッサを自動選択
プログラミング難易度の低下 処理の割り当てを考慮せずにプログラミング可能 特定のハードウェア構成を意識する必要が無い
GPGPU講習会・研究会 342009/6/24
SPRAT の今後
対応するプロセッサ構成の増加
現状 ・・・ CPU + NVIDIA 社製 GPU 将来 ・・・ AMD 社製 GPU, Cell B.E. 等
自動選択機能の精度向上
デバッグツール・ライブラリ群などの整備
ソフトウェア開発環境の整備・充実
実行時間予測の精度向上
GPGPU講習会・研究会 352009/6/24
ご静聴ありがとうございました