Το OpenMP, εισήχθη το 1996 και από τότε αντιμετωπίζεται ως το πιο δημοφιλές μοντέλο για την δημιουργία παράλληλων προγραμμάτων σε επεξεργαστές μοιραζόμενης μνήμης.
Το OpenMP είναι ακόμα υπο επέκταση. Για να υποστηρίξει τα καινούρια χαρακτηριστικά θα πρέπει να γίνουν αλλαγές και στο front και στο back end. Οι αλλαγές αυτές αφορούν στην αναγνώρηση του καινούριου συντακτικού, καθώς επίσης και στον κώδικα που παράγεται και αξιοποιείται από το runtime system. Για να γίνουν όλα τα παραπάνω στο πλαίσιο αυτής της εργασίας, χρησιμοποιήσαμε τον Mercurium compiler και το Nanos runtime system, τα οποία σχεδιάστηκαν για να υλοποιήσουν καινούριες ιδέες και επεκτάσεις που θέλαμε να υπάρχουν στο OpenMP.
Σε αυτή την εργασία προτείνονται κάποιες επεκτάσεις που επιτρέπουν στο runtime system να εντοπίζει εξαρτήσεις μεταξύ των for loops. Με αυτές τις επεκτάσεις μπορούμε να μειώσουμε τις ενδεχόμενες καθυστερήσεις που προκαλούνται από την άνιση κατανομή του φόρτου εργασίας στα for loops και τελικά να βελτιώσουμε την επίδοση.
OpenMP is an Application Program Interface (API), which was first intro-
duced in 1996 and since then it was adopted as the most popular standard
for shared-memory parallel programing.It provides a portable and scalable
model for the developers of multi-threaded applications.
OpenMP is still in the process of being extended, which means that in
order to support each new feature changes should be done both in the front
and back ends. These changes have to do with the new syntax that appears
as well as the code generation that targets the runtime system. For this
reason and for the needs of this thesis we use the Mercurium compiler and
the Nanos runtime system which are designed to accommodate new concepts
and extensions that we need to add in OpenMP.
In this thesis we propose extensions to allow the runtime detection of
dependencies between for loops. With these extensions we are able to reduce
the delays that are potentially caused from unbalanced workloads in the for
loops and improve performance.