Upload
nvidia-japan
View
3.919
Download
2
Embed Size (px)
Citation preview
Akira Naruse, Senior Developer Technology Engineer
GPUコンピューティング最新情報~ MaxwellアーキテクチャとCUDA 7.5 ~
GPUロードマップ (アーキテクチャ)電力あたり性能
2012 20142008 2010 2016
Tesla FermiKepler
Maxwell
PascalMixed Precision3D MemoryNVLink
Pascal: 次世代GPUMixed Precision 3D Memory
NVLinkUnified Memory
FP16, FP32, FP64
大容量(16GB)、高バンド幅(~1 TB/s)
高バンド幅(80 GB/s)
POWER CPUとの接続、GPU間の接続 統合された単一のメモリ空間
Maxwell: 最新世代GPU
Pascalのベースとなるアーキテクチャ
Pascal ≒ Maxwell + Mixed Precision + 3D Memory + NVLINK
ストリーム・マルチプロセッサ、KeplerからMaxwellで一新
Kepler
(cc30)
Kepler
(cc35)
Maxwell
(cc52)
Pascal
FP16 〇
FP32 (単精度) 〇 〇 〇 〇
FP64 (倍精度) 〇 〇
SMM: Maxwell ストリーム・マルチプロセッサ
Kepler
(SMX)
Maxwell
(SMM)
SMM: Maxwell ストリーム・マルチプロセッサ
より効率重視のアーキテクチャ
Kepler(SMX)との違い
命令スケジューリングの改善 (128 CUDA core, 4モジュール構成)
命令latencyの短縮
最大スレッドブロック数増
共有メモリサイズ増
共有メモリAtomicsの高速化
データパスの変更
Kepler(SMX) Maxwell(SMM)
CONTROL CONTROL
CONTROL
CONTROL
CONTROL
192 cores
32 32
32 32
スペック比較
Kepler
Tesla K40
Maxwell
Quadro M6000
CUDAコア 2,880 3,072
SM数 15 24
最大スレッドブロック数(/SM) 16 32
共有メモリ(/SM) 48 KB 96 KB
L2サイズ 1.5 MB 3 MB
TFLOPS(単精度) 4.3 6.1
メモリ帯域 288 GB/s 317 GB/s
TDP 235 W 250 W
共有メモリAtomicsの高速化
Kepler: グローバルメモリのAtomicsを高速化
Maxwell: 更に、共有メモリのAtomicsを高速化32-bit integer operation
32/64-bit compare-and-swap(CAS)
事例: ヒストグラム画像: Full HD(1920x1080), 8-bit(256 BIN), 1チャネル
1-phaseアルゴリズム
1) グローバル
2) 共有メモリ+グローバル
3) 共有メモリ (バンク競合無し)+グローバル
共有メモリAtomicsの効果 (ヒストグラム)
10
100
1,000
10,000
0% 25% 50% 75% 100% 0% 25% 50% 75% 100%
Kepler(Tesla K40)
Maxwell(Quadro M6000)
1) グローバル
2) 共有メモリ+グローバル
3) 共有メモリ(バンク競合無し)
+ グローバル
画素値の偏り
実行時間
(use
c)
データパスの変更
L2
Smem
L1Tex(RO)
CUDA cores
Kepler(SMX) Maxwell(SMM)
L2
SmemUnified
L1 and Tex
CUDA coresL1とTexを統合、
Smemを分離
CUDAロードマップ
20152014
CUDA 6.0 (2014/4)
• Maxwell
• Unified Memory
• XT Libraries
• GPUDirect RDMA
CUDA 6.5 (2014/8)
• ARM64
• cuFFT Callbacks
• CUDA Fortran Debug
CUDA 7.0 (2015/3)
• POWER8
• C++11
• Thrust 1.8
• cuSOLVER
• Runtime Compilation
• Multi-GPU MPS
CUDA 7.5 (2015/9)
Fp16ストレージ
GPUメモリ上に最大2倍のデータセット
Deep Learningに最適
cuSPARSE
密行列 x 疎ベクトル
自然言語処理を加速
命令レベル・プロファイリング
性能ボトルネックをピンポイントで特定
FP16ストレージ
FP32と比べて, 2倍のデータをGPUメモリに搭載可能, メモリバンド幅要求が半分
cuda_fp16.h
FP16データ型: half, half2
IEEE 754
範囲: 6*10-8 ~ 6*104
FP16/FP32変換: half2float(), float2half()
cublasSgemmEx()FP16対応の行列積 (演算はFP32)
符号部(1 bit)
指数部(5 bit)
仮数部(10 bit)
FP16ストレージの効果
事例: 画像フィルター (5x5コンボリューション)画像データ型にFP16を使用
データのロード・ストアのときにFP16/FP32変換
畳み込み演算はFP32を使用
GFLOPS実効メモリバンド(GB/s)
FP32 1,180 204 (64%)
FP16 1,716 164 (51%)1.45x
メモリバンド幅ネック
Quadro M6000
FP16計算 (Tegra X1 only)
halfとhalf2の基本的な演算
cublasHgemm() … FP16の行列積
(math.hはまだフルサポートではない: sin, log等)
cuSPARSE: 密行列 x 疎ベクトル
自然言語処理向け
cusparse<T>gemvi()
y = α ∗ op(A)∗x + β∗y
-
2
-
-
1
y1
y2
y3
α + βy1
y2
y3
A11
A21
A31
A12
A22
A32
A13
A23
A33
A14
A24
A34
A15
A25
A35
密行列密ベクトル 疎ベクトル
(例) テキスト内の単語の出現頻度
カーネルレベル・プロファイリング (Keplerまで)
ボトルネックが実行遅延の場合、カーネル単位で、遅延の主要因は分かったが(データ待ち, 命令発行, 実行依存, …)、
具体的に、プログラムのどこで遅延が発生しているのか特定が難しかった
命令レベル・プロファイリング (GM200以降)
命令レベルで遅延発生箇所を特定可能
性能改善作業の効率UP
対応CUDAコード
SASSコード
ホットスポットと遅延要因分析
CUDA 7.5: その他の新機能・改善項目
Windows: Remote Desktop, TCC(TITAN)
Priority Stream: 全てのGPUで利用可能
Lop3: 任意の3入力論理演算 (ptxレベル)
CPUプロファイリング(β): nvprof –cpu-profiling on
Nsight Eclipse Edition: Power8対応
まとめ
Maxwell
SMM: より効率重視のアーキテクチャ
高速な共有メモリAtomics
CUDA 7.5
FP16ストレージ
cuSPARSE: 密行列 x 疎ベクトル
命令レベルプロファイリング
Thank you