Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

19
Κ. Διαμαντάρασ Τμιμα Πλθροφορικισ ΑΤΕΙ Θεςςαλονίικθσ 2013 Graphics Processing Units (GPU) και CUDA

description

Σύντομη εισαγωγή στην τεχνολογία των προγραμματιζόμενων καρτών γραφικών GPU της nVIDIA και την προγραμματιστική πλατφόρμα CUDA.

Transcript of Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Page 1: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Κ. ΔιαμαντάρασΤμιμα ΠλθροφορικισΑΤΕΙ Θεςςαλονίικθσ

2013

Graphics Processing Units (GPU)και CUDA

Page 2: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Βαςικζσ Ερωτιςεισ και Απαντιςεισ

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα Σσστήματα2

http://aetos.it.teithe.gr/~kdiamant/CompArchParallel/CUDA/cuda_gr.htm

Τι είναι μια Graphics Processing Unit (GPU)?

Μια κάρτα γραφικών, (ςυχνά αποκαλείται και device) με μεγάλο πλικοσ επεξεργαςτικών μονάδων που καλοφνται πυρήνες (cores). Οι πυρινεσ είναι διακζςιμοι ςτον προγραμματιςτι ώςτε μζςω μιασ κατάλλθλθσ βιβλιοκικθσ μποροφν να χρθςιμοποιθκοφν για παράλλθλθ εκτζλεςθ προγραμμάτων.

Κ. Διαμαντάρας

Page 3: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Κάρτεσ GPU τθσ NVIDIA

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας3

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

Αρχιτεκτονική Κάρτεσ

Kepler(compute capability3.x)

GeForce Σειρά 600 Quadro Σειρά KeplerTesla Κ20Tesla K10

Fermi(compute capability2.x)

GeForce Σειρά 500GeForce Σειρά 400

Quadro Σειρά Fermi Tesla Σειρά 20

Tesla(compute capability 1.x)

GeForce Σειρά 200GeForce Σειρά 9GeForce Σειρά 8

Quadro Σειρά FXQuadro Σειρά PlexQuadro Σειρά NVS

Tesla Σειρά 10

Τυπικέσ εφαρμογέσ: ΔιαςκέδαςηΕπαγγελματικά Γραφικά

Παράλληλη Επεξεργαςία

Page 4: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Κάρτεσ GPU τθσ NVIDIA

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας4

Fermi: GeForce ςειρά 400

Kepler: GeForce ςειρά 600

Tesla: GeForce ςειρά 500

Page 5: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

nVIDIA: Αρχιτεκτονικι GPU

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας5

Αρχιτεκτονικι Fermi: 16 Streaming MultiProcessors (SM)

Page 6: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

nVIDIA: Αρχιτεκτονικι Fermi

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας6

16 SM με 32 cores ο κακζνασ οπότε ςυνολικά υπάρχουν 512 cores. Οι SM είναι τοποκετθμζνοι γφρω από μια κοινι μνιμθ cache 2ου επιπζδου μεγζκουσ 768 KB.

6 τράπεζες μνθμης 64bit που υποςτθρίηουν μζχρι 6GB μνιμθσ τφπου GDDR5 DRAM.

Ζνα host-interface που ςυνδζει τθν GPU με τθν CPU μζςω διαφλου PCI Express.

Ο δρομολογθτισ GigaThread engine ο οποίοσ κατανζμει τα blocks των νθμάτων ςτουσ SM.

Page 7: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Streaming Multiprocessor (SM)

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας7

Page 8: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Ο Streaming MP (SM)

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας8

32 πυρινεσ (cores). Κάκε πυρινασ είναι ζνασ πολφ απλόσ επεξεργαςτισ ο οποίοσ περιζχει μια πλιρωσ pipelined Integer Arithmetic Logic Unit (ALU) και μια Floating Point Unit (FPU)

16 μονάδες Load/Store

4 Special Function Units (SFU) οι οποίεσ εκτελοφν πολφπλοκεσ μακθματικζσ ςυναρτιςεισ όπωσ θμίτονο (sine), ςυνθμίτονο (cosine), αντίςτροφο (1/x) και τετραγωνικι ρίηα.

32768 Καταχωρητζς (Registers) μικουσ 32 bit.

Μια Κοινή μνήμη μεγζκουσ 64 KB

Μια κοινι Data Cache επιπζδου 1 και μια Instruction Cache

Ζνα κφκλωμα δικτφου για διαςφνδεςθ με τουσ υπόλοιπουσ SM

Δφο warp schedulers και δφο instruction dispatch units.

Page 9: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Ο Streaming MP (SM)

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας9

Ζνασ SM δρομολογεί νιματα ςε groups που καλοφνται warps. Το πλικοσ των νθμάτων ςε ζνα warpςχετίηεται άμεςα με το πλικοσ των πυρινων που διακζτει ο SM. Στο ςυγκεκριμζνο παράδειγμα κάκε warp ζχει 32 νιματα. Υπάρχουν 2 warp-schedulers και δφο μονάδεσ ανάκεςθσ εντολών (instruction dispatch units). Δθλαδι, ο Fermi SM εκτελεί ταυτόχρονα 2 εντολζσ προερχόμενεσ από 2 διαφορετικά warps. Μια εντολι από ζνα warpμπορεί, ανάλογα με το είδοσ τθσ, να ανατεκεί

είτε ςε ζνα πυρινα από μια 16-άδα πυρινων

είτε ςε μια από τισ 16 Load/Store units

είτε ςε ζνα από τα 4 Special Function Units

Page 10: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Ο πυρινασ (core)

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας10

Page 11: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Σφγκριςθ Fermi - Kepler

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας11

FermiGF100

FermiGF104

KeplerGK104

KeplerGK110

Compute capability 2.0 2.1 3.0 3.5

Threads / Warp 32 32 32 32

Max Warps / SM 48 48 64 64

Max Threads / SM 1536 1536 2048 2048

Max Blocks / SM 8 8 16 16

Max Threads / Block 1024 1024 1024 1024

32 bit Registers / SM

32768 32768 65536 65536

Max Registers / Thread

63 63 63 255

Page 12: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

CUDA

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας12

Τι είναι θ CUDA;

http://www.nvidia.com/object/cuda_home_new.htmlΠρογραμματιςτικό μοντζλο τθσ εταιρείασ nVIDIA το οποίο υποςτθρίηει τθν εκτζλεςθ παράλλθλων προγραμμάτων χρθςιμοποιώντασ τουσ πυρινεσ (cores) μιασ ι περιςςοτζρων καρτών GPU. Η CUDA επιτρζπει ςτον προγραμματιςτι να δθμιουργιςει εκατοντάδεσ ι και χιλιάδεσ νθματα τα οποία εκτελοφνται ςτουσ πυρινεσ μιασ ι περιςςοτζρων GPU. Με τον τρόπο αυτό μποροφν να υλοποιθκοφν αλγόρικμοι μαηικισ παράλλθλθσ επεξεργαςίασ.

Page 13: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Στιςιμο CUDA

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας13

https://developer.nvidia.com/cuda-downloads

Page 14: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Προγραμματιςμόσ CUDA

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας14

Δυνατότθτα ανάπτυξθσ εφαρμογών GPU χρθςιμοποιώντασ μια επζκταςθ τθσ γλώςςασ C. Υποςτθρίηονται επίςθσ FORTRAN, DirectCompute, OpenACC ενώ υπάρχουν επίςθσ Wrappers για Java και Python

Σε Windows απαραίτθτθ θ χριςθ Visual Studio.

Προγραμματιςτικό μοντζλο Single-InstructionMultiple-Thread (SIMT) όπου πολλοί κλώνοι του ίδιου προγράμματοσ εκτελοφνται ωσ διαφορετικά νιματα με διαφορετικά id.

Page 15: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Προγραμματιςμόσ CUDA

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας15

Πρόγραμμα: Hardware:

Ζνα Πλζγμα (Grid)εκτελείται ςε

μια GPU

Ζνα Block νθμάτων ζνα SM

Ζνα Νιμα (Thread) ζνα Πυρινα (Core)

Ζνα kernel προκαλεί τθν εκτζλεςθ ενόσ Πλζγματοσ (Grid) Ζνα Πλζγμα αποτελείται από Ν Blocks νθμάτων CUDA (Block0, ...,

BlockN-1). Ζνα Block αποτελείται από Τ Νιματα CUDA (Νιμα0, ...,

ΝιμαT-1).

Page 16: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Παράδειγμα Προγράμματοσ

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας16

http://aetos.it.teithe.gr/~kdiamant/CompArchParallel/CUDA/cuda_gr.htm

Page 17: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Λζξεισ κλειδιά

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας17

Λζξθ κλειδί ΠαράδειγμαΗ f()καλείται από

Η f()εκτελείται ςτθ

__device____device__ void f() {...}

GPU (device) GPU (device)

__global____global__ float f() {...}

CPU (host) GPU (device)

__host____host__ int f() {...}

CPU (host) CPU (host)

Page 18: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Περιοριςμοί kernels

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας18

Δεν μποροφν να χρθςιμοποιθκοφν ςυναρτιςεισ που χρθςιμοποιοφν ςυςκευζσ I/O (οκόνθ, πλθκτρολόγιο, κάρτα δικτφου, κλπ).

Οι εντολζσ ςε μια ςυνάρτθςθ kernel δεν μποροφν να προςπελάςουν απ' ευκείασ τθν κφρια μνιμθ τθσ CPU (host). Αν κζλουμε να προςπελάςουμε τα δεδομζνα τθσ κφριασ μνιμθσ πρζπει πρώτα να τα μεταφζρουμε ςτθ μνιμθ τθσ GPU χρθςιμοποιώντασ τθν εντολι cudaMemcpy().

Σε παλιότερεσ εκδόςεισ δεν υποςτθρίηεται ο τφποσ δεδομζνων double. Σε μια ςυνάρτθςθ kernel, οι μεταβλθτζσ αυτοφ του τφπου μετατρζπονται αυτομάτωσ κατά τθν μετάφραςθ ςε float.

Page 19: Σύντομη εισαγωγή στην τεχνολογία GPU και την CUDA

Μοντζλο μνιμθσ CUDA/GPU

Προηγμένες Αρτιτεκτονικές

Η/Υ & Παράλληλα ΣσστήματαΚ. Διαμαντάρας19

Τα νιματα μζςα ςε ζνα block μποροφν να ςυνεργαςτοφν

είτε μοιραηόμενα τθν κοινι μνιμθ του block (shared memory)

είτε κάνοντασ ςυγχρονιςμό εκτζλεςθσ χρθςιμοποιώντασ τθν εντολι __synchthreads()