Στοχεύοντας επιταχυντές γραφικών βασισμένους σε CUDΑ μέσω OpenMP
Φόρτωση...
Ημερομηνία
Συγγραφείς
Κασμερίδης, Ηλίας
Τίτλος Εφημερίδας
Περιοδικό ISSN
Τίτλος τόμου
Εκδότης
Πανεπιστήμιο Ιωαννίνων. Πολυτεχνική Σχολή. Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής
Περίληψη
Τύπος
Είδος δημοσίευσης σε συνέδριο
Είδος περιοδικού
Είδος εκπαιδευτικού υλικού
Όνομα συνεδρίου
Όνομα περιοδικού
Όνομα βιβλίου
Σειρά βιβλίου
Έκδοση βιβλίου
Συμπληρωματικός/δευτερεύων τίτλος
Περιγραφή
Τα ετερογενή συστήματα τείνουν να γίνουν τα συνηθέστερα στον κόσμο της παράλληλης επεξεργασίας, με τους επιταχυντές γραφικών (GPUs) να αποτελούν πλέον το δεύτερο βασικό συστατικό τους, μετά τους κύριους επεξεργαστές. Με την εξέλιξη των εξειδικευμένων μονάδες γραφικής επεξεργασίας σε γενικότερου σκοπού, δόθηκε η δυνατότητα χρήσης του γραφικού υλικού από απλούς προγραμματιστές εφαρμογών, μέσω κατάλληλων διεπαφών. Η CUDA είναι ένα παράδειγμα διεπαφής και πλατφόρμας προγραμματισμού υψηλών επιδόσεων, η οποία επιτρέπει στους προγραμματιστές να χρησιμοποιούν τους πυρήνες μιας συσκευής γραφικής επεξεργασίας για γενικούς παράλληλους υπολογισμούς. Όμως, η συγγραφή ενός προγράμματος που κάνει χρήση CUDA είναι μια δύσκολη διαδικασία, καθώς η ετερογένεια του υλικού μεταφράζεται και σε προγραμματιστική ετερογένεια• απαιτούνται δύο ειδών κώδικες, ένας για τους κύριους επεξεργαστές και ένας για τους επιταχυντές γραφικών που υπάρχουν στο σύστημα. Για την αντιμετώπιση προκλήσεων αυτής της φύσης, προγραμματιστικά πρότυπα όπως το OpenMP έχουν εισάγει νέα σύνολα οδηγιών ώστε να γίνεται απρόσκοπτα η συγγραφή ενιαίου κώδικα και η αυτόματη φόρτωση και εκτέλεση τμημάτων του σε συνοδές υπολογιστικές συσκευές. Στην παρούσα εργασία περιγράφεται μία υλοποίηση των οδηγιών αυτών στο πλαίσιο του παραλληλοποιητικού μεταφραστή OMPi, στοχεύοντας επιταχυντές που βασίζονται στο μοντέλο της CUDA. Για την υποστήριξη των οδηγιών, εμπλουτίστηκε το τμήμα μεταγλώττισης του μεταφραστή, το οποίο περιλαμβάνει τη συντακτική ανάλυση των οδηγιών OpenMP και τον μετασχηματισμό τους σε κώδικα C. Επιπλέον, εισήχθησαν βοηθητικές λειτουργίες που αφορούν το αφηρημένο συντακτικό δέντρο του OMPi, μια δενδρική απεικόνιση της συντακτικής δομής του πηγαίου κώδικα χρήστη. Οι λειτουργίες αυτές καθιστούν εύκολη την μελλοντική εισαγωγή νέων οδηγιών ή επέκταση των ήδη υπάρχοντων. Τέλος, δημιουργήθηκε η βιβλιοθήκη υποστήριξης εκτέλεσης CUDADEV, η οποία αποτελεί τη γέφυρα επικοινωνίας μεταξύ του κύριου συστήματος και των επιταχυντών αυτής της κλάσης. Για την CUDADEV, υλοποιήθηκε τόσο η διεπαφή hostpart, η οποία αποτελεί τον πυρήνα της επικοινωνίας κυρίου συστήματος-συσκευής, όσο και το τμήμα devpart, ένα επίπεδο υποστήριξης λειτουργικότητας OpenMP στο εσωτερικό του κώδικα που εκτελείται στη συσκευή. Το τμήμα hostpart της συσκευής CUDADEV, χρησιμοποιεί στο εσωτερικό του τη προγραμματιστική διεπαφή CUDA Driver, για τον χειρισμό μιας μονάδας γραφικής επεξεργασίας CUDA.
Μέσω της εκτέλεσης δοκιμαστικών εφαρμογών σε δύο διαφορετικά συστήματα που διαθέτουν δύο εντελώς διαφορετικές μονάδες γραφικής επεξεργασίας CUDA, επιβεβαιώνεται η ορθότητα των νέων υλοποιήσεων, όπως επίσης και αξιολογούνται οι επιδόσεις τους. Συνεπάγεται ότι η νέα λειτουργικότητα μπορεί να επιτύχει έως και τρεις φορές καλύτερες επιδόσεις, συγκριτικά με την παραλληλοποίηση στον κύριο επεξεργαστή μέσω της αντίστοιχης οδηγίας OpenMP, ενώ για σειριακά προγράμματα, η επιτάχυνση δύναται να φτάσει τις 170 φορές.
Heterogeneous systems tend to become a common place in the world of parallel processing systems, with graphics accelerators (GPUs) now being their second key component, after main processors. With the evolution of graphics processing units into general purpose devices, developers were given the opportunity to use their hardware programmatically, through suitable interfaces. CUDA is an example of a high-performance programming interface and platform that allows developers to use the cores of a graphics processing unit for general parallel computing. However, writing a program that utilizes the CUDA functionality is a difficult process, as hardware heterogeneity translates into programming heterogeneity; two types of code are required, the first one is executed by the main processor and is responsible for any type of device handling, while the second one pertains to the graphics accelerators in the system. To tackle challenges of this nature, high-performance programming standards such as OpenMP have introduced new sets of directives, allowing programmers to write unified code and automatically offload and execute parts of it on computing devices. This work describes an implementation of these directives in the context of the OMPi compiler, targeting accelerators based on the CUDA model. To support the directives, we extended OMPi compiler functionality, which typically includes the analysis of the OpenMP instructions and their transformation to C code. In addition, we introduced some auxiliary features related to the abstract syntax tree, a tree representation of the user source code syntax. These features enable the introduction new directives or the extension of existing ones in the future. Finally, this work presents CUDADEV, a runtime library which enables communication between the host system and graphics accelerators of this class. CUDADEV consists of the hostpart interface, the core of the main processor-device communication, as well as the devpart library that brings OpenMP functionality support within the code running on the device. The hostpart section of the library, utilizes the CUDA Driver API in order to handle the targeted CUDA device. By running different benchmarking applications on two different systems with two completely different CUDA GPUs, we verified the correctness of the new implementations, as well as evaluated their performance. As far as the results are concerned, the new functionality can achieve up to three times better performance than the main processor parallelism through the corresponding OpenMP directive, while for serial programs, the speedup can reach 170 times.
Heterogeneous systems tend to become a common place in the world of parallel processing systems, with graphics accelerators (GPUs) now being their second key component, after main processors. With the evolution of graphics processing units into general purpose devices, developers were given the opportunity to use their hardware programmatically, through suitable interfaces. CUDA is an example of a high-performance programming interface and platform that allows developers to use the cores of a graphics processing unit for general parallel computing. However, writing a program that utilizes the CUDA functionality is a difficult process, as hardware heterogeneity translates into programming heterogeneity; two types of code are required, the first one is executed by the main processor and is responsible for any type of device handling, while the second one pertains to the graphics accelerators in the system. To tackle challenges of this nature, high-performance programming standards such as OpenMP have introduced new sets of directives, allowing programmers to write unified code and automatically offload and execute parts of it on computing devices. This work describes an implementation of these directives in the context of the OMPi compiler, targeting accelerators based on the CUDA model. To support the directives, we extended OMPi compiler functionality, which typically includes the analysis of the OpenMP instructions and their transformation to C code. In addition, we introduced some auxiliary features related to the abstract syntax tree, a tree representation of the user source code syntax. These features enable the introduction new directives or the extension of existing ones in the future. Finally, this work presents CUDADEV, a runtime library which enables communication between the host system and graphics accelerators of this class. CUDADEV consists of the hostpart interface, the core of the main processor-device communication, as well as the devpart library that brings OpenMP functionality support within the code running on the device. The hostpart section of the library, utilizes the CUDA Driver API in order to handle the targeted CUDA device. By running different benchmarking applications on two different systems with two completely different CUDA GPUs, we verified the correctness of the new implementations, as well as evaluated their performance. As far as the results are concerned, the new functionality can achieve up to three times better performance than the main processor parallelism through the corresponding OpenMP directive, while for serial programs, the speedup can reach 170 times.
Περιγραφή
Λέξεις-κλειδιά
Επιταχυντές γραφικών, Παράλληλα συστήματα, Graphics processing units, Parallel systems, CUDA, OpenMP
Θεματική κατηγορία
OpenMP
Παραπομπή
Σύνδεσμος
Γλώσσα
el
Εκδίδον τμήμα/τομέας
Πανεπιστήμιο Ιωαννίνων. Πολυτεχνική Σχολή. Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής
Όνομα επιβλέποντος
Δημακόπουλος, Βασίλειος
Εξεταστική επιτροπή
Δημακόπουλος, Βασίλειος
Μανής, Γεώργιος
Φούντος, Ιωάννης
Μανής, Γεώργιος
Φούντος, Ιωάννης
Γενική Περιγραφή / Σχόλια
Ίδρυμα και Σχολή/Τμήμα του υποβάλλοντος
Πανεπιστήμιο Ιωαννίνων. Πολυτεχνική Σχολή. Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής
Πίνακας περιεχομένων
Χορηγός
Βιβλιογραφική αναφορά
Βιβλιογραφία: σ. 85-87
Ονόματα συντελεστών
Αριθμός σελίδων
198 σ.
Λεπτομέρειες μαθήματος
item.page.endorsement
item.page.review
item.page.supplemented
item.page.referenced
Άδεια Creative Commons
Άδεια χρήσης της εγγραφής: Attribution-NonCommercial-NoDerivs 3.0 United States