深入理解计算机系统 学习笔记(4)

Hello world,hello blog!

Posted by 吴柚 on April 26, 2019

内存和高速缓存的原理

  1. core i7的高速缓存层次结构:只保存指令的高速缓存i-cache,只保存数据的高速缓存叫d-cache。既保存指令又保存数据的成为统一的高速缓存。

  1. 像第一章说的那样高速缓存至关重要,特别是“缓冲区命中”这个技术如果优化好了,速度将会很大改进。下图为高速缓存的物理逻辑图:

  1. 直接映射高速缓存

根据E(高速缓存行)高速缓存被分为不同的类。每个组只有一行(E=1)的高速缓存呗称为直接映射高速缓存 虽然一个整形可能在寄存器中,而整形数组,则可能存在与高速缓存中。

  1. 冲突不命中,可由下例说明:
float dotprod(float x[8], float y[8])
{
    float sum = 0.0;
    int i;
    for(i = 0;i < 8;i++)
        sum += x[i] * y[i];
    return sum;
}

当第一次迭代x[0]时,必定不命中,那么会导致x[0]~x[3]的块被加载到高速缓冲组0,下一次是y[0]的调用,又一次不命中,导致y[0]~y[3]的块被拷贝到组0,从而覆盖前一次x的值。如此迭代,下次x[1]的值继续不命中,继而将x[0]~x[3],覆盖调y[0]~y[3]的值。这种就叫做冲突不命中,也叫”抖动“。本质原因是:x和y数组被映射到同一个组。程序员可以避开这种抖动,但是我觉得编译器应该解决这个问题。