2013年11月30日 関西GPGPU勉強会#5
CUDA 6の話おのうえ(@_likr)
お前、誰よ
✤ おのうえ(@_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なし
CPU GPU
System!Memory
GPU!Memory
Unified Memoryあり
CPU GPU
Unified Memory
cudaMallocManaged
New Features in CUDA 6 Make GPU Acceleration Easier
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で確保されたメモリ領域はホストデバイス両方で使える
CPU CUDA Unified Memory
どううれしいのか
✤ データをポインタで持つようなデータ構造の 明示的なデータ転送が不要になる
key
data
next
key
data
next
key
data
next
key
data
next
Linked List
struct dataElem { int porp1; int prop2; char *text; };
prop1
prop2
*text “We love YAMADA.”
System Memory
GPU Memory 従来は2回の明示的な転送が必要
ネストしたデータ
まだわからない部分?
✤ パフォーマンス!
✤ データの疎密さの影響!
✤ 最適化!
✤ メモリ転送制御(prefetchとか)!
✤ マルチGPU
おまけ:Unified Virtual Addressing
✤ UVA、統合仮想アドレス空間!
✤ CUDA 4.0で導入!
✤ ホスト・デバイスのメモリを全部同じ空間で扱う!!
✤ Unified Memoryとは別物!
UVAのイメージ
CPU GPU0 GPU1
PCI-e
System!Memory
GPU0!Memory
GPU1!Memory
0x0000
0xFFFF
0x0000
0xFFFF 0xFFFF
0x0000
UVAなし
CPU GPU0 GPU1
PCI-e
System!Memory
GPU0!Memory
GPU1!Memory
0x0000
0xFFFF
UVAあり
UVAで変わったこと
✤ メモリ転送命令の簡素化
cudaMemcpy(dst, src, count, kind)
HostBuf1 DeviceBuf1
DeviceBuf1HostBuf2
cudaMemcpyDeviceToHost
cudaMemcpyHostToDevice
cudaMemcpyHostToHost cudaMemcpyDeviceToDevice
HostBuf1 DeviceBuf1
DeviceBuf1HostBuf2
cudaMemcpyDefault
cudaMemcpyDefault
cudaMemcpyDefault cudaMemcpyDefault
UVAなし UVAあり
ついでに
✤ Mapped Memory!
✤ GPUからアクセス可能なCPU上のメモリ!
✤ Unified Virtual Addressing!
✤ 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、…
env LD_PRELOAD=libnvblas.so myapp
gcc myapp.c -lnvblas -lmkl_rt -o myappor
GPUDirect RDMA in MPI
GPUDirect
✤ GPU間の高速データ転送!
✤ GPUDirect v1.0!
✤ Infinibandで接続されたノード間のGPUメモリ転送!
✤ GPUDirect v2.0!
✤ ノード内の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速報がいくつか掲載