SlideShare a Scribd company logo
CUDA	
    東京工業大学 4年	
     千葉 滋 研究室	
        穂積 俊平	




                  1
CUDA	

【NVIDIA】の	
【GPU】に対する、	
【GPGPU】を目的とした	
統合開発環境	
              2
NVIDIA	
•  本社:アメリカ合衆国カリフォルニア州サンタクララ	
•  主な製品:GPU	
•  ライバル:	




             VS.	




                                3
NVIDIA	
•  本社:アメリカ合衆国カリフォルニア州サンタクララ	
•  主な製品:GPU	
•  ライバル:AMD	




             VS.	




                                4
NVIDIA	
•  本社:アメリカ合衆国カリフォルニア州サンタクララ	
•  主な製品:GPU	
•  ライバル:AMD	




             VS.	

 CUDAはNVIDIAのGPUでのみ動作する!	

                                5
GPU	
コンピュータにおける画像処理の需要の高まり	
	
	
	
	




                          6
GPU	
コンピュータにおける画像処理の需要の高まり	
	
	
画像処理専用のプロセッサを作ろう	
	
	




                          7
GPU	
コンピュータにおける画像処理の需要の高まり	
	
	
画像処理専用のプロセッサを作ろう	
	
	

GPUの誕生!!!!!	
                          8
GPUのアーキテクチャ	
SM : SPを複数個含む	
SP : 最小単位の演算処理ユニット	

                       SM	
     ビデオカード	
        GPU	
       SP	
   SP	

      SM	
   SM	
                    SP	
   SP	

     ビデオメモリ	
                                  9
GPUとCPUの違い	
•  SMはSIMDで動作する。	




                     10
GPUとCPUの違い	
•  SMはSIMDで動作する。	

     Single Instruction Multi Data	




                                       11
GPUとCPUの違い	
•  SMはSIMDで動作する。	

     Single Instruction Multi Data	

 SM内のSPは異なる処理をする事はできない。	




                                       12
GPUのアーキテクチャ	
どのくらいの演算処理ユニット(SP)があるのか?	




  




                             13
GPUのアーキテクチャ	
どのくらいの演算処理ユニット(SP)があるのか?	
比較対象:Intel Corei7
     HyperThreadingが4つ。実質8個	

  




                                14
GPUのアーキテクチャ	
どのくらいの演算処理ユニット(SP)があるのか?	
比較対象:Intel Corei7
     HyperThreadingが4つ。実質8個	
例:GT200
  




                                15
GPUのアーキテクチャ	
どのくらいの演算処理ユニット(SP)があるのか?	
比較対象:Intel Corei7
     HyperThreadingが4つ。実質8個	
例:GT200
   SM数30個




                                16
GPUのアーキテクチャ	
どのくらいの演算処理ユニット(SP)があるのか?	
比較対象:Intel Corei7
     HyperThreadingが4つ。実質8個	
例:GT200
   SM数30個
   各SMに含まれるSPの数8個

  30×8 = 	



                                17
GPUのアーキテクチャ	
どのくらいの演算処理ユニット(SP)があるのか?	
比較対象:Intel Corei7
     HyperThreadingが4つ。実質8個	
例:GT200
   SM数30個
   各SMに含まれるSPの数8個

  30×8 = 240個	



                                18
GPUのアーキテクチャ	
どのくらいの演算処理ユニット(SP)があるのか?	
比較対象:Intel Corei7
     HyperThreadingが4つ。実質8個	
例:GT200
   SM数30個
   各SMに含まれるSPの数8個

  30×8 = 240個	
   30倍	
                                19
GPGPU	
GPUの演算処理能力はとても高い	




                     20
GPGPU	
GPUの演算処理能力はとても高い	


より汎用的な目的でGPUを使おう!	




                     21
CUDA	

【NVIDIA】の	
【GPU】に対する、	
【GPGPU】を目的とした	
統合開発環境	
              22
CUDA	
CUDAはCPUとGPU両方扱う!	
 o  CPU => ホスト	
 o  GPU => デバイス	




                      23
CUDA	
CUDAはCPUとGPU両方扱う!	
 o  CPU => ホスト	
 o  GPU => デバイス	



ホストとデバイスの間で通信が必要	



                      24
典型的な処理の流れ	
1.  デバイスメモリ上に領域を確保
2.  データをホストメモリからデバイスメモリにコピー
3.  GPUで処理を実行
4.  結果をデバイスメモリからホストメモリにコピー	


     GPU	
           CPU	


  デバイスメモリ	
       ホストメモリ	
                               25
典型的な処理の流れ	
1.  デバイスメモリ上に領域を確保
2.  データをホストメモリからデバイスメモリにコピー
3.  GPUで処理を実行
4.  結果をデバイスメモリからホストメモリにコピー	


     GPU	
           CPU	


  デバイスメモリ	
       ホストメモリ	
                               26
典型的な処理の流れ	
1.  デバイスメモリ上に領域を確保
2.  データをホストメモリからデバイスメモリにコピー
3.  GPUで処理を実行
4.  結果をデバイスメモリからホストメモリにコピー	


     GPU	
           CPU	


  デバイスメモリ	
       ホストメモリ	
                               27
典型的な処理の流れ	
1.  デバイスメモリ上に領域を確保
2.  データをホストメモリからデバイスメモリにコピー
3.  GPUで処理を実行
4.  結果をデバイスメモリからホストメモリにコピー	


     GPU	
           CPU	


  デバイスメモリ	
       ホストメモリ	
                               28
典型的な処理の流れ	
1.  デバイスメモリ上に領域を確保
2.  データをホストメモリからデバイスメモリにコピー
3.  GPUで処理を実行
4.  結果をデバイスメモリからホストメモリにコピー	


     GPU	
           CPU	


  デバイスメモリ	
       ホストメモリ	
                               29
実際のCUDAコード	
例	
 for(int i = 0;i < 1024;i++){	
    C[i] = A[i] + B[i];	
 }	




                                  30
実際のCUDAコード	
1.  デバイスメモリ上に領域を確保




                     31
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)




                                   32
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)
2.  データをホストメモリからデバイスメモリにコピー




                                   33
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)
cudaMemcpy(A_d,A_h,sizeof(float)*N,hostToDevise)




                                             34
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)
cudaMemcpy(A_d,A_h,sizeof(float)*N,hostToDevise)
3.  GPUで処理を実行




                                             35
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)
cudaMemcpy(A_d,A_h,sizeof(float)*N,hostToDevise)
dim3 Dg(2,1,1) Db(512,1,1)
vec_add<<Dg,Db>>(A_d,B_d,C_d)




                                             36
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)
cudaMemcpy(A_d,A_h,sizeof(float)*N,hostToDevise)
dim3 Dg(2,1,1) Db(512,1,1)
vec_add<<Dg,Db>>(A_d,B_d,C_d)
4.  結果をデバイスメモリからホストメモリにコピー




                                             37
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)
cudaMemcpy(A_d,A_h,sizeof(float)*N,hostToDevise)
dim3 Dg(2,1,1) Db(512,1,1)
vec_add<<Dg,Db>>(A_d,B_d,C_d)
cudaMemcpy(C_h,C_d,sizeof(float)*N,deviseToHost)




                                             38
実際のCUDAコード	
float *A_d, *B_d, *C_d
cudaMalloc(&A_d,sizeof(float)*N)
cudaMemcpy(A_d,A_h,sizeof(float)*N,hostToDevise)
dim3 Dg(2,1,1) Db(512,1,1)
vec_add<<<Dg,Db>>>(A_d,B_d,C_d)
cudaMemcpy(C_h,C_d,sizeof(float)*N,deviseToHost)

dim3って何?
vec_addの中身は?	
                                             39
CUDAにおけるスレッド管理	
•  グリッドとブロックという概念を導入し、3次元的にス
   レッドを管理している。	
        グリッド	
     ブロック	
 ブロック	
     ブロック	
 ブロック	
	
	



                           40
CUDAにおけるスレッド管理	
•  グリッドとブロックという概念を導入し、3次元的にス
   レッドを管理している。	
        グリッド	
    ブロック	
 ブロック	
    ブロック	
 ブロック	
	
•  dim3変数はグリッド、ブロックのサイズを指定している。	
 o  Dg(2,1,1) Db(512,1,1)	



                              41
カーネル関数	
__global__ void vec_add(float *A_d, *B_d, *C_d){	
   int i = blockDim.x*blockIdx.x + threadIdx.x;	
   C_d[i] = A_d[i] + B_d[i];	
}	




                                                     42
カーネル関数	
__global__ void vec_add(float *A_d, *B_d, *C_d){	
   int i = blockDim.x*blockIdx.x + threadIdx.x;	
   C_d[i] = A_d[i] + B_d[i];	
}	

ビルトイン変数
 カーネル関数内で宣言せずに使用できる変数
	
blockDim : blockの大きさの情報
blockIdx : 何番目のblockを参照しているか
threadIdx : 何番目のthreadを参照しているか	
                                                     43
カーネル関数	
__global__ void vec_add(float *A_d, *B_d, *C_d){	
   int i = blockDim.x*blockIdx.x + threadIdx.x;	
   C_d[i] = A_d[i] + B_d[i];	
}	

ビルトイン変数
 カーネル関数内で宣言せずに使用できる変数
	
blockDim : blockの大きさの情報
blockIdx : 何番目のblockを参照しているか
threadIdx : 何番目のthreadを参照しているか	
各スレッドと配列の要素を結びつけている。	
                               44
CUDA4.1	
•  LLVMをベースにしたコンパイラを導入	
  o  最大で10%の速度アップ	
•  自動でパフォーマンス測定を行うVisual Profiler	
•  CUDA_GDB 	
  o  カーネル関数におけるデバッグ、アサート	
•  CUDA_MEMCHECK 	
  o  カーネル関数におけるアウトオブバウンズを検知	




                                      45

More Related Content

PDF
CUDAプログラミング入門
PDF
Maxwell と Java CUDAプログラミング
PDF
20170726 py data.tokyo
PDF
NVIDIA ディープラーニング入門
PDF
1070: CUDA プログラミング入門
PDF
GTC 2017 基調講演からディープラーニング関連情報のご紹介
PDF
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
PDF
20170421 tensor flowusergroup
CUDAプログラミング入門
Maxwell と Java CUDAプログラミング
20170726 py data.tokyo
NVIDIA ディープラーニング入門
1070: CUDA プログラミング入門
GTC 2017 基調講演からディープラーニング関連情報のご紹介
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
20170421 tensor flowusergroup

What's hot (20)

PDF
NVIDIA TESLA V100・CUDA 9 のご紹介
PDF
Pythonによる並列プログラミング -GPGPUも-
PDF
20170329_BigData基盤研究会#7
PDF
(JP) GPGPUがPostgreSQLを加速する
PDF
1072: アプリケーション開発を加速するCUDAライブラリ
PDF
Chainer で Tensor コア (fp16) を使いこなす
PDF
OpenCLに触れてみよう
PDF
20210731_OSC_Kyoto_PGStrom3.0
PDF
Flow in VR Funhouse MOD Kit
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
PDF
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
PDF
SQL+GPU+SSD=∞ (Japanese)
PDF
DGX-2 を取り巻く GPU 最新技術情報
PDF
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PPTX
関東GPGPU勉強会資料
PDF
EnrootとPyxisで快適コンテナ生活
PDF
pgconfasia2016 lt ssd2gpu
PDF
GPU クラウド コンピューティング
PDF
1000: 基調講演
PDF
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA TESLA V100・CUDA 9 のご紹介
Pythonによる並列プログラミング -GPGPUも-
20170329_BigData基盤研究会#7
(JP) GPGPUがPostgreSQLを加速する
1072: アプリケーション開発を加速するCUDAライブラリ
Chainer で Tensor コア (fp16) を使いこなす
OpenCLに触れてみよう
20210731_OSC_Kyoto_PGStrom3.0
Flow in VR Funhouse MOD Kit
プログラムを高速化する話Ⅱ 〜GPGPU編〜
[20170922 Sapporo Tech Bar] 地図用データを高速処理!オープンソースGPUデータベースMapDってどんなもの?? by 株式会社...
SQL+GPU+SSD=∞ (Japanese)
DGX-2 を取り巻く GPU 最新技術情報
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
関東GPGPU勉強会資料
EnrootとPyxisで快適コンテナ生活
pgconfasia2016 lt ssd2gpu
GPU クラウド コンピューティング
1000: 基調講演
C#, C/CLI と CUDAによる画像処理ことはじめ
Ad

Viewers also liked (20)

PPTX
Slidecast
DOC
To+pancen+oye
PPTX
프레젠테이션1
PDF
Memoirs of WWII
PPTX
Wind Turbines
PPTX
Question 2 new
PPTX
Zara
PDF
PDF
Electroquimica
DOC
Efa using spss
PPTX
Microsoft Romania Christmas Campaign
PPTX
Ingenieria web
PPTX
Hijab
PPTX
Prezentacia
PPT
apple PPT module
PDF
Merger control provisions - A step in the right direction
PDF
NorDigi mobile process analyst white paper
PDF
Scrappers pitch
PPTX
Mamma
PDF
Redesigning local news
Slidecast
To+pancen+oye
프레젠테이션1
Memoirs of WWII
Wind Turbines
Question 2 new
Zara
Electroquimica
Efa using spss
Microsoft Romania Christmas Campaign
Ingenieria web
Hijab
Prezentacia
apple PPT module
Merger control provisions - A step in the right direction
NorDigi mobile process analyst white paper
Scrappers pitch
Mamma
Redesigning local news
Ad

Similar to Cuda (20)

KEY
NVIDIA Japan Seminar 2012
PDF
Hello, DirectCompute
DOC
GPGPUによるパーソナルスーパーコンピュータの可能性
KEY
PyOpenCLによるGPGPU入門
KEY
GPGPU deいろんな問題解いてみた
PDF
GTC Japan 2017
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PDF
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
PDF
NVIDIA GRID が実現する GPU 仮想化テクノロジー
PDF
PF部第19回資料 poor man's JTAG
PDF
PF部2011年12月勉強会.androidsola
PPTX
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
PDF
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
PDF
NVIDIA 入門
PDF
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
PDF
【A-1】AIを支えるGPUコンピューティングの今
PDF
45分で理解する 最近のスパコン事情 斉藤之雄
PDF
コンピューティングとJava~なにわTECH道
KEY
関東GPGPU勉強会 LLVM meets GPU
PDF
Let's play with Goldfish
NVIDIA Japan Seminar 2012
Hello, DirectCompute
GPGPUによるパーソナルスーパーコンピュータの可能性
PyOpenCLによるGPGPU入門
GPGPU deいろんな問題解いてみた
GTC Japan 2017
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
NVIDIA GRID が実現する GPU 仮想化テクノロジー
PF部第19回資料 poor man's JTAG
PF部2011年12月勉強会.androidsola
OpenStackを使用したGPU仮想化IaaS環境 事例紹介
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
NVIDIA 入門
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
【A-1】AIを支えるGPUコンピューティングの今
45分で理解する 最近のスパコン事情 斉藤之雄
コンピューティングとJava~なにわTECH道
関東GPGPU勉強会 LLVM meets GPU
Let's play with Goldfish

Cuda