「计算机组成原理」:高速缓存存储器( 五 )


如上图所示是使用分块技术实现的矩阵乘法 , 将矩阵乘法分解为若干个BxB小矩阵的乘法 , 每次能将一个BxB的小矩阵加载到缓存中 。
每一次迭代就计算C中一个BxB大小的块 , 我们分析每一次迭代的不命中次数
「计算机组成原理」:高速缓存存储器文章插图
每个块有 B^{2} /8B2??/8 次不命中次数 , 而每一行每一列有n/B个块 , 所以计算一次C中的一个块会有 次不命中 , 则一共会有 nB/4 \times {(n/B)}^{2} = n^{3}/(4B), 我们就能调整B的大小来减小不命中率 。
分块降低不命中率是因为加载一个块后 , 就反复使用该块 , 提高了空间局部性 。
【「计算机组成原理」:高速缓存存储器】分块技术的介绍:建议:

  • 将注意力集中在内循环中 , 因为大部分的计算和内存访问都集中在这里
  • 按照数据对象存储在内存中的顺序 , 以步长为1来读数据 , 使得空间局部性最大 。 比如步长为2的命中率就比步长为1的命中率降低一半 。
  • 一旦从存储器读入一个数据对象时 , 就尽可能使用它 , 使得时间局部性最大 。 特别是局部变量 , 编译器会将其保存在寄存器中 。

「计算机组成原理」:高速缓存存储器文章插图