<div dir="ltr"><span style="font-size:13px">+) Επίσης υπάρχει και το αντίστροφο παράδοξο σενάριο είναι να έχουμε:</span><br style="font-size:13px"><br style="font-size:13px"><span style="font-size:13px">ld/st r1, 0 ( address )</span><br style="font-size:13px"><span style="font-size:13px">ld/st r2, 0 ( address&#39; )</span><br style="font-size:13px"><br style="font-size:13px"><span style="font-size:13px">1) να βρίσκεται το block της address&#39; στην cache</span><br style="font-size:13px"><span style="font-size:13px">2) το block της address και της address&#39; στην cache συμπίπτουν</span><br style="font-size:13px"><span style="font-size:13px">Τι συμβαίνει δεδομένου ότι το miss time στο πρώτο είναι 6 και το hit time στο r2 είναι 2?<br></span>Mε την διαπίστωση του miss Θα σβηστεί στον πρώτο χρόνο  ότι υπάρχει στην cache ?<br><br style="font-size:13px"><span style="font-size:13px">Καθώς μεταφέρεται κάτι από τον επεξεργαστή στην cache ταυτόχρονα μεταφέρεται και από την μνήμη στην cache?</span><br style="font-size:13px"><span style="font-size:13px">Πάλι το consistency μου φαίνεται περίεργο.<br></span>___________________________________________________<br>Μάλιστα ένας συνάδελφος μου επισήμανε το εξής φευγαλέο σενάριο:<br><br style="font-size:13px"><span style="font-size:13px">ld/st r1, 0 ( address )</span><br style="font-size:13px"><span style="font-size:13px">ld/st r2, 0 ( address&#39; )</span><br style="font-size:13px"><br style="font-size:13px"><span style="font-size:13px">1) να βρίσκεται το block της address&#39; στην cache σε LRU </span><br style="font-size:13px"><span style="font-size:13px">2) Ας πούμε fully associative cache</span><br style="font-size:13px"><span style="font-size:13px">Τι συμβαίνει δεδομένου ότι το miss time στο πρώτο είναι 6 και το hit time στο r2 είναι 2?<br></span>Mε την διαπίστωση του miss, θα σβηστεί στον πρώτο χρόνο  ότι υπάρχει στην cache ?<br>Γιατί π.χ αν δεν σβηστούν και προλάβει να διαβάσει το r2 ότι θέλει, το LRU θα μετακινηθεί και άρα τα δεδομένα της address θα έπρεπε αλλού να αποθηκευτούν<br>________________________________________________________________________<br><br><br>Ζητούμε συγγνώμη για αυτό το spamming με αυτά τα ακραία σενάρια, αλλά ομολογώ ότι όταν δίνεις περισσότερες ελευθερίες στο σύστημα και παραλληλισμούς superscalar ή pipeline μου φαίνονται κάποια πράγματα αμφίσημα.<br>Να σας επισημάνω δε ότι όλες αυτές οι σκέψεις προκύψαν από λύσεις θεμάτων του tomasulo που φαινόντουσαν ότι κρύβανε κάποιες τέτοιες  παραδοχές.<br><br>Ευχαριστούμε εκ των προτέρων για τον χρόνο σας<br><br>Μ.<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">Στις 7 Ιουλίου 2015 - 5:37 μ.μ., ο χρήστης Εμμανουήλ Βλατάκης-Γκαραγκούνης <span dir="ltr">&lt;<a href="mailto:tetraktida42@gmail.com" target="_blank">tetraktida42@gmail.com</a>&gt;</span> έγραψε:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div><div class="h5"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Ειδικότερα με απασχολεί η superscalar περίπτωση και η pipeline διαχείριση των Load &amp; Stores<br><br><u>SCENARIO</u><br><br>Ας πούμε ότι είμαστε σε απλή non-superscalar αρχιτεκτονική και θέλουμε να εκτελέσουμε τις ακόλουθες δύο εντολές με αλγόριθμο Tomasulo:<br><br>ld r1, 0 (address)<br>ld r2, 1 (address)<br>Ας υποθέσουμε ότι:<br>1) το cache block χωραει από [address+0]...[address+7]<br>2) το block δεν βρίσκεται στην cache, συνεπώς έχουμε miss.<br>5) Hit time = 2, Miss time = 5 <br><br>A)<br>Υποθέτω ότι αν είναι non-pipelined το function unit που χρησιμοποιεί το load τότε αναγκαστικά θα τρέξει μόνο η πρώτη εντολή το EXECUTE και θα κάνει miss ενώ η δεύτερη θα περιμένει και στην συνέχεια θα κάνει hit<br><br>B)<br>Αν τώρα υποθέσουμε ότι είναι pipelined το function unit , η ερώτηση μου είναι τότε η πρώτη και πάλι θα δει miss, και θα διαρκέσει από το 2ο εως  τον 7ο γύρο αλλά η δεύτερη δεν θα δει επίσης το block να βρίσκεται στην cache και εκείνη θα κάνει και εκείνη miss ή στις caches υπάρχει κάποιο πρωτόκολλο στην περίπτωση που προσπαθήσεις να κάνεις read κάτι που βρίσκεται σε διαδικασία μεταφοράς?<br><br>Γιατί αν παράδειγμα :<br>από το 2ο εως το 7ο τρέχει η 1η load<br>από το 3ο εως το 8ο τρέχει 2η load<br>Αρχίζω να αναρωτιέμαι διάφορα πράγματα για το consistency της διαδικασίας...<br><br>Γ)<br>Επίσης σε περίπτωση που έχουμε superscalar αρχιτεκτονική και έχουμε ας πούμε δύο cdb,<br>γράφουν ταυτόχρονα στην cache?<br><br>Δ) <br>Τέλος κάτι ίσως προφανέστερο των παραπάνω.<br>Αν έχουμε 2- superscalar αρχιτεκτονική π.χ και έχουμε δύο data bus, αλλά η μνήμη μας παρέχει ένα port, τότε υποθέτω ότι έχουμε bottleneck και θα αναγκαστεί η μία εκ των δύο load ακόμα και αν είναι για ανεξάρτητα block να περιμένει σωστά?<br><br>Ευχαριστώ πολύ προκαταβολικά<br>Μανόλης.</div>
</blockquote></div><br></div></div>+) Επίσης ένα πάλι παράδοξο σενάριο είναι να έχουμε:<br><br>ld/st r1, 0 ( address )<br>ld/st r2, 0 ( address&#39; )<br><br>1) να βρίσκεται το block της address στην cache<br>2) το block της address και της address&#39; στην cache συμπίπτουν<br>Από απορία τι συμβαίνει δεδομένου ότι το hit time στο πρώτο είναι 2 ή 3 και το miss time στο r2 είναι 5.<br>Καθώς μεταφέρεται κάτι από τον επεξεργαστή στην cache ταυτόχρονα μεταφέρεται και από την μνήμη στην cache?<br>Πάλι το consistency μου φαίνεται περίεργο.</div></div>
</blockquote></div><br></div>