如果您在哪里重新安排内存地址缓存位分配,有什么不同吗?

Is there any difference if you where to rearrange the memory address caching bits assignments?

一个有趣的问题是内存地址从标签、缓存索引、偏移量到缓存索引、标签、偏移量的重新排列是否会产生任何差异?如果内存地址的最高有效位现在是缓存索引而不是标记,是否会出现任何重大问题? cpu 如何访问这些位?依次还是一次?

三个因素使得通过更高有效位索引缓存没有吸引力。首先,仅使用更高有效位进行索引往往会增加冲突未命中。空间局部性在粒度大于缓存块大小时很常见(否则适度大小的 TLB 将无效)。例如,任何使用多个缓存块的堆栈帧都会发生冲突,用完关联性,相邻帧也会发生冲突。 (如果空间局部性被限制在缓存块内,TLB 的效率就会低得多。这也会阻止使用“pre-validated”标签——其中 TLB 条目号用于标签——正如几个 Itanium 实现所做的那样;“ Don't use the page number, but a pointer to it”(André Seznec,1996 年)描述了基本概念。)

其次,对于允许同义词的虚拟地址系统(物理页面映射到两个不同的虚拟地址),不能使用仅使用页面偏移量内的位将所有同义词映射到同一组的直接技术。其他技术可用于处理同义词,但通常使用这种方法。

第三,通过使用较低有效位索引缓存,可以在地址计算完成之前开始缓存访问。由于 base+offset 是一种常见的寻址模式,因此通常针对延迟进行了优化。加法从最低有效位开始到最高有效位,因此结果的最低有效位较早可用。