Έργο για προσθήκη υποστήριξης για παραλληλοποίηση της διαδικασίας μεταγλώττισης στο GCC

Στο πλαίσιο ερευνητικού έργου Παράλληλο ΓΚΚ Ξεκίνησαν οι εργασίες για την προσθήκη μιας δυνατότητας στο GCC που επιτρέπει τη διαίρεση της διαδικασίας μεταγλώττισης σε πολλά παράλληλα νήματα. Επί του παρόντος, για να αυξηθεί η ταχύτητα κατασκευής σε συστήματα πολλαπλών πυρήνων, το βοηθητικό πρόγραμμα make χρησιμοποιεί την εκκίνηση ξεχωριστών διαδικασιών μεταγλωττιστή, καθεμία από τις οποίες δημιουργεί ένα ξεχωριστό αρχείο κώδικα. Το νέο έργο πειραματίζεται με την παροχή παραλληλισμού σε επίπεδο μεταγλωττιστή, που ενδεχομένως θα βελτιώσει την απόδοση σε συστήματα πολλαπλών πυρήνων.

Για δοκιμή έτοιμος ένας ξεχωριστός κλάδος παραλληλοποίησης του GCC, ο οποίος προσφέρει μια νέα παράμετρο "—param=num-threads=N" για να ορίσετε τον αριθμό των νημάτων. Στο αρχικό στάδιο, υλοποιήσαμε τη μεταφορά διαδικαστικών βελτιστοποιήσεων σε ξεχωριστά νήματα, τα οποία καλούνται κυκλικά για κάθε συνάρτηση και μπορούν εύκολα να παραλληλιστούν. Οι λειτουργίες GIMPLE που είναι υπεύθυνες για βελτιστοποιήσεις ανεξάρτητες από το υλικό που αξιολογούν την αλληλεπίδραση των συναρτήσεων μεταξύ τους τοποθετούνται σε ξεχωριστά νήματα.

Στο επόμενο στάδιο, σχεδιάζεται επίσης η μετακίνηση διαδικαστικών βελτιστοποιήσεων RTL σε ξεχωριστά νήματα, λαμβάνοντας υπόψη τα χαρακτηριστικά της πλατφόρμας υλικού. Μετά από αυτό, σχεδιάζουμε να εφαρμόσουμε παραλληλοποίηση ενδοδιαδικαστικών βελτιστοποιήσεων (IPA) που εφαρμόζονται στον κώδικα εντός της συνάρτησης, ανεξάρτητα από τις ιδιαιτερότητες της κλήσης. Ο περιοριστικός σύνδεσμος προς το παρόν είναι ο συλλέκτης απορριμμάτων, ο οποίος έχει προσθέσει ένα παγκόσμιο κλείδωμα που απενεργοποιεί τις λειτουργίες συλλογής σκουπιδιών ενώ εκτελείται σε λειτουργία πολλαπλών νημάτων (στο μέλλον ο συλλέκτης απορριμμάτων θα προσαρμοστεί για την εκτέλεση πολλαπλών νημάτων του GCC).

Για την αξιολόγηση των αλλαγών στην απόδοση, έχει ετοιμαστεί μια δοκιμαστική σουίτα που συγκεντρώνει το αρχείο gimple-match.c, το οποίο περιλαμβάνει περισσότερες από 100 χιλιάδες γραμμές κώδικα και 1700 λειτουργίες. Οι δοκιμές σε ένα σύστημα με επεξεργαστή Intel Core i5-8250U με 4 φυσικούς πυρήνες και 8 εικονικούς (Hyperthreading) έδειξαν μείωση του χρόνου εκτέλεσης των βελτιστοποιήσεων Intra Procedural GIMPLE από 7 σε 4 δευτερόλεπτα όταν εκτελούνται 2 νήματα και σε 3 δευτερόλεπτα όταν εκτελούνται 4 νήματα, δηλ. Αύξηση στην ταχύτητα του υπό εξέταση σταδίου συναρμολόγησης επιτεύχθηκε κατά 1.72 και 2.52 φορές, αντίστοιχα. Οι δοκιμές έδειξαν επίσης ότι η χρήση εικονικών πυρήνων με Hyperthreading δεν οδηγεί σε αυξημένη απόδοση.

Έργο για προσθήκη υποστήριξης για παραλληλοποίηση της διαδικασίας μεταγλώττισης στο GCC

Ο συνολικός χρόνος κατασκευής μειώθηκε κατά περίπου 10%, αλλά σύμφωνα με τις προβλέψεις, η παραλληλοποίηση των βελτιστοποιήσεων RTL θα επιτρέψει την επίτευξη πιο απτών αποτελεσμάτων, καθώς αυτό το στάδιο απαιτεί πολύ περισσότερο χρόνο κατά τη μεταγλώττιση. Περίπου μετά την παραλληλοποίηση RTL, ο συνολικός χρόνος συναρμολόγησης θα μειωθεί κατά 1.61 φορές. Μετά από αυτό, θα είναι δυνατό να μειωθεί ο χρόνος κατασκευής κατά άλλο 5-10% παραλληλίζοντας τις βελτιστοποιήσεις IPA.

Έργο για προσθήκη υποστήριξης για παραλληλοποίηση της διαδικασίας μεταγλώττισης στο GCC

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο