Κεφάλαιο 2 | Ενότητα3 | Ερωτήσεις επισκόπησης | Επόμενο| Λεξικό όρων

Εξαρτήσεις ελέγχου

   H εξάρτηση ελέγχου καθορίζει τη σειρά εκτέλεσης μιας εντολής, λαμβάνοντας υπόψη την εντολή διακλάδωσης, έτσι ώστε η εντολή να εκτελείται μόνο όταν είναι απαραίτητο.

Παράδειγμα

Ένα απλό παράδειγμα εξάρτησης ελέγχου είναι το τμήμα then ενός βρόχου if. Έστω το παρακάτω τμήμα κώδικα :

if p1 {

S1;
};
if p2 { S2;
};

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 1

· Μπορείτε να αναγνωρίσετε ποιες εντολές έχουν εξάρτηση ελέγχου από συνθήκες στον κώδικα του παραδείγματος;
· Να περιγράψετε τους περιορισμούς που αφορούν στις εξαρτήσεις ελέγχου.
· Θεωρείτε πως μπορούμε να αλλάξουμε τη σειρά των εντολών; Να αιτιολογήσετε την απάντησή σας.

 

ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 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
LW R1, 0 (R2)
L1:

Απάντηση:

Η LW όταν εκτελεστεί πιθανώς να προκαλέσει παραβίαση προστασίας μνήμης. Εάν η εντολή BEQZ ακολουθείται η LW δεν θα εκτελεστεί. Η εξάρτηση δεδομένων δεν μας εμποδίζει να μεταφέρουμε την εντολή LW πριν την εντολή BEQZ, παρά μόνο η εξάρτηση ελέγχου. Αγνοώντας λοιπόν, την εξάρτηση ελέγχου μεταφέρουμε την εντολή LW πριν την εντολή BEQZ. Σε αυτή την περίπτωση η εντολή LW θα εκτελείται πάντα προκαλώντας πιθανώς διακοπή (ή εξαίρεση).

Η ροή δεδομένων είναι η πραγματική ροή δεδομένων μεταξύ των εντολών.
Οι διακλαδώσεις επιτρέπουν στα δεδομένα μιας εντολής να προέρχονται από πολλά σημεία, με αποτέλεσμα να καθιστούν δυναμική τη ροή δεδομένων.

Παράδειγμα

Θεωρούμε το παρακάτω τμήμα κώδικα.

ADD R1, R2, R3
BEQZ R4, L
SUB R1 , R5 , R6
L1:    OR R7 , R1 , R8

Απάντηση:

Η τιμή του R1, που χρησιμοποιείται από την εντολή OR, εξαρτάται από το εάν η συνθήκη διακλάδωσης αληθεύει ή όχι. Μόνο η εξάρτηση δεδομένων δεν επαρκεί για την εξασφάλιση της ορθότητας του προγράμματος. Αν η συνθήκη διακλάδωσης δεν αληθεύει, τότε εκτελείται η εντολή SUB και η τιμή του R1 που υπολογίστηκε στην εντολή SUB θα χρησιμοποιηθεί από την εντολή OR. Αν αληθεύει, τότε εκτελείται η εντολή OR και η τιμή του R1 που υπολογίστηκε στην εντολή ADD θα χρησιμοποιηθεί από την εντολή OR. Διατηρώντας την εξάρτηση ελέγχου της εντολής SUB από την εντολή διακλάδωσης (δεν μετακινείται η εντολή SUB), αποτρέπεται κάποια παράνομη αλλαγή στη ροή των δεδομένων.

Μερικές φορές, η παραβίαση της εξάρτησης ελέγχου δεν έχει επίδραση ούτε στη διαχείριση διακοπών ούτε στη ροή δεδομένων.

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 3

Έστω το παρακάτω τμήμα κώδικα:

               ADD R1 , R2 , R3
               BEQZ R12 , skipnext
               SUB R4 , R5 , R6
               ADD R5 , R4 , R9
skipnext: OR R7 , R8 , R9
Μπορείτε να εξηγήσετε τον τρόπο με τον οποίο θα εκτελεστούν οι εντολές;

 

ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 3



Η μορφή προγραμματισμού που χρησιμοποιήθηκε για την απάντηση της δραστηριότητας 3 λέγεται υπόθεση,αφού ουσιαστικά ο μεταγλωττιστής ποντάρει στο αποτέλεσμα της διακλάδωσης.
Η ιδιότητα που καθορίζει κατά πόσον η τιμή ενός καταχωρητή θα χρησιμοποιηθεί από επόμενη εντολή λέγεται ζωτικότητα.

Η εξάρτηση ελέγχου διατηρείται πραγματοποιώντας ανίχνευση των κινδύνων ελέγχου, οι οποίοι προκαλούν καθυστερήσεις ελέγχου. Οι καθυστερήσεις ελέγχου εξαλείφονται ή περιορίζονται με διάφορες τεχνικές.