某程序中有如下循环代码段p“for(int i=0;i<N;i++)sum+=A[i];”。假设编译时变量sum,和i分别分配在寄存器R1和R2中。常量N在寄存器R6中,数组A的首地址在寄存器R3中。程序段P起始地址为0804 8100H,对应的汇编代码和

admin2015-12-30  48

问题 某程序中有如下循环代码段p“for(int i=0;i<N;i++)sum+=A;”。假设编译时变量sum,和i分别分配在寄存器R1和R2中。常量N在寄存器R6中,数组A的首地址在寄存器R3中。程序段P起始地址为0804 8100H,对应的汇编代码和机器代码如下表所示。

执行上述代码的计算机M采用32位定长指令字,其中分支指令bne采用如下格式:

OP为操作码:Rs和Rd为寄存器编号;OFFSET为偏移量,用补码表示。
假设对以上的计算机M和程序P的机器代码,M采用页式虚拟存储管理;P开始执行时,(R1)=(R2)=0,(R6)=1000,其机器代码己调入主存但不在Cache中;数组A未调入主存,且所有数组元素在同一页,并存储在磁盘同一个扇区。
请回答下列问题并说明理由。
M的指令Cache和数据Cache分离。若指令Cache共有16行,Cache和主存交换的块大小为32字节,则其数据区的容量是多少?若仅考虑程序段P的执行,则指令Cache的命中率为多少?

选项

答案Cache共有16块,每块32字节,所以Cache数据区的容量为16*32B=512B。P共有6条指令,占24字节,小于主存块大小(32B),其起始地址为0804 8100H,对应一块的开始位置,由此可知所有指令都在一个主存块内。读取第一条指令时会发生Cache缺失,故将P所在的主存块调入Cache某一块,以后每次读取指令时,都能在指令Cache中命中。因此在1000次循环中,只会发生1次指令访问缺失,所以指令Cache的命中率为:(1000×6-1)/(1000×6)=99.98%。

解析
转载请注明原文地址:https://kaotiyun.com/show/IbRi777K
0

相关试题推荐
最新回复(0)