摘要: 1、缓存友好的代码 对局部变量的反复引用是好的,因为编译器能够将它们缓存在寄存器文件中(时间局部性)。(内部循环) 步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块(空间局部性)。(通过按照数据对象存储在存储器中的顺序来读数据) 2、使用分块来提高时间局部性 分块的大致思想是将一个程序的数据结构组织成块(block)的组块(chunks)。 <Compute... 阅读全文
posted @ 2011-06-13 23:32 浪里飞 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 1、组相联高速缓存(set associative cache) 1 < E < C/B 2、全相联映射(fully associative cache) E = C/B 因为全相联高速缓存需要并行搜索许多相匹配的行,所以构造相对是困难的;因此只适合做小的高速缓存;如虚拟存储器系统中的TLB,它缓存页表项。 3、写回(write back):尽可能推迟存储器更新,只有当替换算法要驱逐已更新的块时... 阅读全文
posted @ 2011-06-13 15:10 浪里飞 阅读(651) 评论(0) 推荐(0) 编辑
摘要: 1、高速缓存存储结构 注:set(组) 组索引位告诉我们这个字必须存储在那个组中;然后A中t个标记位告诉我们这个组中的那一行(if any)包含这个字;当且仅当设置了有效位并且该行的标记位与地址A中的标记位相匹配时,组中的这一行包含这个字;确定行后,b个块偏移位给出了在B个字节的数据块中的字偏移。 2、直接映射高速缓存 每个组只有一行(E = 1)的高速缓存被称为直接映射高速缓存(direct-mapped cache)。 高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步:组选择,行匹配,字抽取。 如果把高速缓存看作一个关于组的一维数组,那么这些组索引就是一个到这个数组的索. 阅读全文
posted @ 2011-06-13 11:23 浪里飞 阅读(876) 评论(0) 推荐(0) 编辑