CUDA
Programming

GPU programming with CUDA

Filipo Mór
Plauto Neto

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

AGENDA

 INTRODUÇÃO
 NVIDIA GPU ARCHITECTURE
 CUDA PROGRAMMING MODEL
 CASE STUDY

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

INTRODUCTION
NVIDIA FIRST GRAPHIC ACCELERATOR
 NVIDIA NV1 – 90’S
 DirectX – 1996
 First GPU – 1999
 NVIDIA GeForce 256
 22 million transistors
 10 million polygons
 32/64MB
 T&L engine (vertex)
 challenging programming

 CUDA – 2006

Compute Unified Device Architecture
GPGPU

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

MULTICORE vs MANY-CORE
CPU vs GPU

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

MULTICORE vs MANY-CORE
CPU

GPU

•

Based on pipeline philosophy

•

Big amount of parallel data

•

A lot of strucutres for cache and

•

Less strucutres for cache and

control

control

•

More flexible

•

Less flexibility

•

MIMD – task parallelism

•

SIMD – data parallelism

•

Latency sensible

•

Latency tolerant

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

NVIDIA GPU ROADMAP

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

NVIDIA GPU ROADMAP
GENERATIONS
•

•

•

•
•

TESLA/GEFORCE
• 2006
• Float point algebra
• CUDA
FERMI
• improvements on shared memory
• SLI
KEPLER
• Dynamic Parallelism
• MIMD
MAXWELL
• Unified Virtual Memory
VOLTA
• Stacked DRAM

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

DYNAMIC PARALLELISM

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

DYNAMIC PARALLELISM

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

COMPUTE CAPABILITY

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CUDA PROGRAMMING MODEL

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CUDA PROGRAMMING MODEL
thread ID

•

Basic unit – kernel
•

2

3

4

…

Thread array

•

1

Synchronous or asynchronous

•

0

Array / matrix / cube

[1] Keutzer, K.,Malik, S. Newton, A.R., Rabaye, J.M. and Sangiovanni Vincentelli, A.: System-level design: orthogonolization of concerns and platform-based
design. IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.,2000,19, (12), pp. 1523-1543
PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CUDA PROGRAMMING MODEL

•

Basic unit – kernel
•

Synchronous or asynchronous

•

Thread array

•

Array / matrix / cube

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CUDA PROGRAMMING MODEL

Coalesced memory access!

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CASE STUDY
•

DOT PRODUCT

𝑛

𝐴∙ 𝐵=

𝑎 𝑖 𝑏 𝑖 = 𝑎1 𝑏1 + 𝑎2 𝑏2 + ⋯ + 𝑎 𝑛 𝑏 𝑛
𝑖=1

𝐴 = 𝑎1 , 𝑎2 , … , 𝑎 𝑛

𝐵 = (𝑏1 , 𝑏2 , … , 𝑏 𝑛 )

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CASE STUDY
•

DOT PRODUCT

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CASE STUDY
•

DOT PRODUCT

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CASE STUDY
•

DOT PRODUCT

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

CASE STUDY
•

DOT PRODUCT

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
CUDA
Programming

Perguntas !!!

PUCRS - PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO

GPU Programming with CUDA