在4.5毫秒内可以处理多少个数组元素?

时间:2016-05-29 22:50:04

标签: assembly

我正在练习一些问题并且在理解某些方面遇到一些麻烦。以下问题的答案是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

1 个答案:

答案 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次迭代