2012-03-28 67 views
0

我知道这是一个家庭作业问题,我不是要求答案。我只想了解这个问题,随时可以使用其他示例来解释。使用块的直接映射缓存

,我需要答案是问题...

Each reference is a read of a 4-byte integer value and is described by the byte 
address of that integer. 

Assuming a 1KB, 16B block, direct-mapped cache, initially empty, fill in whether 
each reference is a hit or a miss. 

我们给出的是4个字节的引用列表。例如0x00000000,0x00000006,...

据我了解,有64块(1024/16),每块是16字节。当它看到第一个参考时,它会是一个错过,它会将它带入缓存。我知道它会引入下一个缓存的引用,因为每个块将保存16个字节。这是否意味着,在一个小姐,它会带来4个参考,因为每个参考是4个字节?

回答

1

是的,你所了解的是正确的。当从存储器中读取一个字节时,时间局部性表明接下来的几个字节也随后被读取。所以缓存通常具有多于1个引用的块大小,在这种情况下是4个引用。在下一次内存访问期间,如果处理器请求下一次引用,则它已经存在于高速缓存中!

存储器地址可以分为两部分:块地址和块偏移量。块偏移将用于在高速缓存的相同块上的这些引用之间进行选择。另一部分,块地址又分为标签和索引字段。索引字段用于选择要访问的集合(在直接映射缓存的情况下,每个缓存块为1集)。标记字段从集合内选择高速缓存块。

1

@shailesh是对的,但要注意这个词,请参考参考模式取决于程序。想象一下,我们编写一个C程序,以16Byte的步幅引用一个char数组。这里是一个愚蠢的程序,将基本上是做:

void foo (char * x, int MAX) { 
    int i; 
    char a; 

    for (i = 0; i < MAX; i += 16) 
      a = x[i]; 
} 

假设x在地址0x00000000。然后该循环将参考地址 0x00000000,0x00000010,0x00000020,0x00000030等等。在这种情况下,在第一次参考x[0],x[0]x[15]之后,由于16B块的大小,将被带入缓存。但是下一个参考,这是x[16]还没有。换句话说,对于这里的缓存,在这个循环中的引用将导致缓存未命中。

您会发现,在优化性能时,考虑机器的缓存组织和行为将有助于避免像这样的糟糕内存访问模式。