我正在练习一些问题并且在理解某些方面遇到一些麻烦。以下问题的答案是865384.0。但我不明白他们是怎么做到的。有没有人理解并且不介意解释?
假设您有一台2.5 GHz时钟的RISC机器(即时钟每秒钟25亿次)。该特定计算机使用指令高速缓存,数据高速缓存,操作数获取单元和操作数存储单元。指令集包括具有以下时序的简单指令:
set reg, immed 1.0 clock cycle
loop label 6.0 clock cycles
add reg, immed 1.0 clock cycle
add reg, reg 2.0 clock cycles
load reg, mem 4.0 clock cycles
假设使用以下代码片段对数值数组的元素求和。如果初始化代码已经执行(即SET指令已经完成执行),可以在4.5毫秒内处理多少个数组元素?将答案四舍五入到最接近的整数。回想1 ms = 0.001秒。还假设没有物理内存限制,这意味着阵列可以根据需要大小。
set r1, 0 ;initialize sum
set r2, MAX_SIZE ;initialize loop counter
set r3, @list ;initialize array pointer
more:
load r4, \textrm{5.0} ;fetch current list element
add r1, r4 ;add current list element
add r3, 4 ;move array pointer to next element
loop more ;auto-decrement r2, jump to more if r2 != 0
答案 0 :(得分:5)
2.5GHz处理器每秒可以进行2,500,000,000次循环
在4.5ms内,处理器可以进行2,500,000,000 * 0.0045个周期 = 11,250,000次循环
循环的每次迭代都需要13个循环才能执行。您只计算标签 more 之后的最后四条指令,它将循环到:
- load: 4 cycles
- first add (register to register): 2 cycles
- second add (immediate to register): 1 cycle
- loop: 6 cycles
11,250,000个可用循环/每次迭代13个循环= 865,385次迭代