SlideShare a Scribd company logo
CUDA 6の話
おのうえ(@_likr)
2013年11月30日 関西GPGPU勉強会#5
お前、誰よ

✤

おのうえ(@_likr)!

✤

関西GPGPU勉強会主宰
今日のおはなし
✤

SC13のCUDA6に関する発表を要約しようとする!
✤

“New Features in CUDA 6 Make GPU Acceleration Easier”!

✤

“Unified Memory in CUDA 6.0”!

✤

性能向上の数値・グラフなどは上の発表資料を見てください!

✤

上記の発表ぐらいしか一次情報がないので、

解釈などに誤りがあったらごめんなさい
CUDA 6の目玉

✤

Unified Memory!

✤

XT and Drop-in Libraries!

✤

GPUDirect RDMA in MPI!

✤

Developer Tools
Unified Memory
Unified Memory

✤

明示的なメモリ転送が不要に!

✤

複雑なデータ構造の扱いが容易に!

✤

メモリ転送パフォーマンスが良くなる(かも)
Unified Memoryのイメージ
Unified Memoryなし
System!
Memory

GPU!
Memory

CPU

GPU

Unified Memoryあり
Unified Memory

CPU

GPU
cudaMallocManaged
CPU

CUDA Unified Memory

void sortfile(FILE *fp, int N) {
char *data;
data = (char *)malloc(N);

!
!
!
!
}

fread(data, 1, N, fp);
qsort(data, N, 1, compare);
use_data(data);
free(data);

void sortfile(FILE *fp, int N) {
char *data;
cudaMallocManaged(&data, N);

!
!
!
!
}

fread(data, 1, N, fp);
qsort<<<…>>>(data, N, 1, compare);
cudaDeviceSynchronize();
use_data(data);
cudaFree(data);

cudaMallocManagedで確保されたメモリ領域はホストデバイス両方で使える
New Features in CUDA 6 Make GPU Acceleration Easier
どううれしいのか
✤

データをポインタで持つようなデータ構造の

明示的なデータ転送が不要になる
ネストしたデータ
prop1

System Memory

prop2
*text

“We love YAMADA.”

GPU Memory

struct dataElem {
int porp1;
int prop2;
char *text;
};

従来は2回の明示的な転送が必要
Linked List

key

key

key

key

data

data

data

data

next

next

next

next
まだわからない部分?
✤

パフォーマンス!
✤

✤

最適化!
✤

✤

データの疎密さの影響!

メモリ転送制御(prefetchとか)!

マルチGPU
おまけ:Unified Virtual Addressing
✤

UVA、統合仮想アドレス空間!

✤

CUDA 4.0で導入!

✤

ホスト・デバイスのメモリを全部同じ空間で扱う!!

✤

Unified Memoryとは別物!
UVAのイメージ
UVAなし

UVAあり

System! GPU0!
GPU1!
Memory Memory Memory

System! GPU0!
GPU1!
Memory Memory Memory

0x0000

0x0000

0x0000

0xFFFF

0xFFFF

0xFFFF

CPU

GPU0

GPU1

PCI-e

0x0000
0xFFFF

CPU

GPU0

GPU1

PCI-e
UVAで変わったこと
✤

メモリ転送命令の簡素化
cudaMemcpy(dst, src, count, kind)
UVAなし

UVAあり

cudaMemcpyHostToDevice

HostBuf1

cudaMemcpyDefault

DeviceBuf1

HostBuf1

cudaMemcpyDeviceToHost
cudaMemcpyHostToHost

HostBuf2

DeviceBuf1
cudaMemcpyDefault

cudaMemcpyDeviceToDevice

DeviceBuf1

cudaMemcpyDefault

HostBuf2

cudaMemcpyDefault

DeviceBuf1
ついでに
✤

Mapped Memory!
✤

✤

Unified Virtual Addressing!
✤

✤

GPUからアクセス可能なCPU上のメモリ!

CPUのメモリ空間とGPUのメモリ空間の統一!

Unified Memory!
✤

CPUとGPUとで2重に確保して同期を自動的に行うメモリ
トータル・ディスクロージャー・サイト - CUDA 6速報(1): Unified Memory!

http://topsecret.hpc.co.jp/wiki/index.php/CUDA_6%E9%80%9F%E5%A0%B1(1):_Unified_Memory
XT and Drop-in Libraries
Extended Library Interfaces

✤

cuFFTとcuBLAS level 3がすごくなった!
✤

マルチGPUスケーリング!

✤

Out-of-core!

✤

BLAS互換インターフェース(cuBLAS level 3)
Drop-in NVBLAS
✤

既存のBLASライブラリを置き換えるだけで

コンパイルし直さなくてもGPU実行が可能に!
✤

R、Octave、Scilab、…
gcc myapp.c -lnvblas -lmkl_rt -o myapp
or
env LD_PRELOAD=libnvblas.so myapp
GPUDirect RDMA in MPI
GPUDirect
✤

GPU間の高速データ転送!

✤

GPUDirect v1.0!
✤

✤

GPUDirect v2.0!
✤

✤

Infinibandで接続されたノード間のGPUメモリ転送!

ノード内のGPU間のメモリ転送!

CUDA 6でMPI時の更なるレイテンシ削減
Developer Tools
Eclipse版Nsightの改善

✤

リモート開発(ビルド、実行、デバッグ、プロファイル)!

✤

MPIのプロファイル!

✤

ホットスポット分析(Visual Profilerも)
まとめ
まとめ
✤

CUDA6の特徴(?)!
✤

✤

マルチデバイス・マルチノード対応の強化!

✤

✤

GPGPU環境へのオフロードをより簡単、便利に!

低レベルでのレイテンシ削減!

CUDA 6は2014年始めにリリース
参考情報
✤

GPU TECHNOLOGY THEATER AT SC13!
✤

✤

✤

http://www.nvidia.com/object/sc13-technology-theater.html!
SC13の資料・動画がみれる!

トータル・ディスクロージャ・サイト!
✤

http://topsecret.hpc.co.jp/wiki/index.php!

✤

CUDA 6速報がいくつか掲載

More Related Content

CUDA 6の話@関西GPGPU勉強会#5