Εξέλιξη Κομματιού
Εισαγωγή στον Υπολογισμό Επιταχυνόμενο από GPU
- Ετερογενής υπολογισμός και αρχιτεκτονική CPU-GPU.
- Χώροι εκτέλεσης και μνήμης του CUDA.
- Μεταγλώττιση κώδικα CUDA C++ με nvcc και CMake.
- Επαλήθευση του περιβάλλοντος ανάπτυξης GPU.
Παράλληλοι Αλγόριθμοι με Thrust και CUB
- Ταξινόμηση, αναγωγή (reduce) και μετασχηματισμός επιταχυνόμενοι από GPU.
- Αναδιαμόρφωση αλγόριθμων STL για εκτέλεση σε GPU.
- Device vectors του Thrust και πολιτικές εκτέλεσης.
- Πρωτόγονα στοιχεία (primitives) καθολικής εμβέλειας συσκευής CUB για εξατομικευμένα pipelines.
Αρχιτεκτονική Μνήμης GPU και Διαχείριση
- Τύποι μνήμης global, constant και texture.
- Εκχωρητική κατανομή μεταφοράς μνήμης συσκευής.
- Unified Memory για απλοποιημένη πρόσβαση στα δεδομένα.
- Συμπλοκή μνήμης (memory coalescing) και βελτιστορία προτύπων πρόσβασης.
Ασύγχρονη Εκτέλεση με CUDA Streams
- Δημιουργία και διαχείριση CUDA streams.
- Επικάλυψη εκτέλεσης kernels με μεταφορές δεδομένων.
- CUDA events για διαχείριση εξαρτήσεων.
- Priorities streams και ρύθμιση συνέλευσης (concurrency).
Συγγραφή Εξατομικευμένων CUDA Kernels
- Το μοντέλο προγραμματισμού SIMT και η εκτέλεση warp.
- Ρύθμιση εκκίνησης kernel και βρόχοι grid-stride.
- Δείκτης νήματος και πολυδιάστατα grids.
- Χειρισμός σφαλμάτων και έλεγχοι API runtime CUDA.
Ιεραρχία Νημάτων και Μοντέλο Εκτέλεσης
- Grids, blocks και νήματα στον κώδικα συσκευής.
- Πρωτόγονα στοιχεία επιπέδου warp και λειτουργίες ballot.
- Συγχρονισμός και φράγματα (barriers) σε επίπεδο block.
- Ανάλυση occupancy και χρήσης πόρων.
Cooperative Groups για Ευέλικτη Παραλληλία
- Το API cooperative_groups και οι τύποι ομάδων.
- Κάτοικοι νημάτων (thread-block tiles) και tiled_partition.
- Εκκινήσεις συντονισμού σε επίπεδο grid.
- Προτύπα συγχρονισμού πολλαπλών grids.
Τεχνικές Βελτιστοποίησης Shared Memory
- Τράπεζες shared memory και αποφυγή συγκρούσεων τραπεζών.
- Στρατηγικές tiling για πράξεις πινάκων.
- Shared memory ως cache διαχειριζόμενο από τον χρήστη.
- cuda::shared_memory_mdspan για πολυδιάστατες όψεις.
Fusion Kernels και Προηγμένα Παράλληλα Πρότυπα
- Ενοποίηση πολλαπλών kernels για τη μείωση του overhead εκκίνησης.
- Scan, reduce-by-key και αλγόριθμοι τμηματοποιημένοι (segmented).
- Λειτουργίες atomic και δομές δεδομένων χωρίς κλειδιά (lock-free).
- Warp-aggregated atomics για throughput.
Profile και Βελτιστοποίηση με Nsight Systems
- Ανάλυση χρονικού γραμμής δραστηριότητας CPU και GPU.
- Εντοπισμός περιορισμών μεταφοράς μνήμης.
- Profile απόδοσης kernels και occupancy.
- Επαναληπτική βελτιστοποίηση με το Nsight Compute.
Σύγχρονα Χαρακτηριστικά C++ στον Κώδικα Συσκευής CUDA
- Lambdas, constexpr και auto στα kernels.
- Παράλληλοι αλγόριθμοι C++17 και πολιτικές εκτέλεσης.
- Concepts και ranges C++20 στη συσκευή.
- Υποστήριξη C++23 στο nvcc και CCCL 3.x.
CUDA Graphs και Προηγμένη Ασύγχρονη Λειτουργία
- Ορισμός και εκκίνηση CUDA graphs.
- Ανάλυση graph από την εκτέλεση stream.
- Ενημέρωση graph και κόμβους συνθηματικής εκτέλεσης.
- Μείωση καθυστέρησης εκκίνησης για επαναληπτικά φορτία εργασίας.
Πρότυπα Ενσωμάτωσης για Υφιστάμενες Εφαρμογές
- Συσκευασία κώδικα GPU πίσω από διεπαφές C++.
- Διαχείριση πολλαπλών GPUs και συστημάτων NUMA.
- Ενσωμάτωση συστήματος κατασκευής με CMake και CUDA.
- Αποσφαλμάτωση κώδικα συσκευής με cuda-gdb.
Σύνοψη και Βέλτιστες Πρακτικές
- Επιλογή μεταξύ Thrust, CUB και εξατομικευμένων kernels.
- Φορητότητα απόδοσης σε αρχιτεκτονικές GPU.
- Οργάνωση κώδικα και RAII για πόρους CUDA.
- Επόμενα βήματα και προχωρημένες διαδρομές μάθησης CUDA.
Απαιτήσεις
- Βασική αρμοδιότητα C++ συμπεριλαμβανομένων των lambda expressions, templates και STL.
- Γνωριμία με τυπικούς αλγόριθμους, containers και iterators.
- Άνεση με βρόχους (loops), συνθήκες (conditionals) και συναρτήσεις.
- Δεν απαιτείται προηγούμενη γνώση CUDA ή GPU προγραμματισμού.
Κοινό Στόχος
- Προγραμματιστές C++ που επιθυμούν να επιταχύνουν εφαρμογές έντονου υπολογιστικού φόρτου με χρήση GPU.
- Μηχανικοί λογισμικού που μεταβαίνουν από προγραμματισμό αποκλειστικά σε CPU προς ετερογενή παράλληλο προγραμματισμό.
- Μηχανικοί απόδοσης και υπολογιστικοί αναλυτές (quantitative developers) που εργάζονται με μεγάλα σύνολα δεδομένων.
Σχόλια (3)
Αρχικά, ο ρυθμός του εκπαιδευτικού φάνηκε λίγο γρήγορος για μένα, αλλά αφού του έδωσα τα σχόλιά μου κατά τη διάρκεια της εκπαίδευσης, το αναγνώρισε και μείωσε τον ρυθμό χωρίς να θυσιάσει τίποτα από το περιεχόμενο. Έχει πολύ καλή σχέση με το κοινό, είναι πολύ φιλικός και ανοιχτός σε συζητήσεις.
Alexandru Ostafi - Siemens
Κομμάτι - Advanced C++ : Practical workshop
Μηχανική Μετάφραση
Λεπτομερής εξήγηση, επανάληψη των σημείων με μια αρκετά χαμηλόφωνη τροπή που οδήγησε πραγματικά στη βελτιστοποίηση της γνώσης. Η διαθεσιμότητα Rod να ελέγξει ακόμη μια φορά τις σύντομες και πολύ κεντρικές ερωτήσεις που θέσαμε, για να είναι 100% βέβαιος ότι τα απαντήματά του ήταν συντελεστικά ορθά. Επιπλέον, το ενδιαφέρον του να συζητήσει για τους πλεονεκτισμούς και αποδυνάμωσης εναλλακτικών μεθόδων προγραμματισμού, ώστε να μάθουμε όχι μόνο πώς να χρησιμοποιήσουμε το C++ με τον επιθυμητό μας τρόπο, αλλά και γιατί θα έπρεπε να το κάνουμε έτσι.
Nick Dillon - cellxica Ltd
Κομμάτι - Using C++ in Embedded Systems - Applying C++11/C++14
Μηχανική Μετάφραση
Η εμπειρία κοινής χρήσης, το γνωστό του δασκάλου και η αξιόλογη γνώση είναι απολύτως αξιόλογες.
Carey Fan - Logitech
Κομμάτι - C/C++ Secure Coding
Μηχανική Μετάφραση