Μια αλλαγή μίας γραμμής στο GCC είχε ως αποτέλεσμα επιτάχυνση 12% σε μία δοκιμή και επιβράδυνση 14% σε μια άλλη.

Ένας μηχανικός της Intel πραγματοποίησε μια αλλαγή μίας γραμμής στη σουίτα μεταγλωττιστών GCC, η οποία αυξάνει το βάρος των λανθασμένων προβλέψεων κλάδων σε επεξεργαστές x86. Αυτή η αλλαγή αύξησε την απόδοση του παραγόμενου κώδικα κατά την ολοκλήρωση του δοκιμίου αξιολόγησης 544.nab_r κατά 12.7% κατά την ενεργοποίηση των βελτιστοποιήσεων "-O2 -mtune=graniterapids" σε CPU Intel Granite Rapids/Xeon 6 και κατά 12.1% κατά την ενεργοποίηση των βελτιστοποιήσεων "-O2 -mtune=znver5" σε CPU AMD Zen5.

Η αλλαγή του βάρους από "COSTS_N_INSNS (2)" σε "COSTS_N_INSNS (2) + 3" αυξάνει τη σημασία μιας λανθασμένης πρόβλεψης από 2 σε 5 εντολές υπό όρους, αντανακλώντας καλύτερα τις ιδιαιτερότητες των σύγχρονων αγωγών CPU, όπου οι λανθασμένες προβλέψεις διακλάδωσης είναι πιο δαπανηρές. Αυτή η αλλαγή στο βάρος αναγκάζει τον μεταγλωττιστή να μετατρέψει τις εντολές "if" σε εντολές υπό όρους χωρίς διακλάδωση, όπως η CMOV, η οποία εξαλείφει τις καθυστερήσεις στην λανθασμένη πρόβλεψη διακλάδωσης που προκαλούνται από την ανάγκη εκκαθάρισης του αγωγού. Προηγουμένως, το βάρος "COSTS_N_INSNS (2) + 3" καθοριζόταν στο GCC μόνο για τους επεξεργαστές Intel Ice Lake και Alder Lake, αλλά τώρα έχει οριστεί για το γενικό προφίλ των επεξεργαστών x86.

Αξίζει να σημειωθεί ότι, μετά την αποδοχή της ενημέρωσης κώδικα, προέκυψε μια παλινδρόμηση, με αποτέλεσμα το benchmark "Hint" να τρέχει 30% πιο αργά για έναν προγραμματιστή του GCC κατά την κατασκευή με τις επιλογές "-march=generic -mtune=znver5" και "-march=generic -mtune=graniterapids". Η απόδοση των benchmark SPEC2017 και SPEC2026 παρέμεινε αμετάβλητη μετά την αλλαγή. Η παλινδρόμηση επιβεβαιώθηκε από τον αρχικό committer, ο οποίος ανέφερε επιβράδυνση 14% στο benchmark Hint κατά την κατασκευή με τις επιλογές "-O2 -mtune=generic -march=x86-64-v3".

Η επιβράδυνση εξηγείται από το γεγονός ότι ο κώδικας αναφοράς Hint περιέχει μόνο μία υπό όρους κατασκευή, την οποία το GCC μετατρέπει σε αναπαράσταση βασισμένη σε CMOV. Αυτή η κατασκευή εκτελείται αρκετά σπάνια (3%), και η βελτιστοποίησή της δεν επηρεάζει την απόδοση. Ωστόσο, η αλλαγή της λειτουργίας δημιουργίας κώδικα είχε ως παρενέργεια την επιβράδυνση της εκτέλεσης κώδικα που εκτελείται συχνότερα.

Πηγή: opennet.ru

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster