2016-05-29 143 views
2

我正在練習一些問題,並且在理解時遇到了一些麻煩。以下問題的答案是865384.0。但我不明白他們是怎麼做到的。有誰明白,不會介意解釋?可以在4.5毫秒內處理多少個數組元素?

假設你有一個RISC機器具有2.5GHz的時鐘(即時鐘每秒滴答2.5十億倍)。這個特定的計算機使用指令緩存,數據緩存,操作數獲取單元和操作數存儲單元。該指令集包括具有以下時序的簡單指令:

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.5ms內處理多少個數組元素?將您的答案舍入到最近的整數。回想1ms = 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

這對我來說似乎相當具體。給定這些參數和一個已知的指令集,如何確定在給定的時間範圍內該循環可以處理多少次。 –

回答

4

甲2.5GHz的處理器可以執行每秒

25億次循環在4.5ms,處理器可以做到25億* 0.0045週期 = 11250000個週期

循環的每次迭代需要13個週期來執行。你只有標籤後,算上最後四個指令在那裏的循環來:提供每次迭代= 865385次迭代/ 13次

- load: 4 cycles 
- first add (register to register): 2 cycles 
- second add (immediate to register): 1 cycle 
- loop: 6 cycles 

11,250,000次

+1

非常感謝。謝謝。 – ricky162