2. Βαςικζσ Ερωτιςεισ και Απαντιςεισ
http://aetos.it.teithe.gr/~kdiamant/CompArchParallel/CUDA/cuda_gr.htm
Τι είναι μια Graphics Processing Unit (GPU)?
Μια κάρτα γραφικών, (ςυχνά αποκαλείται και device) με
μεγάλο πλικοσ επεξεργαςτικών μονάδων που
καλοφνται πυρήνες (cores). Οι πυρινεσ είναι διακζςιμοι
ςτον προγραμματιςτι ώςτε μζςω μιασ κατάλλθλθσ
βιβλιοκικθσ μποροφν να χρθςιμοποιθκοφν για
παράλλθλθ εκτζλεςθ προγραμμάτων.
2
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
3. Κάρτεσ GPU τθσ NVIDIA
https://developer.nvidia.com/cuda-gpus
Αρχιτεκτονική
Κάρτεσ
Kepler
(compute capability
3.x)
Quadro Σειρά Kepler
Tesla Κ20
Tesla K10
Fermi
(compute capability
2.x)
GeForce Σειρά 500
GeForce Σειρά 400
Quadro Σειρά Fermi
Tesla Σειρά 20
Tesla
(compute capability
1.x)
GeForce Σειρά 200
GeForce Σειρά 9
GeForce Σειρά 8
Quadro Σειρά FX
Quadro Σειρά Plex
Quadro Σειρά NVS
Tesla Σειρά 10
Τυπικέσ εφαρμογέσ:
3
GeForce Σειρά 600
Διαςκέδαςη
Επαγγελματικά
Γραφικά
Παράλληλη
Επεξεργαςία
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
6. nVIDIA: Αρχιτεκτονικι Fermi
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.
6
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
8. Ο Streaming MP (SM)
32 πυρινεσ (cores). Κάκε πυρινασ είναι ζνασ πολφ απλόσ
8
επεξεργαςτισ ο οποίοσ περιζχει μια πλιρωσ 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.
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
9. Ο Streaming MP (SM)
Ζνασ 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
9
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
11. Σφγκριςθ Fermi - Kepler
Fermi
GF100
Kepler
GK104
Kepler
GK110
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
11
Fermi
GF104
63
63
63
255
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
12. CUDA
Τι είναι θ CUDA;
http://www.nvidia.com/object/cuda_home_new.html
Προγραμματιςτικό μοντζλο τθσ εταιρείασ nVIDIA το
οποίο υποςτθρίηει τθν εκτζλεςθ παράλλθλων
προγραμμάτων χρθςιμοποιώντασ τουσ πυρινεσ
(cores) μιασ ι περιςςοτζρων καρτών GPU. Η CUDA
επιτρζπει ςτον προγραμματιςτι να δθμιουργιςει
εκατοντάδεσ ι και χιλιάδεσ νθματα τα οποία
εκτελοφνται ςτουσ πυρινεσ μιασ ι περιςςοτζρων
GPU. Με τον τρόπο αυτό μποροφν να υλοποιθκοφν
αλγόρικμοι μαηικισ παράλλθλθσ επεξεργαςίασ.
12
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
14. Προγραμματιςμόσ CUDA
Δυνατότθτα ανάπτυξθσ εφαρμογών GPU
χρθςιμοποιώντασ μια επζκταςθ τθσ γλώςςασ C.
Υποςτθρίηονται επίςθσ FORTRAN, DirectCompute,
OpenACC ενώ υπάρχουν επίςθσ Wrappers για Java και
Python
Σε Windows απαραίτθτθ θ χριςθ Visual Studio.
Προγραμματιςτικό μοντζλο Single-Instruction
Multiple-Thread (SIMT) όπου πολλοί κλώνοι του
ίδιου προγράμματοσ εκτελοφνται ωσ διαφορετικά
νιματα με διαφορετικά id.
14
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
15. Προγραμματιςμόσ CUDA
Ζνα kernel προκαλεί τθν εκτζλεςθ ενόσ Πλζγματοσ (Grid)
Ζνα Πλζγμα αποτελείται από Ν Blocks νθμάτων CUDA (Block0, ...,
BlockN-1).
Ζνα Block αποτελείται από Τ Νιματα CUDA (Νιμα0, ...,
ΝιμαT-1).
Πρόγραμμα:
Hardware:
Ζνα Πλζγμα (Grid)
Ζνα Block νθμάτων
Ζνα Νιμα (Thread)
15
Κ. Διαμαντάρας
μια GPU
εκτελείται ςε
ζνα SM
ζνα Πυρινα (Core)
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
17. Λζξεισ κλειδιά
Η f()
καλείται από
Η f()
εκτελείται ςτθ
GPU (device)
GPU (device)
__global__
__global__ float f() {
...
}
CPU (host)
GPU (device)
__host__
__host__ int f() {
...
}
CPU (host)
CPU (host)
Λζξθ κλειδί
Παράδειγμα
__device__ void f() {
__device__ ...
}
17
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
18. Περιοριςμοί kernels
Δεν μποροφν να χρθςιμοποιθκοφν ςυναρτιςεισ που
χρθςιμοποιοφν ςυςκευζσ I/O (οκόνθ, πλθκτρολόγιο, κάρτα
δικτφου, κλπ).
Οι εντολζσ ςε μια ςυνάρτθςθ kernel δεν μποροφν να
προςπελάςουν απ' ευκείασ τθν κφρια μνιμθ τθσ CPU
(host). Αν κζλουμε να προςπελάςουμε τα δεδομζνα τθσ
κφριασ μνιμθσ πρζπει πρώτα να τα μεταφζρουμε ςτθ
μνιμθ τθσ GPU χρθςιμοποιώντασ τθν εντολι
cudaMemcpy().
Σε παλιότερεσ εκδόςεισ δεν υποςτθρίηεται ο τφποσ
δεδομζνων double. Σε μια ςυνάρτθςθ kernel, οι
μεταβλθτζσ αυτοφ του τφπου μετατρζπονται αυτομάτωσ
κατά τθν μετάφραςθ ςε float.
18
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα
19. Μοντζλο μνιμθσ CUDA/GPU
Τα νιματα μζςα ςε ζνα block μποροφν να ςυνεργαςτοφν
είτε μοιραηόμενα τθν κοινι μνιμθ του block (shared memory)
είτε κάνοντασ ςυγχρονιςμό εκτζλεςθσ χρθςιμοποιώντασ τθν
εντολι __synchthreads()
19
Κ. Διαμαντάρας
Προηγμένες Αρτιτεκτονικές
Η/Υ & Παράλληλα Σσστήματα