H εξάρτηση ελέγχου καθορίζει τη σειρά εκτέλεσης μιας εντολής, λαμβάνοντας υπόψη την εντολή διακλάδωσης, έτσι ώστε η εντολή να εκτελείται μόνο όταν είναι απαραίτητο.
Παράδειγμα
Ένα απλό παράδειγμα εξάρτησης ελέγχου είναι το τμήμα then ενός βρόχου if. Έστω το παρακάτω τμήμα κώδικα :
if p1 {
S1; if p2 {
};S2;
};
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 1
Είναι δυνατόν μερικές φορές, αυτοί οι περιορισμοί και οι καθυστερήσεις που αφορούν στις εντολές του παραδείγματος, να παραβιαστούν, χωρίς όμως να έχουμε λάθος εκτέλεση.
Στη συνέχεια θα μελετήσουμε τον τρόπο με τον οποίο οι εξαρτήσεις ελέγχου περιορίζουν το βαθμό της παραλληλίας.
Παράδειγμα
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 2
· Να εκτελέσετε των κώδικα του παραδείγματος χρησιμοποιώντας το λογισμικό προσομοίωσης του DLX, Windlx, το οποίο παρατίθεται στις ιστοσελίδες:
http://www.gup.uni-linz.ac.at/downloads/ti3/windlx
http://www.mkp.com/pub/dlx
· Να συγκρίνετε την απάντηση του παραδείγματος με τα αποτελέσματα από τη χρήση του λογισμικού προσομοίωσης Windlx.
· Για περισσότερες λεπτομέρειες καλό θα ήταν να συμβουλευόσασταν το παράρτημα Α: «Εργαλεία Προσομοίωσης του DLX».
Η εξάρτηση ελέγχου διατηρείται λόγω δύο ιδιοτήτων των απλών σωληνώσεων, χωρίς όμως να παίζει καθοριστικό ρόλο.
Υπάρχουν δύο ιδιότητες που παίζουν σημαντικό ρόλο στην σωστή εκτέλεση του προγράμματος. Αυτές είναι, η διαχείριση διακοπών (εξαιρέσεων) και η ροή δεδομένων οι οποίες διαφυλάσσονται από την εξάρτηση ελέγχου.
Με τον όρο διαχείριση διακοπών, συνήθως εννοούμε ότι οποιεσδήποτε αλλαγές στη σειρά εκτέλεσης των εντολών δεν πρέπει να προκαλούν την εμφάνιση νέων διακοπών στο πρόγραμμα.
Στη συνέχεια θα δείξουμε πως μπορούμε να αποφύγουμε τέτοιες περιπτώσεις διατηρώντας τις εξαρτήσεις ελέγχου.
Θεωρούμε το παρακάτω τμήμα κώδικα ακολουθίας εντολών, όπου οι διακλαδώσεις εκτελούνται χωρίς καθυστέρηση.
BEQZ R2, L1 L1:
LW R1, 0 (R2)
Απάντηση:
Η LW όταν εκτελεστεί πιθανώς να προκαλέσει παραβίαση προστασίας μνήμης. Εάν η εντολή BEQZ ακολουθείται η LW δεν θα εκτελεστεί. Η εξάρτηση δεδομένων δεν μας εμποδίζει να μεταφέρουμε την εντολή LW πριν την εντολή BEQZ, παρά μόνο η εξάρτηση ελέγχου. Αγνοώντας λοιπόν, την εξάρτηση ελέγχου μεταφέρουμε την εντολή LW πριν την εντολή BEQZ. Σε αυτή την περίπτωση η εντολή LW θα εκτελείται πάντα προκαλώντας πιθανώς διακοπή (ή εξαίρεση).
Η ροή δεδομένων είναι η πραγματική ροή δεδομένων μεταξύ των εντολών.
Οι διακλαδώσεις επιτρέπουν στα δεδομένα μιας εντολής να προέρχονται από πολλά σημεία, με αποτέλεσμα να καθιστούν δυναμική τη ροή δεδομένων.
Θεωρούμε το παρακάτω τμήμα κώδικα.
ADD R1, R2, R3 L1: OR R7 , R1 , R8
BEQZ R4, L
SUB R1 , R5 , R6
Απάντηση:
Η τιμή του R1, που χρησιμοποιείται από την εντολή OR, εξαρτάται από το εάν η συνθήκη διακλάδωσης αληθεύει ή όχι. Μόνο η εξάρτηση δεδομένων δεν επαρκεί για την εξασφάλιση της ορθότητας του προγράμματος. Αν η συνθήκη διακλάδωσης δεν αληθεύει, τότε εκτελείται η εντολή SUB και η τιμή του R1 που υπολογίστηκε στην εντολή SUB θα χρησιμοποιηθεί από την εντολή OR. Αν αληθεύει, τότε εκτελείται η εντολή OR και η τιμή του R1 που υπολογίστηκε στην εντολή ADD θα χρησιμοποιηθεί από την εντολή OR. Διατηρώντας την εξάρτηση ελέγχου της εντολής SUB από την εντολή διακλάδωσης (δεν μετακινείται η εντολή SUB), αποτρέπεται κάποια παράνομη αλλαγή στη ροή των δεδομένων.
Μερικές φορές, η παραβίαση της εξάρτησης ελέγχου δεν έχει επίδραση ούτε στη διαχείριση διακοπών ούτε στη ροή δεδομένων.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 3
Η μορφή προγραμματισμού που χρησιμοποιήθηκε για την απάντηση της δραστηριότητας 3 λέγεται υπόθεση,αφού ουσιαστικά ο μεταγλωττιστής ποντάρει στο αποτέλεσμα της διακλάδωσης.
ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 3
Η ιδιότητα που καθορίζει κατά πόσον η τιμή ενός καταχωρητή θα χρησιμοποιηθεί από επόμενη εντολή λέγεται ζωτικότητα.
Η εξάρτηση ελέγχου διατηρείται πραγματοποιώντας ανίχνευση των κινδύνων ελέγχου, οι οποίοι προκαλούν καθυστερήσεις ελέγχου. Οι καθυστερήσεις ελέγχου εξαλείφονται ή περιορίζονται με διάφορες τεχνικές.
![]() |
![]() |
![]() |
![]() |