שאלה על cache

white shadow 3

New member
שאלה על cache

נתון הקוד:
קוד:
typedef int array [2][2]

void transpose (array dst, array src) {
 int i,j;
 for (j=0, j<2, j++) {
    for (i=0, i<2, i++) {
       dst [i][j]=src[j][i];
    }
 }
}
ונתונים הדברים הבאים:
קוד:
* sizeof(int)=4
* src array starts at address 0 and dst starts at 16 (decimal)
* there is a single L1 data cache that is direct-mapped and write-allocate,
  with a block size of 8 bytes
* the cache has a total size of 16 data-bytes
אני מבין מכך שבכל בלוק נכנסים לי 2 איברים צמודים של המערך, וסה"כ יש לי 2 בלוקים שיכולים להיכנס ב-cache.
מה שלא כ"כ הבנתי זה איך אני מביא לידי ביטוי את העובדה שה-cache הוא direct-mapped... נניח אני מחלק את ה- cache ל"בלוק 1" ו"בלוק 2" - האם אני מסיק מזה שכל פעם שאני מעלה איברים מהמערך src הם ימופו ל"בלוק 1" וכאשר אני מעלה איברים מהמערך "dst" הם ימופו ל"בלוק 2"?

השאלה המקורית הייתה למלא את הטבלה ולכתוב בכל תא האם יהיה hit או miss..ובתא src [0][1] כתוב בתשובות שיהיה miss ולא כ"כ הבנתי למה..
מה שאני חשבתי זה:
באיטרציה ראשונה j=0 ו-i=0, ננסה לקרוא מ-src 0 0 ולא נצליח לכן תהיה לנו החטאה, ואז יעלה לקאש הבלוק
src 0,0 + src 0,1
לאחר מכן ננסה לכתוב ל-dst 0 0 ותהיה לנו החטאה לכן יעלה לקאש הבלוק
dst 0,0 + dst 0,1

באיטרציה הבאה, j=0 ו-i=1. ננסה לקרוא מ-src 0,1 ולפי מה שכתבתי מקודם הוא כן אמור כבר להיות בקאש


אשמח להבהרה בנושא,
תודה!

 
למעלה