CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions ›...

26
GTC 2013 チュートリアル エヌビディアジャパン CUDAエンジニア 森野慎也 CUDA TIPS and FAQ

Transcript of CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions ›...

Page 1: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

GTC 2013 チュートリアル エヌビディアジャパン CUDAエンジニア 森野慎也

CUDA TIPS and FAQ

Page 2: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

CUDA TIPS and FAQ

NVIDIA Japanでは、開発者のみなさんへの支援を

行っています。その中で…

よくいただく質問

「へー」と言ってもらえたこと

など、まとめて、お話しします。

Page 3: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 1: Compute Capability

GPUのCompute Capabilityを知りたいのですが。

— お答え:

CUDA GPUs ページにアクセスしてください!

— https://developer.nvidia.com/cuda-gpus

Page 4: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 1: Compute Capability

GPUの確認方法

Page 5: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 2: 開発・デバッグ環境

開発環境は、何を使えばよいのですか?

Windows

— Windows XP以降で動作

— Visual Studio 2008, 2010, 2012

MacOS X

— 10.7.5+、10.8.x(64 bit)

— Compiler : gcc or clang*

*いくつかの機能はサポートされていません

Page 6: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 2: 開発・デバッグ環境

サポートされている Linux

Distribution Version 32 bit 64 bit

Fedora 18 X

RedHat Enterprise 5.5+, 6.x X

OpenSUSE 12.2 X

SUSE SLES 11 SP1, SP2 X

Ubuntu 12.10, 12.04, 10.04 X X

Ubuntu (ARMv7) 12.04 X X

Page 7: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 2: 開発・デバッグ環境

Nsight Visual Studio Edition

— CUDA Toolkitに含まれます。(CUDA 5.5より)

— Windows Vista以降

GPUカーネルのデバッグができます!

— Datatip 、Breakpoint(条件指定可能)、

assert()、デバイスメモリのダンプ

— Visual Studio IDEに、統合

Page 8: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 2: 開発・デバッグ環境

VS2010

Page 9: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 3: ホストコンパイラのオプション

質問 *.cuに書いた、CPUコードが遅いのです。 nvccの生成するコードが、遅いのでは?

— お答え nvccでは、ホストコードは、各プラットフォームのコンパイラで コンパイルされます。

— ホストコード用のコンパイルオプションを、指定してください。

Page 10: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 3: ホストコンパイラのオプション

nvcc

— CUDA用のコンパイラ

内部で

ホストコンパイラを使用

— デフォルトでC++

ホストコンパイラの

オプションも指定します。

ソース

ホスト/GPU ソース分割

ホスト

コンパイラ

カーネル

コンパイラ

マージ

オブジェクト

Page 11: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 3: ホストコンパイラのオプション

NVCCオプション

— -Xcompiler

ホストコンパイラ向けのオプション

— -ccbin

ホストコンパイラのパス指定

— -gencode

Compute Capability (GPUバージョン)の指定_35,sm_35

— -G

デバッグ情報生成

— -Xptxas

最適化に必要な情報を得るために指定

PTX(GPUアセンブラ)のオプション 11

Page 12: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 3: ホストコンパイラのオプション

.SUFFIXES: .cpp .h .cu .o

DEBUG=0

CXXFLAGS=-Wall -g

NVCCFLAGS=-gencode arch=compute_30,code=sm_30 -Xptxas -v

(略)

all: …

.cu.o: $<

nvcc $(NVCCFLAGS) –Xcompiler “$(CXXFLAGS)” $< -o $@

.cpp.o: $<

g++ -c $(CXXFLAGS) $< -o $@

Page 13: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 3: ホストコンパイラのオプション

Windowsの場合

Page 14: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: 並列化

質問

CUDAでは、非常に多くのスレッドを使いますが、

スレッド数を増やすよりは、ループで書けませんか?

— お答え

通常、性能が出ないので、お勧めしません。

CUDAでは、多くのスレッドを動作させることで、性能が出ます。

— メモリコピーのコードで、説明します。

Page 15: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: 並列化(Coalesced Access)

CUDAに適した並列化 (Coalesced Access)

int *dSrc 0 1 2 3 4 5 6 7 8

int *dDst

CUDA core

Page 16: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: 並列化(Coalesced Access)

__global__

void coalescedMemcpyKernel(int *dDst, const int *dSrc, size_t size) {

/* Global IDを算出 */

int globalID = blockDim.x * blockIdx.x + threadIdx.x;

if (globalID < size) { /* 自スレッド担当の要素のみ、処理 */

dDst[globalID] = dSrc[globalID];

}

}

Page 17: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Thread 2 Thread 1 Thread 0

Topic 4: ループによる実装

スレッドでループ

— 1スレッドで、4回ループする場合

int *dSrc 0 1 2 3 4 5 6 7 8

int *dDst

Threads

Page 18: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: 並列化(loop)

__global__

void loopMemcpyKernel(int *dDst, const int *dSrc,

size_t size, size_t loopCount) { /* Global IDを算出 */

int globalID = blockDim.x * blockIdx.x + threadIdx.x;

unsigned int begin = gid * loopCount;

unsigned int end = min((gid + 1) * loopCount, size);

for (unsigned int index = begin; index < end; ++index) {

dDst[index] = dSrc[index];

}

}

Page 19: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: ベンチマーク結果

Tesla K20c ECC off

0

50

100

150

200

1 8 64 512 4096

バンド幅

(G

B/s

ec)

スレッドあたりのループ回数

ループによるコピー

Spec : 208 GB/sec

Coalesced Access : 146 GB/sec

Page 20: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Cache

Topic 4: 並列化

ループは、なぜ遅い?

— メモリアクセスが、歯抜けになっている!

Threads …

Thread 2 Thread 1 Thread 0

0 1 2 3 4 5 6 7 8 …

DRAM …

Page 21: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: 並列化

スレッド(Warp)数が足りないと、性能が出ません。

スレッド(Warp)が

多数、実行されている。

スレッド(Warp)の

実行数がすくない。

Warp X

Warp A

Warp B

Warp C

Warp …

Warp …

Warp X

Warp A

Warp B

ca. 1

1 c

lock (K

eple

r)

ca. 2

2 c

lock (F

erm

i)

Stall

Warp A

Stall

Stall

Stall

Stall

Stall

Warp A

Stall

Page 22: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: 並列化

メモリアクセスにも、スレッド(Warp)の数が必要です。

Warp X

Warp A

Warp B

Warp C

Warp …

Warp …

Warp X

Warp A

Warp B

スレッド(Warp)が

多数、実行されている。

メモリアクセス

要求が多い

バンド幅 大

スレッド(Warp)の

実行数がすくない。

Stall

Warp A

Stall

Stall

Stall

Stall

Stall

Warp A

Stall

メモリアクセス

要求が少ない

バンド幅 小

Page 23: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 4: ベンチマーク(Thread数)

Tesla K20c (ECC off)

0

50

100

150

200

0 20 40 60

バンド幅

(G

B/se

c)

SMXあたりのWarp数

Spec : 208 GB/sec

Coalesced Access : 146 GB/sec

Page 24: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Topic 5: 開発者登録

NVIDIA Registered Developer program

— https://developer.nvidia.com/registered-developer-programs

誰でも登録できます。

— 企業の方、学生の方、皆さんOKです。

— 無償です。

メリット

— プレリリース版のダウンロード

— バグレポート

Page 25: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

NVIDIA Japan CUDA Monthly Seminar

NVIDIA Japanでは、毎月、

CUDA関連の無償セミナーを実施しています。

— 申し込み :

http://www.nvidia.co.jp/object/event-calendar-jp.html

— 場所 : NVIDIA Japan 赤坂オフィス

— 定員 : 20名

Page 26: CUDA TIPS and FAQ - NVIDIAon-demand.gputechconf.com › gtc › 2013 › jp › sessions › 8004.pdfCUDA TIPS and FAQ NVIDIA Japanでは、開発者のみなさんへの支援を

Thank you