Ευχαριστούμε που στάλθηκε η αποσαφήνισή σας! Ένα μέλος της ομάδου μας θα επικοινωνήσει μαζί σας σύντομα.
Ευχαριστούμε για την εκδήλωση κράτησης! Ένας από τους συνεργάτες μας θα επικοινωνήσει μαζί σας σύντομα.
Εξέλιξη Κομματιού
Εισαγωγή
- Τι είναι η OpenCL;
- OpenCL vs CUDA vs SYCL
- Επισκόπηση των χαρακτηριστικών και της αρχιτεκτονικής της OpenCL
- Ρύθμιση του Περιβάλλοντος Ανάπτυξης
Ξεκινώντας
- Δημιουργία ενός νέου έργου OpenCL χρησιμοποιώντας το Visual Studio Code
- Εξερεύνηση της δομής και των αρχείων του έργου
- Μεταγλώττιση και εκτέλεση του προγράμματος
- Εμφάνιση της εξόδου χρησιμοποιώντας printf και fprintf
OpenCL API
- Κατανόηση του ρόλου του OpenCL API στο πρόγραμμα του host
- Χρήση του OpenCL API για την ανάκτηση πληροφοριών και δυνατοτήτων της συσκευής
- Χρήση του OpenCL API για τη δημιουργία contexts, command queues, buffers, kernels και events
- Χρήση του OpenCL API για την εισαγωγή εντολών, όπως read, write, copy, map, unmap, execute και wait
- Χρήση του OpenCL API για τον χειρισμό σφαλμάτων και εξαιρέσεων
OpenCL C
- Κατανόηση του ρόλου της OpenCL C στο πρόγραμμα της συσκευής
- Χρήση της OpenCL C για τη συγγραφή kernels που εκτελούνται στη συσκευή και χειρίζονται δεδομένα
- Χρήση των τύπων δεδομένων, των qualifiers, των τελεστών και των εκφράσεων της OpenCL C
- Χρήση των ενσωματωμένων συναρτήσεων της OpenCL C, όπως μαθηματικές, γεωμετρικές, σχεσιακές κ.λπ.
- Χρήση των επεκτάσεων και βιβλιοθηκών της OpenCL C, όπως atomic, image, cl_khr_fp16 κ.λπ.
Μοντέλο Μνήμης OpenCL
- Κατανόηση της διαφοράς μεταξύ του μοντέλου μνήμης του host και της συσκευής
- Χρήση των χώρων μνήμης της OpenCL, όπως global, local, constant και private
- Χρήση των αντικειμένων μνήμης της OpenCL, όπως buffers, images και pipes
- Χρήση των τρόπων πρόσβασης μνήμης της OpenCL, όπως read-only, write-only, read-write κ.λπ.
- Χρήση του μοντέλου συνέπειας μνήμης και των μηχανισμών συγχρονισμού της OpenCL
Μοντέλο Εκτέλεσης OpenCL
- Κατανόηση της διαφοράς μεταξύ του μοντέλου εκτέλεσης του host και της συσκευής
- Χρήση των work-items, work-groups και ND-ranges της OpenCL για τον ορισμό της παραλληλίας
- Χρήση των συναρτήσεων work-item, όπως get_global_id, get_local_id, get_group_id κ.λπ.
- Χρήση των συναρτήσεων work-group, όπως barrier, work_group_reduce, work_group_scan κ.λπ.
- Χρήση των συναρτήσεων συσκευής, όπως get_num_groups, get_global_size, get_local_size κ.λπ.
Εντοπισμός Σφαλμάτων
- Κατανόηση των συνηθισμένων σφαλμάτων και bugs σε προγράμματα OpenCL
- Χρήση του debugger του Visual Studio Code για επιθεώρηση μεταβλητών, σημείων διακοπής, στοίβας κλήσεων κ.λπ.
- Χρήση του CodeXL για τον εντοπισμό σφαλμάτων και την ανάλυση προγραμμάτων OpenCL σε συσκευές AMD
- Χρήση του Intel VTune για τον εντοπισμό σφαλμάτων και την ανάλυση προγραμμάτων OpenCL σε συσκευές Intel
- Χρήση του NVIDIA Nsight για τον εντοπισμό σφαλμάτων και την ανάλυση προγραμμάτων OpenCL σε συσκευές NVIDIA
Βελτιστοποίηση
- Κατανόηση των παραγόντων που επηρεάζουν την απόδοση των προγραμμάτων OpenCL
- Χρήση διανυσματικών τύπων δεδομένων και τεχνικών διανυσματοποίησης για τη βελτίωση της αριθμητικής απόδοσης
- Χρήση τεχνικών ξεδιπλώματος βρόχων και χωρισμού βρόχων της OpenCL για τη μείωση του overhead ελέγχου και την αύξηση της τοπικότητας
- Χρήση της τοπικής μνήμης και των συναρτήσεων τοπικής μνήμης της OpenCL για τη βελτιστοποίηση των προσβάσεων μνήμης και του εύρους ζώνης
- Χρήση του profiling και των εργαλείων profiling της OpenCL για τη μέτρηση και τη βελτίωση του χρόνου εκτέλεσης και της χρησιμοποίησης πόρων
Σύνοψη και Επόμενα Βήματα
Απαιτήσεις
- Κατανόηση της γλώσσας C/C++ και των εννοιών παράλληλου προγραμματισμού
- Βασικές γνώσεις αρχιτεκτονικής υπολογιστών και ιεραρχίας μνήμης
- Εμπειρία με εργαλεία γραμμής εντολών και επεξεργαστές κώδικα
Ακροατήριο
- Προγραμματιστές που επιθυμούν να μάθουν πώς να χρησιμοποιούν την OpenCL για τον προγραμματισμό ετερογενών συσκευών και την εκμετάλλευση της παραλληλίας τους
- Προγραμματιστές που επιθυμούν να γράφουν φορητό και κλιμακούμενο κώδικα που μπορεί να εκτελείται σε διαφορετικές πλατφόρμες και συσκευές
- Προγραμματιστές που επιθυμούν να εξερευνήσουν τις χαμηλού επιπέδου πτυχές του ετερογενούς προγραμματισμού και να βελτιστοποιήσουν την απόδοση του κώδικά τους
28 Ώρες