假定某处理器带有一个数据区容量为128B的数据cache,采用直接映射方式,块大小为 32B,主存容量32K。以下C 语言程序段运行在该处理器上,设sizeof(int)=4,编译器将 变量i, j, k, sum都分配在通用寄存器中,因此,只要考虑数组元素的访存情况,假定数 组a 从第一个主存块开始处存放。请回答下列问题: (1)该cache有多少组?主存地址中的标记位、组索引和块偏移字段分别占几位? (2)当k=15 和k=16 时,执行以下程序的过程中,数据访问不命中率分别是多少? int i, j, k,sum; int a[64]; for ( i = 0; i < 100; i++ ){ for ( j = 0; j < 64; j=j+k ){ sum+=a[j]; } }
时间: 2024-03-31 09:32:30 浏览: 15
8051单片机数据传送的方式有哪些
(1) 该cache共有4个组,因为32K / 32B = 1024,而 1024 / 4 = 256,所以该cache共有256个块,每组包含4个块。
主存地址中的标记位需要占用 (32K / 32B) / 4 = 256 / 4 = 64 位,因为一个块大小为32B,所以块偏移字段需要占用5位,剩下的7位用于组索引。
(2) 当k=15时,sum的访问不命中率为 100%,因为数组a被映射到了cache的第一组中,而该组只有4个块,而数组a有64个元素,所以一定会发生冲突不命中。
当k=16时,sum的访问不命中率为 0%,因为数组a的每个元素都被映射到了不同的组中,所以不会发生冲突不命中。
阅读全文