【发布时间】:2017-02-13 09:16:12
【问题描述】:
我正在尝试解决硬件问题,我需要查看以下嵌套循环发生了多少缓存未命中
for i=0; i < 32 ; i++
for j=0; j < 32; j++
sum += arr[i][j];
我有一个完全关联的缓存,它有 16 个缓存行,每个缓存行可以存储 32 个字。缓存最初是空的,arr[0][0] 映射到第一个缓存行
现在根据我的理解,总共会有 32 次未命中。最初,当发出请求时,缓存是空的,因此它被视为未命中,根据完全关联的缓存,所有块都会被填充,然后是 LRU被申请;被应用。
我有点困惑,可以在这里使用一些指导
【问题讨论】:
-
如果
arr是一个普通的多维数组(而不是指针数组或其他东西),那么您的循环只是对内存块的顺序读取。假设 i、j 和 sum 没有溢出到内存中,缓存关联性在这里没有差异;即使是直接映射的缓存也会执行相同的操作。 -
是的,arr 是多维数组
标签: c++ caching memory cpu-architecture