Ευχαριστούμε που στάλθηκε η αποσαφήνισή σας! Ένα μέλος της ομάδου μας θα επικοινωνήσει μαζί σας σύντομα.
Ευχαριστούμε για την εκδήλωση κράτησης! Ένας από τους συνεργάτες μας θα επικοινωνήσει μαζί σας σύντομα.
Διάρκεια 28 Ώρες
Εξέλιξη Κομματιού
Εισαγωγή
- Τι είναι ο προγραμματισμός GPU;
- Γιατί να χρησιμοποιήσετε τον προγραμματισμό GPU;
- Ποιες είναι οι προκλήσεις και τα αντισταθμίσματα του προγραμματισμού GPU;
- Ποια είναι τα πλαίσια (frameworks) για προγραμματισμό GPU;
- Επιλέγοντας το κατάλληλο framework για την εφαρμογή σας
OpenCL
- Τι είναι το OpenCL;
- Ποια είναι τα πλεονεκτήματα και μειονεκτήματα του OpenCL;
- Ρύθμιση του περιβάλλοντος ανάπτυξης για OpenCL
- Δημιουργία ενός βασικού προγράμματος OpenCL που εκτελεί πρόσθεση διανυσμάτων
- Χρήση του OpenCL API για ερωτήματα πληροφοριών συσκευής, δέσμευση και αποδέσμευση μνήμης συσκευής, αντιγραφή δεδομένων μεταξύ host και device, εκκίνηση kernels και συγχρονισμό νημάτων
- Χρήση της γλώσσας OpenCL C για τη συγγραφή kernels που εκτελούνται στη συσκευή και χειρίζονται δεδομένα
- Χρήση των ενσωματωμένων συναρτήσεων, μεταβλητών και βιβλιοθηκών του OpenCL για την εκτέλεση συνήθων εργασιών και λειτουργιών
- Χρήση των χώρων μνήμης του OpenCL, όπως καθολική (global), τοπική (local), σταθερή (constant) και ιδιωτική (private), για βελτιστοποίηση μεταφορών δεδομένων και προσβάσεων μνήμης
- Χρήση του μοντέλου εκτέλεσης του OpenCL για τον έλεγχο των work-items, work-groups και ND-ranges που ορίζουν τον παραλληλισμό
- Αποσφαλμάτωση και δοκιμή προγραμμάτων OpenCL χρησιμοποιώντας εργαλεία όπως το CodeXL
- Βελτιστοποίηση προγραμμάτων OpenCL χρησιμοποιώντας τεχνικές όπως coalescing, caching, prefetching και profiling
CUDA
- Τι είναι το CUDA;
- Ποια είναι τα πλεονεκτήματα και μειονεκτήματα του CUDA;
- Ρύθμιση του περιβάλλοντος ανάπτυξης για CUDA
- Δημιουργία ενός βασικού προγράμματος CUDA που εκτελεί πρόσθεση διανυσμάτων
- Χρήση του CUDA API για ερωτήματα πληροφοριών συσκευής, δέσμευση και αποδέσμευση μνήμης συσκευής, αντιγραφή δεδομένων μεταξύ host και device, εκκίνηση kernels και συγχρονισμό νημάτων
- Χρήση της γλώσσας CUDA C/C++ για τη συγγραφή kernels που εκτελούνται στη συσκευή και χειρίζονται δεδομένα
- Χρήση των ενσωματωμένων συναρτήσεων, μεταβλητών και βιβλιοθηκών του CUDA για την εκτέλεση συνήθων εργασιών και λειτουργιών
- Χρήση των χώρων μνήμης του CUDA, όπως καθολική (global), κοινόχρηστη (shared), σταθερή (constant) και τοπική (local), για βελτιστοποίηση μεταφορών δεδομένων και προσβάσεων μνήμης
- Χρήση του μοντέλου εκτέλεσης του CUDA για τον έλεγχο των νημάτων (threads), των μπλοκ (blocks) και των πλεγμάτων (grids) που ορίζουν τον παραλληλισμό
- Αποσφαλμάτωση και δοκιμή προγραμμάτων CUDA χρησιμοποιώντας εργαλεία όπως CUDA-GDB, CUDA-MEMCHECK και NVIDIA Nsight
- Βελτιστοποίηση προγραμμάτων CUDA χρησιμοποιώντας τεχνικές όπως coalescing, caching, prefetching και profiling
ROCm
- Τι είναι το ROCm;
- Ποια είναι τα πλεονεκτήματα και μειονεκτήματα του ROCm;
- Ρύθμιση του περιβάλλοντος ανάπτυξης για ROCm
- Δημιουργία ενός βασικού προγράμματος ROCm που εκτελεί πρόσθεση διανυσμάτων
- Χρήση του ROCm API για ερωτήματα πληροφοριών συσκευής, δέσμευση και αποδέσμευση μνήμης συσκευής, αντιγραφή δεδομένων μεταξύ host και device, εκκίνηση kernels και συγχρονισμό νημάτων
- Χρήση της γλώσσας ROCm C/C++ για τη συγγραφή kernels που εκτελούνται στη συσκευή και χειρίζονται δεδομένα
- Χρήση των ενσωματωμένων συναρτήσεων, μεταβλητών και βιβλιοθηκών του ROCm για την εκτέλεση συνήθων εργασιών και λειτουργιών
- Χρήση των χώρων μνήμης του ROCm, όπως καθολική (global), τοπική (local), σταθερή (constant) και ιδιωτική (private), για βελτιστοποίηση μεταφορών δεδομένων και προσβάσεων μνήμης
- Χρήση του μοντέλου εκτέλεσης του ROCm για τον έλεγχο των νημάτων (threads), των μπλοκ (blocks) και των πλεγμάτων (grids) που ορίζουν τον παραλληλισμό
- Αποσφαλμάτωση και δοκιμή προγραμμάτων ROCm χρησιμοποιώντας εργαλεία όπως το ROCm Debugger και το ROCm Profiler
- Βελτιστοποίηση προγραμμάτων ROCm χρησιμοποιώντας τεχνικές όπως coalescing, caching, prefetching και profiling
Σύγκριση
- Σύγκριση των χαρακτηριστικών, των επιδόσεων και της συμβατότητας των OpenCL, CUDA και ROCm
- Αξιολόγηση προγραμμάτων GPU χρησιμοποιώντας benchmarks και μετρικές
- Εκμάθηση των βέλτιστων πρακτικών και συμβουλών για προγραμματισμό GPU
- Εξερεύνηση των τρεχουσών και μελλοντικών τάσεων και προκλήσεων του προγραμματισμού GPU
Σύνοψη και Επόμενα Βήματα
Απαιτήσεις
- Κατανόηση της γλώσσας C/C++ και εννοιών παράλληλου προγραμματισμού
- Βασικές γνώσεις αρχιτεκτονικής υπολογιστών και ιεραρχίας μνήμης
- Εμπειρία με εργαλεία γραμμής εντολών και επεξεργαστές κώδικα
Κοινό-στόχος
- Προγραμματιστές που επιθυμούν να μάθουν πώς να χρησιμοποιούν διαφορετικά πλαίσια (frameworks) για προγραμματισμό GPU και να συγκρίνουν τα χαρακτηριστικά, τις επιδόσεις και τη συμβατότητά τους
- Προγραμματιστές που επιθυμούν να γράφουν φορητό και κλιμακούμενο κώδικα που μπορεί να εκτελείται σε διαφορετικές πλατφόρμες και συσκευές
- Προγραμματιστές που επιθυμούν να εξερευνήσουν τα αντισταθμίσματα (trade-offs) και τις προκλήσεις του προγραμματισμού GPU και της βελτιστοποίησης