| Summary: | Στις μέρες μας οι περισσότεροι επεξεργαστές προκυμένου να εκτελούν μια εντολή ανά-κύκλο ρολογιού βασίζονται στον μηχανισμό μερικώς επικαλυπτόμενων λειτουργίων(pipeline). Δυστυχώς, σε αρκετές περιπτώσεις υπάρχουν εξαρτήσεις που εμποδίζουν την ομαλή λειτουργία του μηχανισμού. Ένα είδος τέτοιων εξαρτήσεων είναι οι διαδικαστικές εξαρτήσεις που προκύπτουν από εντολές διακλάδωσης. Για να επιλύσουμε την συγκεκριμένη εξάρτηση χωρίς να έχουμε κάποια καθυστέρηση σε κύκλους ρολογιού, προβλέπουμε την διεύθυνση της επόμενης προς εκτέλεση εντολής(branch prediction). Σε περίπτωση λανθασμένης πρόβλεψης θα πρέπει να σταματήσουμε την εκτέλεση της εντολής που προσκομίσαμε και να προσκομίσουμε την σωστή. Οι προβλέψεις βασίζονται σε διάφορες μεθόδους και σε αυτή την διπλωματική εργασία αναλύουμε τις βασικές μεθόδους στατικής και δυναμικής πρόβλεψης μαζί με τα σχεδιαγράμματα των κυκλωμάτων τους. Εκτελούμε θεωρητικά ένα μικρό πρόγραμμα που περιέχει εντολές διακλάδωσης, προκειμένου να κατανοήσουμε την λειτουργία του κάθε κυκλώματος. Επιπλέον, έχουμε αναπτύξει σε C++ έναν εξομοιώτη των τεχνικών πρόβλεψης και μέσω αυτού τις συγκρίνουμε χρησιμοποιώντας ένα μεγαλύτερο σύνολο εντολών διακλάδωσης. Συπληρωματικά, έχουμε κάνει σύνθεση τα κυκλώματα ορισμένων τεχνικών στο εργαλείο Design Compiler της Synopsis για να ορίσουμε την μέγιστη συχνότητα λειτουργίας, το εμβαδό και την κατάλωση ισχύος του κυκλώματος.
|