Ευχαριστούμε που στάλθηκε η αποσαφήνισή σας! Ένα μέλος της ομάδου μας θα επικοινωνήσει μαζί σας σύντομα.
Ευχαριστούμε για την εκδήλωση κράτησης! Ένας από τους συνεργάτες μας θα επικοινωνήσει μαζί σας σύντομα.
Διάρκεια 28 Ώρες
Εξέλιξη Κομματιού
Εισαγωγή
- Τι είναι το CUDA;
- CUDA vs OpenCL vs SYCL
- Επισκόπηση των δυνατοτήτων και της αρχιτεκτονικής του CUDA
- Ρύθμιση του Περιβάλλοντος Ανάπτυξης
Έναρξη
- Δημιουργία ενός νέου έργου CUDA χρησιμοποιώντας το Visual Studio Code
- Εξερεύνηση της δομής του έργου και των αρχείων
- Μετατροπή και εκτέλεση του προγράμματος
- Προβολή της εξόδου χρησιμοποιώντας printf και fprintf
CUDA API
- Κατανόηση του ρόλου της CUDA API στο πρόγραμμα host
- Χρήση της CUDA API για να ερωτηθούν πληροφορίες και δυνατότητες συσκευής
- Χρήση της CUDA API για να αποδώσουν και ακυρώσουν μνήμη συσκευής
- Χρήση της CUDA API για να αντιγράψουν δεδομένα μεταξύ host και συσκευής
- Χρήση της CUDA API για να εκτελέσουν kernels και να συγχρονίσουν νήματα
- Χρήση της CUDA API για να διαχειρίζονται σφάλματα και εξαιρέσεις
CUDA C/C++
- Κατανόηση του ρόλου του CUDA C/C++ στο πρόγραμμα συσκευής
- Χρήση του CUDA C/C++ για να γράψουν kernels που εκτελούνται στην GPU και να χειρίζονται δεδομένα
- Χρήση τύπων δεδομένων, προσδιοριστικών, τελεστών και εκφράσεων του CUDA C/C++
- Χρήση ενσωματωμένων συναρτήσεων CUDA C/C++, όπως μαθηματικές, ατομικές, warp, κ.λπ.
- Χρήση ενσωματωμένων μεταβλητών CUDA C/C++, όπως threadIdx, blockIdx, blockDim, κ.λπ.
- Χρήση βιβλιοθηκών CUDA C/C++, όπως cuBLAS, cuFFT, cuRAND, κ.λπ.
Μοντέλο Μνήμης CUDA
- Κατανόηση της διαφοράς μεταξύ των μοντέλων μνήμης host και συσκευής
- Χρήση των χώρων μνήμης CUDA, όπως ολικών, κοινών, σταθερών και τοπικών
- Χρήση αντικειμένων μνήμης CUDA, όπως δείκτες, πίνακες, υφάσματα (textures) και επιφάνειες (surfaces)
- Χρήση λειτουργικών τρόπων πρόσβασης μνήμης CUDA, όπως read-only, write-only, read-write, κ.λπ.
- Χρήση μοντέλου συνέπειας μνήμης CUDA και μηχανισμών συγχρονισμού
Μοντέλο Εκτέλεσης CUDA
- Κατανόηση της διαφοράς μεταξύ των μοντέλων εκτέλεσης host και συσκευής
- Χρήση νημάτων, μπλοκ και πλεγμάτων CUDA για να ορίσουν την παράλληλη εκτέλεση
- Χρήση συναρτήσεων νημάτων CUDA, όπως threadIdx, blockIdx, blockDim, κ.λπ.
- Χρήση συναρτήσεων μπλοκ CUDA, όπως __syncthreads, __threadfence_block, κ.λπ.
- Χρήση συναρτήσεων πλέγματος CUDA, όπως gridDim, gridSync, cooperative groups, κ.λπ.
Αποσφαλμάτωση
- Κατανόηση των συνηθισμένων σφαλμάτων και ελαττωμάτων σε προγράμματα CUDA
- Χρήση αποσφαλμاتور Visual Studio Code για επιθεώρηση μεταβλητών, σημείων διακοπής, στοίβας κλήσεων, κ.λπ.
- Χρήση CUDA-GDB για αποσφαλμάτωση προγραμμάτων CUDA στο Linux
- Χρήση CUDA-MEMCHECK για ανίχνευση σφαλμάτων και διαρροών μνήμης
- Χρήση NVIDIA Nsight για αποσφαλμάτωση και ανάλυση προγραμμάτων CUDA στο Windows
Βελτιστοποίηση
- Κατανόηση των παραγόντων που επηρεάζουν την απόδοση των προγραμμάτων CUDA
- Χρήση τεχνικών συγχώνευσης (coalescing) CUDA για βελτίωση της ροής μνήμης
- Χρήση τεχνικών ταξινόμησης (caching) και προεπιλογής (prefetching) CUDA για μείωση της καθυστέρησης μνήμης
- Χρήση τεχνικών κοινής και τοπικής μνήμης CUDA για βελτιστοποίηση προσβάσεων και bandwidth μνήμης
- Χρήση προφίλ (profiling) και εργαλείων προφίλ CUDA για μέτρηση και βελτίωση χρόνου εκτέλεσης και εκμετάλλευσης πόρων
Απαιτήσεις
- Κατανόηση της γλώσσας C/C++ και των εννοιών παράλληλης προγραμμάτωσης.
- Βασικές γνώσεις αρχιτεκτονικής υπολογιστών και ιεραρχίας μνήμης.
- Εμπειρία με εργαλεία γραμμής ενταλμάτων και επεξεργαστές κώδικα.
Στόχος Κοινό
- Προγραμματιστές που επιθυμούν να μάθουν πώς να χρησιμοποιούν το CUDA για να προγραμματίσουν GPU της NVIDIA και να εκμεταλλευτούν την παράλληλη ικανότητά τους.
- Προγραμματιστές που επιθυμούν να γράψουν κώδικα υψηλής απόδοσης και κλιμάκωσης που μπορεί να εκτελείται σε διάφορες συσκευές CUDA.
- Προγραμματιστές που επιθυμούν να εξερευνήσουν τις χαμηλού επιπέδου πτυχές της προγραμμάτωσης GPU και να βελτιστοποιήσουν την απόδοση του κώδικά τους.