2017-09-11 104 views
1
for(int=0; i<1,000,000; i++) 
{ 
    if(data[i]< 0) 
     data[i]= data[i] * 2; 
} 

大家好,如何從此Java程序獲得解決方案來解決算法?

我想知道的是它可以計算出該算法如下如果所花費的時間來執行一個內存訪問是100納秒,並且所有其他操作的絕對速度(算術,註冊訪問等)需要10納秒?我很確定這個問題可以用來計算絕對速度。我知道我們確實有一個變量已經是Ta = 100納秒了,對嗎?剩下的缺失變量可以通過我在Java程序中編譯完成後提供的代碼行來找到?我編譯並運行它,但沒有說明我需要解決這個問題。有什麼建議麼?

這裏是我使用來計算該算法的絕對速度公式:

T=Tna X Nna + Ta X Na; 

Tna= the time to execute a memory nonaccess instruction; 
Nna= the number of memory nonaccess machine language instructions executed; 
Ta= the time to execute a memory access instruction; 
Na= the number of memory access machine language instructions executed; 

這裏是我將編譯和運行,看它是否會給出一些丟失的變量的代碼,我需要解決這個問題。

+0

對我來說,找到「絕對速度」意味着你運行它,看看它花了多長時間。你有什麼想法? –

+0

@KevinAnderson這些步驟確定每行代碼的指令類型,無論是內存訪問還是非內存訪問 然後,您需要確定每個代碼執行的次數。 然後您將每個訪問的總數加起來 給予兩次:每個內存訪問指令爲100納秒,每個非內存訪問爲10納秒。 – dorakta

+0

因此,「代碼行」是指Java代碼還是編譯的字節碼? –

回答

0

@dorakta如果你關注代碼塊中操作的分類。以下可能是一個起點。

1行:對(INT = 0;我<百萬;我++)在for循環

變量i,需要存儲器存取和休息操作。 這executs 1,000,000次

您有:

1000000 times of 
2 - memory access (1 read and 1 assign) 
1 - compare 
1 - incr (depends. It could be -> 1 read and 1 add) 

3行:如果(數據[I] < 0)

數據[i]於if語句是一個存儲器的參考和一個比較操作。 這executs 1,000,000次

您有:

1000000 times of 
2 - memory access 
1 - compare 

4行:數據[I] =數據[I] * 2

您有:視的值0至1000000倍數據。 你可能想要計算最壞的情況。

Hence, 1000000 times. 
2 - memory access (1 read and 1 assign) 
1 multiply 

希望它有幫助!

+0

非常感謝!由於T = Tna×Nna(10×1)+ Ta×Na(100×6),總絕對速度將爲610秒; – dorakta