cpu/gpu を協調利用する ソフトウェア開発環境

35
CPU/GPU ををををををを をををををををををを GPGPU ををを をを をを 1 をを をを 1 をを をを 2 をををををををををををををを (1) ををををををををををををををををを (2) 2009 を 6 を 24 を をををを をををををををををを

Upload: stian

Post on 23-Feb-2016

104 views

Category:

Documents


0 download

DESCRIPTION

( 1 ). ( 2 ). ( 1 ). 滝沢 寛之. 佐藤 功人. 小林 広明. 2009 年 6 月 24 日 筑波大学 計算科学研究センター. CPU/GPU を協調利用する ソフトウェア開発環境. GPGPU 研究会. (1) 東北大学大学院情報科学研究科 (2) 東北大学サイバーサイエンスセンター. 描画処理用プロセッサ( GPU ). GPU を用いた汎用演算時代の到来. ・・・ 高いメモリバンド幅と浮動小数点演算性能. ピーク浮動小数点演算性能 [Gflop/s]. ピークメモリバンド幅 [GB/s]. 汎用データ並列処理を高速化. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CPU/GPU を協調利用する ソフトウェア開発環境

CPU/GPU を協調利用するソフトウェア開発環境

GPGPU 研究会

佐藤 功人( 1 ) 滝沢 寛之( 1 ) 小林 広明( 2 )

(1) 東北大学大学院情報科学研究科(2) 東北大学サイバーサイエンスセンター

2009 年 6 月 24 日筑波大学 計算科学研究センター

Page 2: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 22009/6/24

GPU を用いた汎用演算時代の到来描画処理用プロセッサ( GPU )

・・・ 高いメモリバンド幅と浮動小数点演算性能

汎用データ並列処理を高速化

ピーク浮動小数点演算性能 [Gflop/s] ピークメモリバンド幅 [GB/s]

Page 3: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 32009/6/24

GPU におけるプログラミング環境

CUDA ・・・ NVIDIA 社製 GPU 用プログラミング環境 GPU をコプロセッサとして利用 C 言語を拡張したプログラミング言語( C for CUDA ) GPU 内部の記憶領域や演算資源を柔軟に利用可能

CUDA によるソフトウェア開発 ハードウェアを意識したチューニングが必須 高い性能を達成するプログラム ・・・ GPU に深く依存

Page 4: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 42009/6/24

CUDA におけるソフトウェア開発の課題

CPU GPU

GeForce 8800 GTX

CPU GPU

GeForce GTX 280

program program

特定計算機構成に特化したプログラムの問題 同一のプログラムの性能可搬性が喪失 搭載する GPU ごとにチューニングが必要

理論性能

実効性能

高効率 低効率

理論性能

実効性能

CPU 写真出典 www.kakaku.com

Page 5: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 52009/6/24

CPU と GPU を搭載する複合型計算機

複合型計算機(ヘテロジニアス型)

複合型 ・・・ 異なる種類のプロセッサを搭載 高いピーク演算性能・電力あたりの演算性能 ソフトウェア開発の難易度増加

1.プロセッサごとに異なるプログラミング環境

2.計算機ごとに異なる最適な処理の割り当て

3.演算条件ごとに異なる最適なプロセッサ

効率的な利用にはプログラミング支援が必要

CPU

GPU

Page 6: 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 )

Page 7: CPU/GPU を協調利用する ソフトウェア開発環境

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 が高性能とは限らない

Page 8: CPU/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 の実行開始オーバーヘッドが大・・・ 中~大規模演算で優位

実行時まで演算規模が定まらない

Page 9: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 92009/6/24

複合型向けのプログラミング支援

処理の割り当て支援 ・・・ Runtime Library

1. 計算機ごとに異なる最適な処理の割り当て

3. 演算条件ごとに異なる最適なプロセッサ

抽象化されたプロセッサに処理を割り当て実際のプロセッサから最適なものを予測・選択

開発時実行時

統一的なプログラミング言語 + Compiler

2. プロセッサごとに異なるプログラミング環境

・・・ それぞれのプロセッサ用プログラムを自動生成

Page 10: CPU/GPU を協調利用する ソフトウェア開発環境

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

Page 11: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 112009/6/24

カーネル入力ストリーム 出力ストリーム

SPRAT 言語と Compiler

CPU GPU

SPRATprogram

SPRAT Compiler

programfor CPU

( C++ )

programfor GPU

( CUDA )

プロセッサに依存しないプログラミング言語

プロセッサごとのプログラミング言語を隠蔽 処理の割り当てを意識せずにプログラミング可能

ストリームプログラミングモデルの導入 ストリーム ・・・ 同じ処理を適用するデータ集合 カーネル ・・・ ストリーム要素に適用する処理を定義

Page 12: CPU/GPU を協調利用する ソフトウェア開発環境

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;

}

姫野ベンチマークにおける最内ループのカーネル関数化例

Page 13: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 132009/6/24

SPRAT 言語と自動最適化SPRAT 言語 ・・・ プロセッサに非依存

プロセッサ固有の最適化を記述できない GPU ではハードウェアを考慮した最適化が必要

CUDA 言語に対する自動最適化機構

SPRATprogram

C++program

(for CPU)

CUDAprogram

(for GPU)

SPRAT Compiler

CUDAOptimizer

再利用性のあるデータを高速メモリへ再配置 メモリアクセスの効率化

・・・ 効果の大きい最適化手法を自動適用

実効性能の向上GPU ごとの最適化の違いを吸収

Page 14: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 142009/6/24

SPRAT コンパイラによる自動最適化の位置付け

ハードウェアを意識しない最適化領域

アプリケーション固有の最適化領域

ハードウェアを意識した最適化領域

SPRAT 言語

CUDA 言語通常のソフトウェア開発

SPRAT のソフトウェア開発

CUDA 言語

CUDA 言語コンパイラによる自動最適化

演算方法の検討

・ 冗長演算の削減・ 乗算をシフト演算へ

メモリアクセスの最適化

・ 効率的なメモリアクセス・ 再利用性のあるデータを

高速なメモリに配置

アルゴリズムの検討

・ データ配置の検討・ 演算方法の変更

Page 15: CPU/GPU を協調利用する ソフトウェア開発環境

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

Page 16: CPU/GPU を協調利用する ソフトウェア開発環境

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 言語レベルでの静的アライン調整

Page 17: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 172009/6/24

最適化2:統合メモリアクセス化非効率なメモリアクセスの効率化

バイトアドレス

N

16N(m-1) 16N(m) 16N(m+1)

Global Memory

Shared Memory

スレッド群

非アラインドメモリアクセス:低速

GPU ではデータアラインメントの影響が大きい GeForce 8800 series では実効メモリバンド幅に 10倍の差

アラインドメモリアクセス:高速

アラインされていないメモリアクセスを 2回に分割して効率化

Page 18: CPU/GPU を協調利用する ソフトウェア開発環境

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

Page 19: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 192009/6/24

CPU 予測実行時間

GPU 予測実行時間

Runtime Library による実行時支援プロセッサの抽象化と自動選択 ストリーム処理プロセッサとして抽象化 実行時間履歴の記録と実行時間の予測

CPU GPU

StreamProcessor

Runtime System実行時間予測機構

最適プロセッサ予測機構

抽象

SPRAT から見える範囲

最適プロセッサ予測機構

×

×

重み付け係数

選択結果

実行時間履歴データベース

CPU 優先度

GPU優先度データ転送

時間×

データ転送オーバーヘッド

実行時間予測機構

データ転送時間予測機構

Page 20: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 202009/6/24

実行時間履歴の記録と実行時間予測

評価指標(例 データサイズ)

実行

時間

実測点

予測実行時間直線

評価指標(例 データサイズ)

実行

時間

予測実行時間直線

1. プロファイリング 2. 実行時間予測

自動プロファイリングと実行時間予測 各プロセッサで評価指標と実行時間の関係を記録 線形近似直線を引いて実行時間を予測 データ転送時間も同様の方法で予測

Page 21: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 212009/6/24

自動選択のポリシー実効性能指向で自動選択

予測実行時間をそのまま優先度として利用

消費エネルギ指向で自動選択 予測実行時間と消費電力を考慮した優先度 消費電力による重み付け

CP

U

GP

U

GPU

CPU

GPU で処理した場合のエネルギ

CPU で処理した場合のエネルギ

CPU 予測実行時間

GPU 予測実行時間

××

重み付け係数

実行時間予測機構

CPU 優先度GPU 優先度

予測実行時間 [s]

消費電力 [W=J/s]

Page 22: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 222009/6/24

最適なプロセッサの予測

CPU

GPU

データ転送オーバーヘッド

累積優先度

CPU

GPU

データ転送オーバーヘッドCPU

GPU GPU GPU

CPU CPU

GPU GPU GPU

CPU CPU CPU

カーネル実行1回での比較→ 切り替えが発生しない

カーネル実行 N回での比較→ 切り替えが発生する

プロセッサ間の優先度差 ≪ データ転送オーバーヘッド

累積優先度差

データ転送オーバーヘッドを考慮したプロセッサ選択 プログラムの周期性を想定 データ転送オーバーヘッド以上に優先度差が生じた場合に切り替え

Page 23: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 232009/6/24

プロセッサを切り替えるタイミング累積

実行

時間

プロセッサ切り替え

転送時間

CPU

GPU

カーネルの実行回数

累積

優先

度差

GP

U v

s C

PU

( GPU→CPU データ転送オーバーヘッド)

累積優先度差

カーネルの実行回数

切り替えまでのオーバーヘッド

累積消費

エネルギ

CPUGPU Switch

Page 24: CPU/GPU を協調利用する ソフトウェア開発環境

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 を自動切り替え

Page 25: 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

Page 26: CPU/GPU を協調利用する ソフトウェア開発環境

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

Page 27: CPU/GPU を協調利用する ソフトウェア開発環境

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

Page 28: CPU/GPU を協調利用する ソフトウェア開発環境

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 を自動切り替え

Page 29: 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

Page 30: CPU/GPU を協調利用する ソフトウェア開発環境

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

Page 31: CPU/GPU を協調利用する ソフトウェア開発環境

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

Page 32: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 322009/6/24

まとめ複合型計算機におけるソフトウェア開発の困難

プロセッサごとに異なるプログラミング環境 計算機ごとに異なる最適な処理の割り当て 演算条件ごとに異なる最適なプロセッサ

・・・ 性能可搬性の低下・プログラミング難易度の上昇

SPRAT ( Stream Programming with Runtime Auto-Tuning ) プロセッサの抽象化と実行時自動プロセッサ選択機能 プロセッサに依存しないプログラミング言語

Page 33: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 332009/6/24

SPRAT を利用する効果

プログラムの移植性・再利用性の向上 計算機構成に依存せずに最適なプロセッサを利用可能 ハードウェア依存の最適化を自動適用

演算条件の動的な変化への対応 与えられた演算条件で最良のプロセッサを自動選択

プログラミング難易度の低下 処理の割り当てを考慮せずにプログラミング可能 特定のハードウェア構成を意識する必要が無い

Page 34: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 342009/6/24

SPRAT の今後

対応するプロセッサ構成の増加

現状 ・・・ CPU + NVIDIA 社製 GPU 将来 ・・・ AMD 社製 GPU, Cell B.E. 等

自動選択機能の精度向上

デバッグツール・ライブラリ群などの整備

ソフトウェア開発環境の整備・充実

実行時間予測の精度向上

Page 35: CPU/GPU を協調利用する ソフトウェア開発環境

GPGPU講習会・研究会 352009/6/24

ご静聴ありがとうございました