我想優化一個朋友給我的代碼塊,但是我的平均執行時間的基線非常不穩定,我失去了爲什麼/如何修復它。C函數的平均執行時間不穩定
代碼:
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
#include "wall.h" /* Where his code is */
int main()
{
int average;
struct timeval tv;
int i;
for(i = 0; i < 1000; i++) /* Running his code 1,000 times */
{
gettimeofday(&tv, NULL); /* Starting time */
start(); /* Launching his code */
int ret = tv.tv_usec; /* Finishing time */
ret /= 1000; /* Converting to milliseconds */
average += ret; /* Adding to the average */
}
printf("Average execution time: %d milliseconds\n", average/1000);
return 0;
}
5次不同的運行的輸出:
- 804毫秒
- 702毫秒
- 394毫秒
- 642毫秒
- 705毫秒
我已經嘗試了多種不同的方式來獲得平均執行時間,但每個人都沒有給我一個足夠精確的答案,或給了我一個完全不穩定的答案。我失去了現在該做什麼,任何幫助將不勝感激!
我知道這些類型的基準測試都非常依賴於系統的,所以我在下面列出了我的系統規格:
- 的Ubuntu 12.10 64
- 7.8吉布RAM
- 英特爾酷睿i7-3770 CPU @ 3.40GHz×8
- 的GeForce GT 620 /的PCIe/SSE2
編輯
謝謝大家的意見,但我決定用gprof來代替構建我自己的。再一次感謝你!
雖然測試基準確實是針對您所運行的硬件和操作系統的,但它更依賴於您所使用的代碼 評估。在這種情況下,我們無法看到該代碼。我會問,是否有任何文件IO發生。 –
整個循環的時間如何? – nhahtdh
'timeval'結構的'tv_usec'成員包含當前時間的微秒部分,而不是自Epoch起的微秒數。您不是在測量執行時間,而是在採樣微秒部分。觀察到的價值分佈是非常正常的(沒有雙關意圖)。 –