<div dir="ltr">Ευχαριστώ για τις διευκρινίσεις και συγγνώμη που ξαναρωτάω αλλά δεν είμαι 100% σίγουρος ότι έχω καταλάβει σωστά. Όταν κάποιος επεξεργαστής κάνει read miss, θέλει 2 κύκλους για το BusRd και επιπλέον 8 κύκλους για να φέρει το δεδομένο από την κύρια μνήμη ή από την cache του άλλου επεξεργαστή? Και αφού έρθει το block στην cache του θα κάνει ακόμα 1 κύκλο για να ξαναδιαβάσει και να κάνει hit? Δηλαδή θα έχουμε συνολικά 2+8+1 κύκλους ή 2+8?<div><br></div><div>Τέλος, πάνω στο θέμα του load flush που ρώτησε ένας συνάδελφος νωρίτερα, ακόμα δηλαδή κι αν δεν έχει ολοκληρωθεί το EX του load όταν γίνει flush, από τη στιγμή που ξεκινά θεωρούμε ότι αν εμείς αργότερα στον κώδικα κάνουμε access δεδομένα που θα έφερνε αυτό το load στην cache, θα κάνουμε hit?</div><div><br></div><div>Η.Κ.</div></div><div class="gmail_extra"><br><div class="gmail_quote">Στις 8 Σεπτεμβρίου 2014 - 2:44 μ.μ., ο χρήστης Konstantinos Nikas <span dir="ltr">&lt;<a href="mailto:knikas@cslab.ece.ntua.gr" target="_blank">knikas@cslab.ece.ntua.gr</a>&gt;</span> έγραψε:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Καλησπέρα,<br>
<span class=""><br>
&gt;<br>
&gt; Στο θέμα 2ο της εαρινής του 2013 όταν δυο επεξεργαστές έχουν το ίδιο block<br>
&gt; σε κατάσταση shared και το ζητήσει ένας τρίτος, κατάσταση που συμβαίνει για<br>
&gt; την πρόσβαση P3: read 0x00000000, τότε υποθέτουμε ότι ένας από τους άλλους<br>
&gt; δυο θα στείλει το block στον P3?<br>
<br>
</span>Η εκφώνηση είναι σαφής και ορίζει ότι το πρωτόκολλο χρησιμοποιεί<br>
cache-to-cache transfers.<br>
<span class=""><br>
&gt; Κι αν ναι, αυτός που θα το στείλει επιλέγεται στην τύχη?<br>
<br>
</span>Στη συγκεκριμένη περίπτωση ναι (ή ότι άλλο θέλετε να υποθέσετε).<br>
<span class=""><br>
&gt; Επίσης, στην ίδια περίπτωση θα έχουμε μεταφορά προς τη<br>
&gt; μνήμη?<br>
<br>
</span>Εφόσον η κύρια μνήμη είναι updated, για ποιό λόγο να ενημερωθεί ξανά;<br>
<span class=""><br>
<br>
&gt; Όταν κάνουμε miss τότε θέλουμε 8 κύκλους για να φέρουμε το δεδομένο στη<br>
&gt; μνήμη. Μέσα σε αυτούς τους 8 κύκλους θεωρούμε ότι γίνεται και η ανάγνωση του<br>
&gt; δεδομένου από τον επεξεργαστή ή, όπως λέγαμε και στο 5ο εξάμηνο,<br>
&gt; ξαναεκτελείται η εντολή μετά την μεταφορά και κάνει hit, οπότε θέλουμε<br>
&gt; συνολικά 8+1 κύκλους?<br>
<br>
</span>Στο συγκεκριμένο θέμα θεωρούμε ότι οι 2 κύκλοι του BusRdX/BusRd<br>
περιέχουν και το access (το οποίο οδηγεί σε miss και άρα σε bus<br>
transaction). Είναι αλήθεια ότι δεν ήταν πολύ καλά ορισμένο και δόθηκε<br>
διευκρίνιση. Σε άλλα θέματα, η περιγραφή είναι καλύτερη.<br>
<br>
Επομένως το miss παίρνει τουλάχιστον 2 κύκλους. Η συνολική διάρκεια<br>
εξαρτάται από το τι πρέπει να κάνεις με δεδομένα κτλ.<br>
<span class=""><br>
&gt; Όταν δυο διαφορετικά blocks της μνήμης μας κάνουν map στο ίδιο<br>
&gt; cache-line τότε το ένα δεν μπορεί να ακυρώσει το άλλο, ε?<br>
<br>
</span>Νομίζω ότι σε αυτό δεν χρειάζεται να απαντήσω.<br>
<br>
Κ.<br>
<br>
<br>
--<br>
Dr. Konstantinos Nikas<br>
Computing Systems Laboratory<br>
School of Electrical and Computer Engineering<br>
<span class="">National Technical University of Athens<br>
<br>
</span>Tel: <a href="tel:%2B30-210-7724159" value="+302107724159">+30-210-7724159</a><br>
e-mail: <a href="mailto:knikas@cslab.ece.ntua.gr">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><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div><div><font color="#666666">Ilias-Stylianos Karabasis</font></div><font color="#0000ff"><u>+30 6976724404</u></font></div><span style="color:rgb(153,153,153)"><div>Studeng at School of Electrical</div><div>&amp; Computer Engineering</div>National Technical University of Athens</span><div><div><span style="color:rgb(153,153,153)"><br></span></div></div></div>
</div>