ΠαρΑλληλη ΕΠΕΞΕΡΓΑΣΙΑ

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Τέλος Ενότητας.
Advertisements

Μεταγλωττιστές (Compilers) (Θ) Ενότητα 13: Επαναληπτικό μάθημα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Το περιεχόμενο του μαθήματος διατίθεται.
Βασικές αρχές ευρετηρίασης
Η ανοσοαποτύπωση ως επιβεβαιωτική μέθοδος
Τριφασικά συμμετρικά δίκτυα σε συνδεσμολογία Υ (1/2)
Οργάνωση πληροφοριών Ταξινόμηση (Θ) Ενότητα 4: Αρχιτεκτονική της Ευρετηρίασης (β μέρος) Δάφνη Κυριάκη-Μάνεση Τμήμα Βιβλιοθηκονομίας και Συστημάτων Πληροφόρησης.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 10: Παραγωγή Ενδιάμεσου Κώδικα (Σημασιολογικές ρουτίνες μετάφρασης-Μέρος Α) Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής.
Διαμόρφωση πεδίων Περιγραφικά πεδία Διαχειριστικά πεδία Δομικά πεδία.
Μεταγλωττιστές (Compilers) (Θ) Ενότητα 11: Βελτιστοποίηση Ενδιάμεσου Κώδικα Κατερίνα Γεωργούλη Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
Σχεδίαση Ολοκληρωμένων Κυκλωμάτων
Τεχνολογία οφθαλμικών φακών Ι (Ε) Ενότητα 5: Έγχρωμοι φακοί Θεμιστοκλής Γιαλελής, Οπτικός, MSc, PhD candidate ΕΔΙΠ του τμήματος Οπτικής και Οπτομετρίας.
Eιδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων
Κανόνες Ασφαλείας Εργοταξίων
Παράγοντες που επηρεάζουν ένα σύστημα Υγείας
ΟΙΚΟΝΟΜΙΚΑ ΤΟΥ ΕΛΕΓΧΟΥ ΤΗΣ ΡΥΠΑΝΣΗΣ
Άλλες μορφές νευρώσεων
Διαχείριση παραγωγής εντύπων 1/2
Επικοινωνιακός Προγραμματισμός Ι
Άσκηση 8 (1 από 3) Προβολές 1. Να επιλέξετε ένα θέμα βασισμένο σε κάποια παράγραφο / υποπαράγραφο του κεφαλαίου 6 των σημειώσεων και να κάνετε μια εργασία.
Υπολογιστική Γεωμετρία και Εφαρμογές στις ΒΧΔ
Φιλοσοφία της Ιστορίας και του Πολιτισμού
Εργαστήριο 9 : Scratch (Μέρος 9_Β) Δημήτριος Νικολός ΤΕΕΑΠΗ
Υπολογιστική Γεωμετρία και Εφαρμογές στις ΒΧΔ 1/12
Τεχνολογία και Προγραμματισμός Υπολογιστών
Άρθρο Συγγραφείς: Marcus Plescia, MD, MPH, Martha Groblewski, PhD, RD, LDN. Τίτλος: A Community Oriented Primary care Demonstration Project Refining.
Ταυτότητα και περίγραμμα μαθήματος
Άσκηση 7 (1 από 5) Υπολογισμοί μηκών τόξων σφαίρας. Το έτος 2035 μ.Χ., μετά από πυρηνική καταστροφή και λόγω του φαινομένου του θερμοκηπίου, που πήρε εκρηκτικές.
ΠΡΟΤΥΠΟ ΕΛΟΤ EN ISO 3251 Ζύγιση μάζας υγρού μελανιού (m1 g)
Ενότητα 13 Αξιολόγηση μαθήματος και διδάσκοντος από την εφαρμογή της Μονάδας Ολικής Ποιότητας (ΜΟΔΙΠ) του ΤΕΙ Αθήνας Αξιολόγηση του μαθήματος Αξιολόγηση.
Εκτίμηση σωματικού βάρους
Εισαγωγή στο Κουκλοθέατρο
Ιχθυολογία Ενότητα 4η. Eργαστηριακή Άσκηση
Περιγραφή Ενότητας Σκοπός του μαθήματος είναι η παρουσίαση δηλώσεων SQL που περιλαμβάνουν EXIST, ANY, ALL. Χ. Σκουρλάς.
Άσκηση 9 (1 από 2) Ανακαλύψτε στο χάρτη σας μερικά χαρτογραφικά αντικείμενα που να ανήκουν στις παρακάτω κατηγορίες : φυσικά, τεχνητές κατασκευές, αφηρημένα.
Φιλοσοφία της Ιστορίας και του Πολιτισμού
Ο Πλάτων και ο Αριστοτέλης για την ψυχή
Εργαστήριο 7 : Scratch (Μέρος 7ο) Δημήτριος Νικολός ΤΕΕΑΠΗ
Σύγχρονη Πρακτική Φιλοσοφία
Εκτίμηση σωματικού βάρους
Σχολή Ανθρωπιστικών και Κοινωνικών Σπουδών Τμήμα Φιλοσοφίας
ΕΦΑΡΜΟΣΜΕΝΗ ΗΘΙΚΗ Ενότητα 9 (PART A): Σχέση Ηθικής και Δικαιοσύνης
Τοπολογικές σχέσεις 1/3 Βρείτε και περιγράψτε τις τοπολογικές σχέσεις σύμφωνα με τους (Pantazis, Donnay 1996) για τα παρακάτω γεω-γραφικά αντικείμενα:
Σύγχρονη Πρακτική Φιλοσοφία
Κανονικοποίηση ΤΙ ΕΙΝΑΙ ; Τεχνική Διαδικασία
Επικοινωνιακός Προγραμματισμός Ι
Εικαστικές συνθέσεις - Χρώμα στο χώρο
Γενική και Μαθηματική Χαρτογραφία (Ε)
Οργάνωση και Διοίκηση Πρωτοβάθμιας (Θ)
Εισαγωγή στις εικαστικές τέχνες
Εισαγωγή στους Η/Υ Ενότητα 1: Εισαγωγή στους Η/Υ Ιωάννης Σταματίου
Λιθογραφία – Όφσετ (Θ) Ενότητα 8.2: Εκτυπωτική Διαδικασία Μηχανής
Επικοινωνιακός Προγραμματισμός Ι
Διδακτική της Πληροφορικής
Εισαγωγή στους Η/Υ Ενότητα 12: Το διάγραμμα ροής και η λειτουργία του
Τηλεοπτική και Ραδιοφωνική Παραγωγή
Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας
Ειδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων -E
Γενική και Μαθηματική Χαρτογραφία (Ε)
Αισθητική Σώματος Ι (Ε)
Μυθος και Τελετουργία στην Αρχαία Ελλάδα
Το Εικονογραφημένο Βιβλίο στην Προσχολική Εκπαίδευση
Ενότητα 8: Συστήματα Υγείας στην Ευρώπη: Γαλλία
Eιδικά θέματα βάσεων χωρικών δεδομένων και θεωρία συστημάτων -Θ
ΕΦΑΡΜΟΣΜΕΝΗ ΗΘΙΚΗ Ενότητα 5 (part B): Ηθική αρχών και ηθική ωφέλειας
Γενικὴ Ἐκκλησιαστικὴ Ἱστορία Α´
Γενική και Μαθηματική Χαρτογραφία (Ε)
ΕΦΑΡΜΟΣΜΕΝΗ ΗΘΙΚΗ Ενότητα 6 (part A): Όταν τα άτομα δεν είναι σε θέση να λάβουν αποφάσεις για τον εαυτό τους Διδάσκων: Μιχαήλ Παρούσης, Αναπλ. Καθηγητής.
Οργανική Χημεία (Ε) Ενότητα 2: Προσδιορισμός σημείου τήξης
Ενότητα 1: ……………….. Όνομα Επώνυμο Τμήμα __
Επικοινωνιακός Προγραμματισμός Ι
Μεταγράφημα παρουσίασης:

ΠαρΑλληλη ΕΠΕΞΕΡΓΑΣΙΑ Ιωάννης Ε. Βενέτης Τμήμα Μηχανικών Η/Υ και Πληροφορικής ΠαρΑλληλη ΕΠΕΞΕΡΓΑΣΙΑ 18/02/2015 Ενότητα 8 – Εισαγωγή στην CUDA

Σκοποί Ενότητας Εισαγωγή στην αρχιτεκτονική και τον τρόπο προγραμματισμού «μαζικά παράλληλων επεξεργαστών» (massively parallel processors) για να επιτύχετε: Υψηλή επίδοση Λειτουργικότητα και συντήρηση κώδικα Επεκτασιμότητα σε μελλοντικές γενιές επεξεργαστών Τεχνικά θέματα Χαρακτηριστικά και περιορισμοί της αρχιτεκτονικής των επεξεργαστών Προγραμματιστική διεπαφή, εργαλεία και τεχνικές

Blue Waters Hardware >300 >25,000 >1 TB/s >1.5 Petabytes Cray System & Storage cabinets: >25,000 Compute nodes: >1 TB/s Usable Storage Bandwidth: >1.5 Petabytes System Memory: 4 GB Memory per core module: 3D Torus Gemin Interconnect Topology: >25 Petabytes Usable Storage: >11.5 Petaflops Peak performance: >49,000 Number of AMD Interlagos processors: >380,000 Number of AMD x86 core modules: >3,000 Number of NVIDIA Kepler GPUs:

XK7 Compute Node Characteristics Cray XK7 Compute Node PCIe Gen2 XK7 Compute Node Characteristics AMD Series 6200 (Interlagos) NVIDIA Kepler Host Memory 32GB 1600 MT/s DDR3 NVIDIA Tesla X2090 Memory 6GB GDDR5 capacity Gemini High Speed Interconnect Keplers in final installation HT3 HT3 Y X Z Cray Proprietary

Διαφορετική φιλοσοφία σχεδιασμού μεταξύ CPU και GPU Throughput Oriented Cores CPU Latency Oriented Cores Chip Chip Compute Unit Core Local Cache Registers SIMD Unit Control Cache/Local Mem Registers SIMD Unit Threading

CPU: Σχεδιασμός για μεγάλο χρόνο προσπέλασης στην μνήμη (latency) Μεγάλες κρυφές μνήμες Μετατρέπουν αργές προσπελάσεις μνήμης σε γρηγορότερες προσπελάσεις στην κρυφή μνήμη Εξελιγμένος έλεγχος Πρόβλεψη διακλαδώσεων για μείωση καθυστερήσεων Προώθηση δεδομένων στον αγωγό για μείωση καθυστερήσεων Ισχυρή ALU Μικρότερος χρόνος εκτέλεσης ανά εντολή Cache ALU Control DRAM CPU

GPU: Σχεδιασμός για διεκπεραιωτική ικανότητα (throughput) Μικρές κρυφές μνήμες Για την βελτίωση της ικανότητας διαβίβασης δεδομένων της μνήμης Απλός έλεγχος Όχι πρόβλεψη διακλαδώσεων Όχι προώθηση δεδομένων Ενεργειακά αποδοτικές ALUs Πολλές, με μεγάλο χρόνο εκτέλεσης, αλλά με πολλά επίπεδα στον αγωγό Απαιτεί την ύπαρξη μεγάλου πλήθους νημάτων για την αντιμετώπιση των καθυστερήσεων από προσπελάσεις στην μνήμη DRAM GPU

Οι καλύτερες εφαρμογές χρησιμοποιούν και CPU και GPU CPUs για τα σειριακά τμήματα στα οποία έχει σημασία το latency Οι CPUs μπορεί να είναι 10+X γρηγορότερες από τις GPUs για σειριακό κώδικα GPUs για τα παράλληλα τμήματα στα οποία έχει σημασία το throughput Οι GPUs μπορεί να είναι 10+X γρηγορότερες από τις CPUs για παράλληλο κώδικα

Η χρήση υβριδικού παράλληλου προγραμματισμού διαδίδεται Financial Analysis Scientific Simulation Engineering Simulation Data Intensive Analytics Medical Imaging Computer Vision Biomedical Informatics Electronic Design Automation Digital Audio Processing Digital Video Processing Statistical Modeling Ray Tracing Rendering Interactive Physics Numerical Methods Πάνω από 480 υποβολές στο GPU Computing Gems 150 άρθρα έχουν συμπεριληφθεί σε τρεις εκδόσεις

Στάδια παράλληλου προγραμματισμού Προσδιορισμός τμημάτων της εφαρμογής με μεγάλο υπολογιστικό φόρτο Υιοθέτηση κατάλληλων αλγορίθμων Βελτιστοποίηση τοποθέτησης δεδομένων στην μνήμη ώστε να μεγιστοποιηθεί η τοπικότητα των αναφορών Βελτιστοποίηση απόδοσης Προσοχή στην μεταφερσιμότητα και στην δυνατότητα συντήρησης του κώδικα

Το λογισμικό συνεισφέρει περισσότερο στο κόστος ενός συστήματος Γραμμές κώδικα ανά ολοκληρωμένο αυξάνονται με ρυθμό 2x/10 μήνες Τρανζίστορ ανά ολοκληρωμένο αυξάνονται με ρυθμό 2x/18 μήνες Τα μελλοντικά συστήματα θα πρέπει να ελαχιστοποιούν την ανάπτυξη λογισμικού από μηδενική βάση

Βασικά σημεία για τον έλεγχο του κόστους του λογισμικού Επεκτασιμότητα (Scalability) App Core A

Βασικά σημεία για τον έλεγχο του κόστους του λογισμικού Επεκτασιμότητα (Scalability) Η ίδια εφαρμογή εκτελείται αποδοτικά σε επόμενες γενεές πυρήνων App Core A 2.0 Core A

Βασικά σημεία για τον έλεγχο του κόστους του λογισμικού Επεκτασιμότητα (Scalability) Η ίδια εφαρμογή εκτελείται αποδοτικά σε επόμενες γενεές πυρήνων Η ίδια εφαρμογή εκτελείται αποδοτικά σε μεγαλύτερο πλήθος ίδιων πυρήνων App Core A Core A Core A

Επεκτασιμότητα και μεταφερσιμότητα Βελτίωση απόδοσης σε διαδοχικές γενεές υλικού Αυξανόμενο πλήθος υπολογιστικών μονάδων Αυξανόμενο πλήθος νημάτων Αυξανόμενο εύρος διανυσματικών εντολών Αυξανόμενα επίπεδα αγωγού Αύξηση burst size της DRAM Αυξανόμενο πλήθος καναλιών DRAM Μεταφερσιμότητα ανάμεσα σε υλικό διαφορετικού τύπου Multi-core CPUs vs. many-core GPUs VLIW vs. SIMD vs. threading Shared memory vs. distributed memory

Βασικά σημεία για τον έλεγχο του κόστους του λογισμικού Επεκτασιμότητα (Scalability) Μεταφερσιμότητα Η ίδια εφαρμογή εκτελείται αποδοτικά σε διαφορετικού τύπου πυρήνες App App App Core B Core A Core C

Βασικά σημεία για τον έλεγχο του κόστους του λογισμικού Επεκτασιμότητα (Scalability) Μεταφερσιμότητα Η ίδια εφαρμογή εκτελείται αποδοτικά σε διαφορετικού τύπου πυρήνες Η ίδια εφαρμογή εκτελείται αποδοτικά σε συστήματα με διαφορετική οργάνωση και διεπαφές App App App

Κλιμακωσιμότητα παραλληλισμού

Πολυπλοκότητα αλγορίθμων και κλιμακωσιμότητα δεδομένων

Γιατί είναι σημαντική η κλιμακωσιμότητα δεδομένων; Οποιαδήποτε πολυπλοκότητα αλγορίθμου υψηλότερη της γραμμικής δεν είναι κλιμακώσιμη ως προς τα δεδομένα Ο χρόνος εκτέλεσης αυξάνει δραματικά καθώς τα δεδομένα αυξάνονται ακόμη και για αλγόριθμους n*log(n) Η επεξεργασία μεγάλου πλήθους δεδομένων είναι πρωταρχικής σημασίας στον παράλληλο υπολογισμό Ένας σειριακός αλγόριθμος με γραμμική πολυπλοκότητα μπορεί να είναι γρηγορότερος από έναν παράλληλο αλγόριθμο με πολυπλοκότητα n*log(n) Ο όρος log(n) μεγαλώνει τελικά γρηγορότερα από τον βαθμό παραλληλισμού στο επίπεδο του υλικού και αυτό οδηγεί τον παράλληλο αλγόριθμο να είναι πιο αργός από τον σειριακό

Παραλληλισμός - πολυπλοκότητα για πολλά δεδομένα

Παράδειγμα κλιμακωσιμότητας δεδομένων Particle-Mesh Algorithms

Μαζικός Παραλληλισμός – Τακτικότητα (Regularity)

Κατανομή φόρτου εργασίας Ο συνολικός χρόνος εκτέλεσης μιας παράλληλης εφαρμογής είναι αυτός του νήματος που χρειάζεται τον περισσότερο χρόνο Καλό Κακό!

Εύρος ζώνης (bandwidth) κύριας μνήμης Ιδανική Πραγματική

Συγκρούσεις κατά την προσπέλαση δεδομένων προκαλούν σειριοποίηση και καθυστερήσεις Εκτέλεση μαζικού παραλληλισμού δεν μπορεί να ανεχθεί σειριοποίηση Ανταγωνισμός στην προσπέλαση κρίσιμων δεδομένων προκαλεί σειριοποίηση

Ποιο είναι το στοίχημα; Κλιμακώσιμος και μεταφέρσιμος κώδικας που αντέχει για πολλές γενεές υλικού Κλιμακώσιμοι αλγόριθμοι και βιβλιοθήκες μπορεί να είναι η καλύτερη παρακαταθήκη που μπορούμε να αφήσουμε

CUDA /OpenCL – Μοντέλο εκτέλεσης Ενοποιημένο πρόγραμμα C για host+device Σειριακός ή «ελαφρά» παράλληλος κώδικας C στον host Παράλληλος κώδικας για την εξωτερική συσκευή σε «device SPMD kernel C code» Serial Code (host)‏ . . . Parallel Kernel (device)‏ KernelA<<< nBlk, nTid >>>(args); Serial Code (host)‏ . . . Parallel Kernel (device)‏ KernelB<<< nBlk, nTid >>>(args);

Από την φυσική γλώσσα στα ηλεκτρόνια Natural Language (e.g, English) Algorithm High-Level Language (C/C++…) Instruction Set Architecture Microarchitecture Circuits Electrons ©Yale Patt and Sanjay Patel, From bits and bytes to gates and beyond Compiler

Αρχιτεκτονική Συνόλου Εντολών (ΑΣΕ) Η Αρχιτεκτονική Συνόλου Εντολών (Instruction Set Architecture ή ISA) λειτουργρί ως συμβόλαιο μεταξύ του υλικού και του λογισμικού. Όπως υποδηλώνει και το όνομα, είναι ένα σύνολο εντολών που μπορεί να εκτελέσει το υλικό.

Το πρόγραμμα στο επίπεδο ΑΣΕ Ένα πρόγραμμα είναι ένα σύνολο εντολών αποθηκευμένο στην μνήμη, το οποί μπορεί να διαβαστεί, να ερμηνευτεί (interpreted) και να εκτελεστεί από το υλικό. Οι εντολές του προγράμματος επιδρούν σε δεδομένα που είναι αποθηκευμένα στην μνήμη ή που παρέχονται από συσκευές Εισόδου/Εξόδου.

Το μοντέλο Von-Neumann Memory I/O Processing Unit Reg File ALU Insert von-neumann schematic here Control Unit PC IR

Πίνακες Παράλληλων Νημάτων (Arrays of Parallel Threads) Μια συνάρτηση πυρήνα της CUDA (CUDA kernel) εκτελείται από ένα πλέγμα (ή πίνακα) νημάτων Όλα τα νήματα του πλέγματος εκτελούν την ίδια συνάρτηση πυρήνα (SPMD)‏ Κάθε νήμα έχει έναν δείκτη (ακέραιο) τον οποίο χρησιμοποιεί για να υπολογίζει θέσεις μνήμης και να παίρνει αποφάσεις 1 2 254 255 … i = blockIdx.x * blockDim.x + threadIdx.x; C_d[i] = A_d[i] + B_d[i]; … 33

Μπλοκ νημάτων (Thread Blocks): Κλιμακώσιμη συνεργασία Διαίρεση πίνακα νημάτων σε περισσότερα μπλοκ Νήματα στο ίδιο μπλοκ συνεργάζονται μέσω κοινής μνήμης, ατομικών εντολών και φραγμάτων (barriers) Νήματα σε διαφορετικά μπλοκ δεν συνεργάζονται Thread Block 0 Thread Block 1 Thread Block N-1 1 2 254 255 1 2 254 255 1 2 254 255 … … … i = blockIdx.x * blockDim.x + threadIdx.x; C_d[i] = A_d[i] + B_d[i]; i = blockIdx.x * blockDim.x + threadIdx.x; C_d[i] = A_d[i] + B_d[i]; i = blockIdx.x * blockDim.x + threadIdx.x; C_d[i] = A_d[i] + B_d[i]; … … … …

blockIdx και threadIdx Κάθε νήμα χρησιμοποιεί δείκτες για να αποφασίσει πάνω σε ποια δεδομένα θα επενεργήσει blockIdx: 1D, 2D ή 3D (CUDA 4.0) threadIdx: 1D, 2D ή 3D Απλοποιεί την διευθυνσιοδότηση της μνήμης όταν επεξεργάζονται δεδομένα σε πολυδιάστατους χώρους Επεξεργασία εικόνα Επίλυση διαφορικών εξισώσεων σε τρισδιάστατα αντικείμενα …

Πρόσθεση διανυσμάτων vector A … vector B … + + + + + + vector C … A[0] A[N-1] … vector B B[0] B[1] B[2] B[3] B[4] B[N-1] … + + + + + + vector C C[0] C[1] C[2] C[3] C[4] C[N-1] …

Πρόσθεση διανυσμάτων – Κώδικας C // Compute vector sum C = A+B void vecAdd(float* A, float* B, float* C, int n) { for (int i = 0; i < n; i++) C[i] = A[i] + B[i]; } int main() // Memory allocation for A_h, B_h, and C_h // I/O to read A_h and B_h, N elements … vecAdd(A_h, B_h, C_h, N);

Πρόσθεση διανυσμάτων σε ετερογενές σύστημα – Κώδικας στον host Part 1 #include <cuda.h> void vecAdd(float* A, float* B, float* C, int n)‏ { int size = n* sizeof(float); float* A_d, B_d, C_d; … 1. // Allocate device memory for A, B, and C // copy A and B to device memory 2. // Kernel launch code – to have the device // to perform the actual vector addition 3. // copy C from the device memory // Free device vectors } Host Memory Device Memory CPU GPU Part 2 Part 3

Μερική επισκόπηση της μνήμης στην CUDA Ο κώδικας στο device: Διαβάζει/Γράφει καταχωρητές ανά νήμα Διαβάζει/Γράφει καθολική (global) μνήμη ανά πλέγμα Ο κώδικας στον host: Μεταφέρει δεδομένα από/προς την καθολική μνήμη ανά πλέγμα (Device) Grid Global Memory Block (0, 0) Thread (0, 0) Registers Thread (1, 0) Block (1, 0) Host Global, constant, and texture memory spaces are persistent across kernels called by the same application. Θα δούμε περισσότερα

Διεπαφή της CUDA για διαχείριση μνήμης του device cudaMalloc() Δεσμεύει αντικείμενο στην καθολική μνήμη του device Δύο παράμετροι Δείκτης προς το δεσμευμένο αντικείμενο Μέγεθος αντικειμένου σε bytes cudaFree() Ελευθερώνει αντικείμενο από την καθολική μνήμη του device Μία παράμετρος Δείκτης προς αντικείμενο (Device) Grid Global Memory Block (0, 0) Thread (0, 0) Registers Thread (1, 0) Block (1, 0) Host

Διεπαφή για μεταφορά δεδομένων cudaMemcpy() Μεταφορά δεδομένων 4 παράμετροι Δείκτης στο αντικείμενο- προορισμός Δείκτης στο αντικείμενο- πηγή Πλήθος bytes Κατεύθυνση μεταφοράς Η μεταφορά προς το device είναι ασύγχρονη Το πρόγραμμα στον host συνεχίζει άμεσα την εκτέλεση του (Device) Grid Global Memory Block (0, 0) Thread (0, 0) Registers Thread (1, 0) Block (1, 0) Host

void vecAdd(float. A, float. B, float. C, int n) { int size = n void vecAdd(float* A, float* B, float* C, int n) { int size = n * sizeof(float); float* A_d, B_d, C_d; 1. // Transfer A and B to device memory cudaMalloc((void **) &A_d, size); cudaMemcpy(A_d, A, size, cudaMemcpyHostToDevice); cudaMalloc((void **) &B_d, size); cudaMemcpy(B_d, B, size, cudaMemcpyHostToDevice); // Allocate device memory for cudaMalloc((void **) &C_d, size); 2. // Kernel invocation code – to be shown later … 3. // Transfer C from device to host cudaMemcpy(C, C_d, size, cudaMemcpyDeviceToHost); // Free device memory for A, B, C cudaFree(A_d); cudaFree(B_d); cudaFree (C_d); }

Παράδειγμα: Πρόσθεση διανυσμάτων Device Code // Compute vector sum C = A + B // Each thread performs one pair-wise addition __global__ void vecAddKernel(float* A_d, float* B_d, float* C_d, int n) { int i = threadIdx.x + blockDim.x * blockIdx.x; if (i<n) C_d[i] = A_d[i] + B_d[i]; } int vectAdd(float* A, float* B, float* C, int n) // A_d, B_d, C_d allocations and copies omitted // Run ceil(n/256) blocks of 256 threads each vecAddKernel<<<ceil(n/256), 256>>>(A_d, B_d, C_d, n);

Παράδειγμα: Πρόσθεση διανυσμάτων // Compute vector sum C = A + B // Each thread performs one pair-wise addition __global__ void vecAddKernel(float* A_d, float* B_d, float* C_d, int n) { int i = threadIdx.x + blockDim.x * blockIdx.x; if (i<n) C_d[i] = A_d[i] + B_d[i]; } int vectAdd(float* A, float* B, float* C, int n) // A_d, B_d, C_d allocations and copies omitted // Run ceil(n/256) blocks of 256 threads each vecAddKernel<<<ceil(n/256), 256>>>(A_d, B_d, C_d, n); Host Code

More on Kernel Launch Host Code int vectAdd(float* A, float* B, float* C, int n) { // A_d, B_d, C_d allocations and copies omitted // Run ceil(n/256) blocks of 256 threads each dim3 DimGrid(n/256, 1, 1); if (n % 256) DimGrid.x++; dim3 DimBlock(256, 1, 1); vecAddKernel<<<DimGrid,DimBlock>>>(A_d, B_d, C_d, n); } Η κλήση σε μια συνάρτηση πυρήνα είναι ασύγχρονη από την CUDA 1.0 και μετά Απαιτείται συγχρονισμός αν χρειάζεται σύγχρονη εκτέλεση

Επισκόπηση εκτέλεσης συνάρτησης πυρήνα __host__ void vecAdd() { dim3 DimGrid = (ceil(n/256,1,1); dim3 DimBlock = (256,1,1); vecAddKernel<<<DimGrid,DimBlock>>>(A_d,B_d,C_d,n); } __global__ void vecAddKernel(float *A_d, float *B_d, float *C_d, int n) { int i = blockIdx.x * blockDim.x + threadIdx.x; if( i<n ) C_d[i] = A_d[i]+B_d[i]; } Kernel Blk 0 Blk N-1 • • • GPU M0 RAM Mk • • • Schedule onto multiprocessors

Δήλωση συναρτήσεων στην CUDA __global__ ορίζει μια συνάρτηση πυρήνα Κάθε “__” αποτελείται από δύο underscore Μια συνάρτηση πυρήνα πρέπει να επιστρέφει void __device__ και __host__ μπορούν να χρησιμοποιηθούν μαζί host __host__ float HostFunc()‏ device __global__ void KernelFunc()‏ __device__ float DeviceFunc()‏ Only callable from the: Executed on the:

Μετάφραση προγραμμάτων CUDA Πρόγραμμα C με επεκτάσεις CUDA NVCC Compiler (Μεταφραστής) Host Code Device Code (PTX) Host C Compiler/ Linker Device Just-in-Time Compiler Ετερογενής υπολογιστική πλατφόρμα με CPUs και GPUs

Ας δούμε ένα πραγματικό πρόγραμμα CUDA

Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Πατρών, Ευστράτιος Γαλλόπουλος, Ιωάννης Ε. Βενέτης. «Παράλληλη Επεξεργασία. Ενότητα 8 – Εισαγωγή στην CUDA». Έκδοση: 1.0. Πάτρα 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: https://eclass.upatras.gr/courses/CEID1057/.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους.

Σημείωμα Χρήσης Έργων Τρίτων (1/3) Το Έργο αυτό κάνει χρήση των ακόλουθων έργων: Εικόνες/Σχήματα/Διαγράμματα/Φωτογραφίες 1) http://www.adaptivecomputing.com/wp- content/uploads/2013/08/BLUEWATERS.png (βλ. σελ. 3) 2) https://www.google.gr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB4 QFjAAahUKEwi_xIzfnITIAhXLfhoKHXuxAfY&url=http%3A%2F%2Fftp.emc.ncep.noaa. gov%2Fexper%2Fnova%2Ftemp%2FT3%2FIntroduction%2520to%2520the%2520C ray%2520XK7.pptx&usg=AFQjCNFzbjZPL2GSPSgvCvfSzpmt2eLNKw&cad=rja, σελ. 6, (βλ. σελ. 4) 3) http://coverslike.com/thumbs/naval_fleet-t1.jpg (βλ. σελ. 23)

Σημείωμα Χρήσης Έργων Τρίτων (2/3) 4) https://s-media-cache- ak0.pinimg.com/236x/84/c2/be/84c2be77069ad727f0a47dc7f04dda09.jpg (βλ. σελ. 23) 5) http://www.gadgetell.com/images/082006/zunefactory2.jpg (βλ. σελ. 23) 6) http://1.bp.blogspot.com/- CooPrARi7N4/UePHTkOx_UI/AAAAAAAAALY/_jBLZt6guBM/s1600/corn- field.jpg (βλ. σελ. 23) 7) http://imgc.allpostersimages.com/images/P-473-488- 90/21/2165/9AZCD00Z/posters/bruno-morandi-large-banquet-in-the- contrada-quarter-palio-siena-tuscany-italy.jpg (βλ. σελ. 23) 8) http://cgvr.cs.uni-bremen.de/teaching/mpar_14/folien/02%20- %20Intro%20to%20CUDA-4.pdf, σελ. 1 (βλ. σελ. 25)

Σημείωμα Χρήσης Έργων Τρίτων (3/3) 9) http://www.dreambox.com/wp-content/uploads/2010/06/Long-line1.jpg (βλ. σελ. 26) 10) http://thechrisjonesgroup.com/chrisjonesmortgage/wp- content/uploads/2009/06/long-lines.jpg (βλ. σελ. 26)