A method and apparatus for transforming a source executable code optimized
for a source processor into a target executable code optimized for
execution on a target processor is provided. Initially, the source
executable is converted into a functionally equivalent source executable
capable of execution on the target processor. Next, execution performance
information for each basic block of code in the functionally equivalent
source executable code is collected. Similarly, execution performance
information for each basic block of code in an initial target executable
code is also collected. As a next step, an optimization metric is
generated for each basic block of code within the functionally equivalent
source executable code and for each basic block of code within the initial
target executable code. These optimization metrics are used to compare
basic blocks in the functionally equivalent source executable code with
basic block of code within the initial target executable code. To perform
this comparison, the optimization metric for each basic block of code
within the initial target executable code is associated with the
corresponding optimization metric associated with each basic block of code
within the functionally equivalent source executable code. Next, based
upon the corresponding optimization metric for each basic block, it is
determined which basic blocks of code in the initial target executable
code and the functionally equivalent source executable code have higher
execution performance. Next, a target executable code is generated using a
combination of basic blocks of code from the initial target executable
code and the functionally equivalent source executable code which exhibit
higher execution performance. Then, each basic block in the target
executable code is optimized in a predetermined order typically based upon
the elapsed execution time.
Μια μέθοδος και μια συσκευή για έναν εκτελέσιμο κώδικα πηγής που βελτιστοποιείται για έναν επεξεργαστή πηγής σε έναν εκτελέσιμο κώδικα στόχων που βελτιστοποιείται για την εκτέλεση σε έναν επεξεργαστή στόχων παρέχονται. Αρχικά, η πηγή εκτελέσιμη μετατρέπεται λειτουργικά ισοδύναμο εκτελέσιμο σε έναν ικανό πηγής της εκτέλεσης στον επεξεργαστή στόχων. Έπειτα, οι πληροφορίες εκτέλεσης εφαρμογής για κάθε βασικό φραγμό του κώδικα στο λειτουργικά ισοδύναμο εκτελέσιμο κώδικα πηγής συλλέγονται. Ομοίως, οι πληροφορίες εκτέλεσης εφαρμογής για κάθε βασικό φραγμό του κώδικα σε έναν αρχικό εκτελέσιμο κώδικα στόχων συλλέγονται επίσης. Σαν επόμενο βήμα, μια βελτιστοποίηση μετρική παράγεται για κάθε βασικό φραγμό του κώδικα μέσα στο λειτουργικά ισοδύναμο εκτελέσιμο κώδικα πηγής και για κάθε βασικό φραγμό του κώδικα μέσα στον αρχικό εκτελέσιμο κώδικα στόχων. Αυτές οι μετρικές βελτιστοποίησης χρησιμοποιούνται για να συγκρίνουν τους βασικούς φραγμούς στο λειτουργικά ισοδύναμο εκτελέσιμο κώδικα πηγής με το βασικό φραγμό του κώδικα μέσα στον αρχικό εκτελέσιμο κώδικα στόχων. Για να εκτελέσει αυτήν την σύγκριση, η βελτιστοποίηση μετρική για κάθε βασικό φραγμό του κώδικα μέσα στον αρχικό εκτελέσιμο κώδικα στόχων συνδέεται με την αντίστοιχη βελτιστοποίηση μετρική που συνδέει με κάθε βασικό φραγμό του κώδικα μέσα στο λειτουργικά ισοδύναμο εκτελέσιμο κώδικα πηγής. Έπειτα, βασισμένος στην αντίστοιχη βελτιστοποίηση μετρική για κάθε βασικό φραγμό, καθορίζεται ποιοι βασικοί φραγμοί του κώδικα στον αρχικό εκτελέσιμο κώδικα στόχων και του λειτουργικά ισοδύναμου εκτελέσιμου κώδικα πηγής έχουν την υψηλότερη εκτέλεση εφαρμογής. Έπειτα, ένας εκτελέσιμος κώδικας στόχων παράγεται χρησιμοποιώντας έναν συνδυασμό βασικών φραγμών του κώδικα από τον αρχικό εκτελέσιμο κώδικα στόχων και του λειτουργικά ισοδύναμου εκτελέσιμου κώδικα πηγής που εκθέτουν την υψηλότερη εκτέλεση εφαρμογής. Κατόπιν, κάθε βασικός φραγμός στον εκτελέσιμο κώδικα στόχων βελτιστοποιείται σε μια προκαθορισμένη διαταγή που βασίζεται χαρακτηριστικά στην παρερχόμενη περίοδο εκτέλεσης.