Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6....

45
Une nouvelle approche pour la gestion de la mémoire avec CUDA

Transcript of Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6....

Page 1: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Une nouvelle approche

pour la gestion de la

mémoire avec CUDA

Page 2: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Une nouvelle approche pour la gestion

de la mémoire avec CUDA

Concepts de base

Gérer la mémoire efficacement avec CUDA

Qu’est ce que UVA et UVM ?

Utiliser UVM dans une application

Introduction

Page 3: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Page 4: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Concepts de base

P

R

O

G

R

A

M

1

P

R

O

G

R

A

M

1

P

R

O

G

R

A

M

1

P

R

O

G

R

A

M

1

P

R

O

G

R

A

M

1

P

R

O

G

R

A

M

1

I

N

P

U

T

1

I

N

P

U

T

2

I

N

P

U

T

3

I

N

P

U

T

4

I

N

P

U

T

5

I

N

P

U

T

6

Page 5: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Concepts de base

MyCudaFunction<<<Block, Thread>>>(…);

Page 6: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Concepts de base

GPU

SM SM SM SM

Page 7: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Concepts de base

SM

CUDA Core CUDA Core CUDA Core

Page 8: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Concepts de base

GPU

SM SM SM SM

Block 1 Block 2 Block 3 Block 4

Block 5 Block 6 Block 7 Block 8

Block 9 Block 10 Block 11 Block 12

MyCudaFunction<<<12, …>>>(…);

Page 9: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Concepts de base

SM

Thread 1 Thread 2 Thread 3 Thread 4

Wrap

Page 10: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Architecture d’une carte

graphique

Concepts de base

SM

Thread 1 Thread 2 Thread 3 Thread 4

Wrap

Instruction;

If (…) {

}

else {

}

Instruction;

Page 11: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

PTX: Parallel Thread Execution

Concepts de base

setp.lt.s32 p|q, a, b

@p bra Else

instructionA

bra End

Else:

instructionB

End:

instructionC

setp.lt.s32 p|q, a, b

@p InstructionA

@q InstructionB

InstructionC

Page 12: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

CUDA Stream

Concepts de base

MyCudaFunction<<<Block, Thread, Stream>>>(…);

Page 13: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

CUDA Stream

Concepts de base

Kernel Memcpy Kernel

MyCudaFunction<<<Block, Thread>>>(…);

Cumemcpy(…)

MyCudaFunction<<<Block, Thread>>>(…);

Page 14: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

CUDA Stream

Concepts de base

Kernel

Memcpy Kernel

MyCudaFunction<<<Block, Thread, Stream1>>>(…);

Cumemcpy(…, Stream2)

MyCudaFunction<<<Block, Thread, Stream2>>>(…);

Page 15: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Page 16: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

IO Thread Threads de calcul

Image Image

Image Image

Image Image

Disque

Chargement des images

Thread 1

Thread 2

Thread 3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Page 17: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

IO Thread Threads de calcul

Image Image

Image Image

Image Image

Disque

Chargement des images

Thread 1

Thread 2

Thread 3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Page 18: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

Opération2 (depuis Thread 1)

Opération2 (depuis Thread 2)

Opération2 (depuis Thread 3)

MemcpyCPU->GPU

MemcpyGPU->CPU

MemcpyGPU->CPU

MemcpyCPU->GPU

MemcpyCPU->GPU

MemcpyGPU->CPU

Thread 1 Thread 1 Thread 2 Thread 2 Thread 3 Thread 3

Page 19: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

IO Thread Threads de calcul

Image Image

Image Image

Image Image

Disque

Chargement des images

Thread 1

Thread 2

Thread 3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Stream1

Stream2

Stream3

Page 20: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

Opération2 (depuis Thread 1)

Opération2 (depuis Thread 2)

Opération2 (depuis Thread 3)

MemcpyCPU->GPU

MemcpyGPU->CPU

MemcpyGPU->CPU

MemcpyCPU->GPU

MemcpyCPU->GPU

MemcpyGPU->CPU

Thread 1 Thread 1 Thread 3 Thread 3

Thread 2 Thread 2

Page 21: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

IO Thread Threads de calcul

Image Image

Image Image

Image Image

Disque

Chargement des images

Thread 1

Thread 2

Thread 3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Opération1 Opération2 Opération3

Stream1

Stream2

Stream3

Page 22: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

Opération2 (depuis Thread 1)

Opération2 (depuis Thread 1)

MemcpyCPU->GPU

MemcpyGPU->CPU

MemcpyGPU->CPU

MemcpyCPU->GPU

Thread 1 Thread 1

Page 23: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Gérer la mémoire efficacement

avec CUDA

Gérer la mémoire efficacement avec CUDA

Opération2 (depuis Thread 1)

Opération2 (depuis Thread 1)

MemcpyCPU->GPU

MemcpyGPU->CPU

Thread 1 Thread 1

Page 24: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Que faire si les opérations sont dans

des bibliothèques ?

Gérer la mémoire efficacement avec CUDA

Page 25: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Que faire si les opérations sont dans

des bibliothèques ?

Gérer la mémoire efficacement avec CUDA

Image 1

Image 1

GPU Memory

CPU Memory

Page 26: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Que faire si les opérations sont dans

des bibliothèques ?

Gérer la mémoire efficacement avec CUDA

Image 1

Image 1

GPU Memory

CPU Memory

Pointeur

?

Page 27: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Que faire si les opérations sont dans

des bibliothèques ?

Gérer la mémoire efficacement avec CUDA

Image 1

Image 1

GPU Memory

CPU Memory

?

Pointeur

Page 28: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Que faire si les opérations sont dans

des bibliothèques ?

Gérer la mémoire efficacement avec CUDA

Page 29: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Qu’est ce que UVA et UVM ?

Page 30: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Qu’est ce que UVA?

Qu’est ce que UVA et UVM ?

CPU VA Space

GPU VA Space

CPU Allocation

GPU Allocation VA Réservé

Description de UVA (Unified Virtual Address)

Page 31: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Qu’est ce que UVM?

Qu’est ce que UVA et UVM ?

CPU VA Space

GPU VA Space

CPU Allocation

GPU Allocation VA Réservé

Description de UVM (Unified Virtual Memory)

Mémoire UVM résidente

Mémoire UVM réservé

Page 32: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Qu’est ce que UVM?

Qu’est ce que UVA et UVM ?

CPU VA Space

GPU VA Space

CPU Allocation

GPU Allocation VA Réservé

Description de UVM (Unified Virtual Memory)

Mémoire UVM résidente

Mémoire UVM réservé

Page 33: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Qu’est ce que UVM?

Qu’est ce que UVA et UVM ?

CPU VA Space

GPU VA Space

CPU Allocation

GPU Allocation VA Réservé

Description de UVM (Unified Virtual Memory)

Mémoire UVM résidente

Mémoire UVM réservé

Page 34: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Qu’est ce que UVA et UVM ?

Qu’est ce que UVA et UVM ?

Page 35: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Utiliser UVM dans une application

Page 36: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Utiliser UVM dans une application

Utiliser UVM dans une application

Allocation d’un bloc de mémoire avec

UVM et creation d’un stream pour le

contenir.

CPU Memory GPU Memory

Block mémoire résident

Block mémoire réservé

Page 37: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Utiliser UVM dans une application

Utiliser UVM dans une application

CPU Memory GPU Memory

Block mémoire résident

Block mémoire réservé

Chargement de l’image dans le bloc

mémoire.

Page 38: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Utiliser UVM dans une application

Utiliser UVM dans une application

CPU Memory GPU Memory

Block mémoire résident

Block mémoire réservé

Binarization d”un bloc de l’image dans

UVM

Page 39: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Utiliser UVM dans une application

Utiliser UVM dans une application

CPU Memory GPU Memory

Block mémoire résident

Block mémoire réservé

Migration GPU -> CPU lorsque l’utilisateur

accède au données depuis le CPU.

Page 40: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Avantages

Utiliser UVM dans une application

Kernel 1 Kernel 2Memcpy

CPU->GPUMemcpy

GPU->CPUMemcpy

GPU->CPUMemcpy

CPU->GPU

Elimination des memcpy inutile automatique

Page 41: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Avantages

Utiliser UVM dans une application

Kernel 1 Kernel 2Memcpy

CPU->GPUMemcpy

GPU->CPU

Elimination des memcpy inutile automatique

Page 42: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Avantages

Utiliser UVM dans une application

Kernel 1 Opération CPUMemcpy

CPU->GPUMemcpy

GPU->CPU

Cohabitation entre bibliothèques utilisant CUDA et bibliothèques conventionnelles

MemcpyGPU->CPU

Fonction d’une bibliothèque utilisant CUDA Fonction d’une bibliothèque n’utilisant pas CUDA

Page 43: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Inconvénients

Utiliser UVM dans une application

Plus lent qu’une optimisation manuelle des memcpy

Moins de contrôle sur les déplacement de mémoire

Utilisable sur des cartes Nvidia récentes uniquement

Page 44: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Conclusion

Page 45: Une nouvelle approche pour la gestion de la mémoire avec CUDA · 2020-03-09 · U T 6. Architecture d’une carte graphique Concepts de base MyCudaFunction(…);

Questions ?