Καλημέρα,
1) Θα πρέπει. Αν το block υπάρχει ήδη στη cache, δεν έχει νόημα προφανώς να το φέρεις ξανά.
2) Ναι, αυτή είναι και η λογική του ιδανικού/πετυχημένου prefetching, δηλ. ότι όταν ζητήσει κάτι ο επεξεργαστής αυτό βρίσκεται ήδη στην cache. Για να επιτευχθεί αυτό, ο prefetcher δουλεύει ανεξάρτητα από τον επεξεργαστή και δεν τον μπλοκάρει.
Προφανώς στην πράξη παρατηρούνται διάφορα φαινόμενα, όπως π.χ. το να ζητήσει κάτι ο επεξεργαστής που το έχει ήδη ζητήσει ο prefetcher αλλά δεν έχει φτάσει ακόμα στη cache. Στην περίπτωση αυτή, ο επεξεργαστής θα υποστεί cache miss, αλλά το κόστος σε κύκλους θα είναι προφανώς μικρότερο.
Στο πλαίσιο της άσκησης δεν ασχολούμαστε με αυτές τις περιπτώσεις, παρά μόνο με το ιδανικό σενάριο.
3) Έχετε δίκιο. Όπως εξηγούμε και στην εκφώνηση, ο prefetcher γίνεται triggered σε κάθε L2 miss. Θα διορθωθεί άμεσα το cache.h.
Κ.
2017-03-29 22:29 GMT+03:00 Fotis Xenakis foxen@windowslive.com:
Καλησπέρα,
Έχω τις εξής απορίες σχετικά με το prefetching (γενικά αλλά και σχετικά με την άσκηση):
- Προτού γίνει prefetch κάποιο block στην cache, ελέγχουμε πρώτα αν είναι
ήδη παρόν σε αυτήν; 2) Ισχύει ότι δεν επιφέρει κάποια χρονική επιβάρυνση; (δηλαδή αφότου έρθει το πρώτο block στην cache, ο επεξεργαστής συνεχίζει την εκτέλεση ενόσω έρχονται και τα επόμενα) 3) Στο αρχείο cache.h, ο κώδικας του prefetching δεν θα έπρεπε να βρίσκεται εντός του if (!l2Hit) {...}, αφού κάνουμε prefetch μόνο σε περίπτωση L2 miss;
Ευχαριστώ πολύ
Advcomparch mailing list Advcomparch@lists.cslab.ece.ntua.gr http://lists.cslab.ece.ntua.gr/mailman/listinfo/advcomparch
advcomparch@lists.cslab.ece.ntua.gr