Lab中给出的cache规格为: s=5, E=1, b=5
矩阵A和B在内存中连续存放。
Lab要求分别对32 * 32 , 64 * 64, 61 * 67的矩阵做转置优化,用到的都是将矩阵分块分别转置的方法。相较于普通转置,为什么分块能够优化cache miss次数?
分块是通过什么来实现优化的 — > 通过减少B一次访问的行数。
最根本的原因在于: Cache不能够一次装满整个矩阵,以最小的矩阵32 * 32而言,是4个cache的大小。如果矩阵大小为正好能够装满cache的16 * 16或更小,除了多定义局部变量(Lab中有限制,最多定义12个),分块也起不到优化的效果。
(1)对于s=5, E=1, b=5 Cache(刚好装16*16矩阵)和 16 * 16矩阵常规转置miss情况(蓝色):
miss总数 A + B应该为72次
对角线冲突的原因是A和B对角线上的元素会映射到同一个cache行中,会多出两次miss(从内存中取B,再取A)