2014-11-04 63 views
0

我想了解緩存內存如何讀寫。另外我正在試圖確定命中率和命中率。我一遍又一遍地嘗試閱讀和閱讀教科書「計算機系統 - 程序員的觀點」,似乎無法理解這個想法。也許有人可以幫助我理解這一點:瞭解緩存內存

我正在使用一個具有480行640列的二維數組。高速緩存是直接映射的,具有4字節行的64 KB。下面是C語言代碼:

struct pixel { 
char r; 
char g; 
char b; 
char a; 
}; 
struct pixel buffer[480][640]; 
register int i, j; 
register char *cptr; 
register int *iptr; 

的sizeof(char)的== 1(意味着索引在陣列由每個4字節(如果我正確理解是))。緩衝區從內存地址0開始,緩存最初爲空(冷緩存)。唯一的內存訪問是數組的條目。所有其他變量都存儲在寄存器中。

for (j=0; j < 640; j++) { 
for (i=0; i < 480; i++){ 
buffer[i][j].r = 0; 
buffer[i][j].g = 0; 
buffer[i][j].b = 0; 
buffer[i][j].a = 0; 
} 
} 

對於上面的代碼,它將數組中的所有元素初始化爲0,所以它必須寫入。我可以看到這是不好的局部性,因爲數組是逐列寫入而不是逐行寫入。這不影響錯過率嗎?我正在嘗試根據緩存大小確定此代碼的未命中率。我認爲錯過率是100%,如果地方是一排一排,那麼它將是25%。但是我並不完全理解緩存是如何工作的......所以有誰能告訴我一些可以幫助我更好地理解這一點的東西?

回答