A compiler (142) constructs (FIGS. 14-32) a Reduced Flowgraph (RFG) from
computer source code (144). The RFG is used to instrument (FIG. 36) code
(142). An object module is created (146) and executed (148). Resulting
path frequency counts are written to a counts file (154). A compiler (158)
uses the source code (144) and the generated counts to identify runtime
correlations between successive path edges and Superedges. An object
module (159) is generated containing reordered (156) code generated to
optimize performance based on the runtime correlations. If cloning is
enabled (152), high frequency path edges are cloned (154) or duplicated to
minimize cross edge branching.
Ένας μεταγλωττιστής (142) κατασκευάζει (αριθμοί 14-32) ένα μειωμένο Flowgraph (RFG) από τον κώδικα πηγής υπολογιστών (144). Το RFG χρησιμοποιείται στο όργανο (σχέδιο 36) κώδικας (142). Μια ενότητα αντικειμένου δημιουργείται (146) και εκτελείται (148). Οι προκύπτουσες αριθμήσεις συχνότητας πορειών γράφονται σε ένα αρχείο αριθμήσεων (154). Ένας μεταγλωττιστής (158) χρησιμοποιεί τον κώδικα πηγής (144) και τις παραγμένες αριθμήσεις για να προσδιορίσει τους συσχετισμούς χρόνου εκτέλεσης μεταξύ των διαδοχικών ακρών πορειών και Superedges. Μια ενότητα αντικειμένου (159) παράγεται περιέχοντας τον ξαναπαραγγαλμένο (156) κώδικα που παράγεται για να βελτιστοποιήσει την απόδοση βασισμένη στους συσχετισμούς χρόνου εκτέλεσης. Εάν η κλωνοποίηση επιτρέπεται (152), οι άκρες πορειών υψηλής συχνότητας κλωνοποιούνται (154) ή αναπαράγονται για να ελαχιστοποιήσουν τη διαγώνια διακλάδωση ακρών.