2010-06-28 93 views
1

我已經開發了一個籤密方案,我想測試模塊冪運算所花費的時間。我使用下面的代碼籤密部分python中的計時函數沒有給出準確的結果

start = time.clock() 
gamma = pow(g , x, p) 
print ('The value of gamma is : '),gamma 
Time_signcrypt = time.clock() - start 

和籤密的部分我正在計算與這行代碼所花費的時間

start = time.clock() 
seed = (XA + x - XA) 
gamma_new = pow(g , seed, p) 
Time_new_gamma = time.clock() - start 

使用相同的值,結果我得到的問題來自兩個定時功能是不同的。

Signcryption values: 
0.035299674 
0.025940017 

Unsigncryption values: 
0.019342944 
0.01727206 

這些值應該與在相同參數的兩端應用相同的函數相同。另一個重要的事情是,在非密碼部分,一步是額外的,但仍然花費的時間少於籤密部分。我不能讓它什麼是錯的我已經測試了近35次,結果各不相同大部分的時間:(的

請諮詢我要去哪裏錯了?

+0

我問了一個類似的問題,關於[準確的時間戳]在Python中可能是有用的(http://stackoverflow.com/questions/157359/accurate-timestamping-in-python)。 – 2010-06-28 12:16:35

回答

4

要時間的方法,運行它們很多次,直到累積時間是至少 10秒鐘,然後由運行的次數除以時間

否則,定時會因爲各種原因非常不準確的:其獲取CPU

  1. 其它工藝
  2. 中斷在後臺運行
  3. 熱效應
  4. 宇宙輻射
  5. 你的想法.. ;-)
+0

,可以請你給我提供這個理由,因爲我只計算一個簡單的pow()函數的時間,它的只有一行和相同的事情發生在未簽名的部分,但兩個輸出都不一樣。籤密和非簽名的值也會有很大的差異,但是每個籤密/非簽名部分的值都更接近。 我一直在測試的價值,因爲早晨現在n沒有運氣:S :( – fahad 2010-06-28 12:16:27

+0

好吧我現在有一個想法,感謝更新:) – fahad 2010-06-28 12:17:08

1

由於CPU的經常是不同進程之間調度,同一段代碼將花費不同的時間,每次執行。

由於print語句需要「相當多的」時間,所以第一個函數通常會比較慢。

3

有一個timeit模塊來做這種事情。它會多次運行您的代碼(默認爲100萬次)並報告該運行的統計信息。比嘗試單次運行更準確,其代碼可能會遇到各種問題。

相關問題