<div dir="ltr">Καλησπέρα,<div><br></div><div>από ότι καταλαβαίνω έχει δημιουργηθεί μια παρεξήγηση όσον αφορά την αναδιάταξη των εντολών. </div><div><br></div><div>Η αναδιάταξη λοιπόν των εντολών μνήμης επιτρέπεται καταρχάς εφόσον δεν επηρεάζονται τα data dependencies.  Για να κατανοήσετε καλύτερα το τί γίνεται, φανταστείτε έναν out-of-order επεξεργαστή, στα LD/ST queues του οποίου μπαίνουν οι αντίστοιχες εντολές μνήμης. Είναι προφανές, ότι τυχόν αναδιάταξη μπορεί να αφορά μόνο εντολές που είναι έτοιμες να εκτελεστούν (να πάνε στη μνήμη)! Έτσι στην περίπτωση:</div>
<div><br></div><div>lw r4, 0(r8)</div><div>sw r4, 0(r9) </div><div><div class="gmail_extra"><br></div><div class="gmail_extra">η 2η εντολή ποτέ δε θα είναι έτοιμη πριν εκτελεστεί η πρώτη και άρα δεν πρόκειται να αναδιαταχθεί. Για τις εντολές τώρα που είναι έτοιμες να πάνε στη μνήμη, η αναδιάταξη επιτρέπεται μόνο μεταξύ αυτών που πηγαίνουν σε διαφορετική θέση της μνήμης. Δηλαδή στον κώδικα:</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">sw r1, 0(r8)</div><div class="gmail_extra">sw r2, 0(r8)</div><div class="gmail_extra"><br></div><div class="gmail_extra">δεν επιτρέπεται η αναδιάταξη.</div><div class="gmail_extra">
<br></div><div class="gmail_extra">Όσον αφορά τα control dependencies τα πράγματα δεν είναι απόλυτα ξεκάθαρα, μιας και δεν εξαρτώνται από το memory model αλλά από την υλοποίηση σε κάθε επεξεργαστή. π.χ. για τον κώδικα:</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">while (flag == 0) continue;</div><div class="gmail_extra">assert (x == 1);</div><div class="gmail_extra"><br></div><div class="gmail_extra">o Power επεξεργαστής σέβεται το control dependence και δεν επιτρέπει την αναδιάταξη (βάζοντας ένα implicit barrier ανάμεσα στις 2 εντολές) ενώ ο ARM δεν το σέβεται και μπορεί να αναδιατάξει τις εντολές (κάτι που ισχύει και στα περισσότερα σύγχρονα συστήματα). Εμείς γενικά θεωρούμε ότι ισχύει το 2ο, δηλαδή στον κώδικα</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">while (flag == 0) ;</div><div class="gmail_extra">print A;</div><div class="gmail_extra"><br></div><div class="gmail_extra">μπορεί να υπάρξει αναδιάταξη. Σκεφτείτε το πάλι ως εξής. Έχετε έναν οut-of-order processor, ο οποίος κάνει branch predicition και &quot;τυχαίνει&quot; το prediction να λέει ότι το branch θα είναι NT (δε θα εκτελεστεί δηλαδή ξανά το loop). Αυτό έχει σαν αποτέλεσμα να μπαίνουν κάθε φορά στο LD queue τα load flag, load A τα οποία και μπορούν να αναδιαταχθούν μιας και πάνε σε διαφορετικές διευθύνσεις. Προφανώς σε κάθε λάθος prediction, κάνεις flush το LD queue, όταν όμως το prediction στο τελευταίο iteration θα είναι σωστό, τότε μπορεί να έχει διαβαστεί το A πριν να διαβάσεις ότι flag!=0.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Κ.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">
2013/7/1 Σαρρής θεόδωρος <span dir="ltr">&lt;<a href="mailto:el09148@mail.ntua.gr" target="_blank">el09148@mail.ntua.gr</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Γεια σας. Με ποιο τρόπο σέβεται ο επεξεργαστής τα data και control dependecies; Γιατί αν σέβεται τα data hazards πρέπει σε ένα (1a)A=1 (1b)Print A να μην θεωρούμε εφικτό 1b-&gt;1a γιατί είναι RAW hazard. Ομοίως για τα control dependecies (1a)While (A==0) ; (1b)Print A πρέπει να μην θεωρούμε εφικτό 1b-&gt;1a. Από τις διαφάνειες και τα παλιά θέματα εγώ έχω καταλάβει ότι στα δύο παραδείγματα που ανέφερα το RMO επιτρέπει αυτές τις αναδιατάξεις.<br>

Ευχαριστώ,<br>
Σαρρής Θεόδωρος<br>
<br>
<br>
On Mon, 1 Jul 2013 15:04:40 +0300, Konstantinos Nikas wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Καλησπέρα,<br>
<br>
Στο συγκεκριμένο παράδειγμα που<br>
αναφέρεις, το block παραμένει στο Ι παρά<br>
το PrWr γιατί η cache είναι write-no-allocate.<br>
Δηλαδή αν κάνει write miss, δεν κάνει allocate<br>
το block στην cache.<br>
<br>
Για το δεύτερο ερώτημα, καταρχάς<br>
αναφερόμαστε σε κάποιο από τα μοντέλα<br>
που παρουσιάστηκαν στο μάθημα. Κατά<br>
δεύτερον, τα consistency models ασχολούνται<br>
μόνο με τη σειρά των memory εντολών. Οι<br>
τυχόν αναδιατάξεις των υπόλοιπων<br>
εντολών είναι θέμα του επεξεργαστή<br>
και δεν έχει σχέση με το coherence/consistency. <br>
<br>
Βέβαια, ακόμα και το πλέον relaxed memory order,<br>
δε σημαίνει ότι επιτρέπονται όλες οι<br>
πιθανές αναδιατάξεις. Μη ξεχνάτε ότι ο<br>
επεξεργαστής εξακολουθεί και σέβεται<br>
τα data και control dependencies!<br>
<br>
Κ.<br>
<br>
2013/6/29 Ανδρέας Παντελόπουλος<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Καλησπέρα,στο FSM του simple V/I protocol<br>
(διαφ.30) παρατηρώ ότι με PrWr στην Ι<br>
ξαναγυρνάει στην κατάσταση Ι.<br>
Κανονικά δεν θα έπρεπε να γίνεται<br>
μετάβαση στην κατάσταση V ?<br>
<br>
Επίσης,στην θεωρητική άσκηση της 3ης<br>
σειράς αναφέρεστε στο &quot;πλέον relaxed memory<br>
order&quot;.Τι σημαίνει αυτό ακριβώς? Στην<br>
ουσία οποιαδήποτε αναδιάταξη<br>
εντολών ή αναδιάταξη εντολών που<br>
επιτελούν λειτουργίες μνήμης ?<br>
<br>
Ευχαριστώ πολύ.<br>
______________________________<u></u>_________________<br>
Advcomparch mailing list<br>
<a href="mailto:Advcomparch@lists.cslab.ece.ntua.gr" target="_blank">Advcomparch@lists.cslab.ece.<u></u>ntua.gr</a> [1]<br>
<a href="http://lists.cslab.ece.ntua.gr/mailman/listinfo/advcomparch" target="_blank">http://lists.cslab.ece.ntua.<u></u>gr/mailman/listinfo/<u></u>advcomparch</a> [2]<br>
</blockquote>
<br>
--<br>
Dr. Konstantinos Nikas<br>
Computing Systems Laboratory<br>
School of Electrical and Computer Engineering<br>
National Technical University of Athens<br>
<br>
Tel: <a href="tel:%2B30-210-7724159" value="+302107724159" target="_blank">+30-210-7724159</a><br>
 e-mail: <a href="mailto:knikas@cslab.ece.ntua.gr" target="_blank">knikas@cslab.ece.ntua.gr</a> [4]<br>
<a href="http://www.cslab.ece.ntua.gr/~knikas" target="_blank">http://www.cslab.ece.ntua.gr/~<u></u>knikas</a> [5]<br>
<br>
Links:<br>
------<br>
[1] mailto:<a href="mailto:Advcomparch@lists.cslab.ece.ntua.gr" target="_blank">Advcomparch@lists.<u></u>cslab.ece.ntua.gr</a><br>
[2] <a href="http://lists.cslab.ece.ntua.gr/mailman/listinfo/advcomparch" target="_blank">http://lists.cslab.ece.ntua.<u></u>gr/mailman/listinfo/<u></u>advcomparch</a><br>
[3] mailto:<a href="mailto:padelopoulos@gmail.com" target="_blank">padelopoulos@gmail.com</a><br>
[4] mailto:<a href="mailto:knikas@cslab.ece.ntua.gr" target="_blank">knikas@cslab.ece.ntua.<u></u>gr</a><br>
[5] <a href="http://www.cslab.ece.ntua.gr/~knikas" target="_blank">http://www.cslab.ece.ntua.gr/~<u></u>knikas</a><br>
</blockquote>
<br>
______________________________<u></u>_________________<br>
Advcomparch mailing list<br>
<a href="mailto:Advcomparch@lists.cslab.ece.ntua.gr" target="_blank">Advcomparch@lists.cslab.ece.<u></u>ntua.gr</a><br>
<a href="http://lists.cslab.ece.ntua.gr/mailman/listinfo/advcomparch" target="_blank">http://lists.cslab.ece.ntua.<u></u>gr/mailman/listinfo/<u></u>advcomparch</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Dr. Konstantinos Nikas<br>Computing Systems Laboratory<br>School of Electrical and Computer Engineering<br>National Technical University of Athens<br><br>Tel: +30-210-7724159<br>
e-mail: <a href="mailto:knikas@cslab.ece.ntua.gr" target="_blank">knikas@cslab.ece.ntua.gr</a><br><a href="http://www.cslab.ece.ntua.gr/~knikas" target="_blank">http://www.cslab.ece.ntua.gr/~knikas</a>
</div></div></div>