[英]How to measure the ACTUAL execution time of a C program under Linux?
[英]How to measure execution time in C on Linux
我正在對實時數據進行加密。 我已經開發了加密和解密算法。 現在,我想測量在C語言中Linux平台上相同程序的執行時間。我如何正確地測量它? 我已經嘗試過如下
gettimeofday(&tv1, NULL);
/* Algorithm Implementation Code*/
gettimeofday(&tv2, NULL);
Total_Runtime=(tv2.tv_usec - tv1.tv_usec) +
(tv2.tv_sec - tv1.tv_sec)*1000000);
這給了我微秒的時間。 是正確的時間測量方式還是我應該使用其他功能? 任何提示將不勝感激。
讀取時間(7) 。 您可能想將clock_gettime(2)與CLOCK_PROCESS_CPUTIME_ID
或CLOCK_MONOTONIC
。 或者,您可以只使用clock(3) (用於CPU時間(以微秒為單位,因為CLOCK_PER_SEC
始終為一百萬))。
如果要對整個程序(可執行文件)進行基准測試,請使用time(1)命令。
clock()
:返回的值是到目前為止使用的CPU時間,作為clock_t;
獲取程序開始和結束時的CPU時間。 差異就是你想要的。
clock_t begin = clock();
/**** code ****/
clock_t end = clock();
double time_spent = (double)(end - begin) //in microseconds
要獲得使用的秒數,我們將差值除以CLOCKS_PER_SEC
。
在C11中, timespec_get()
提供了以納秒為單位的時間測量。 但是准確性是由實現定義的,並且會有所不同。
測量適當的加密代碼的執行時間很簡單,盡管有點乏味。 好的加密代碼的運行時間與輸入的質量無關-不管您對它進行什么投入,每塊輸入總是需要相同數量的操作。 如果不是這樣,您會遇到一個稱為定時攻擊的問題。
因此,您唯一需要做的就是展開所有循環,對操作碼進行計數,並將各個操作碼乘以其時鍾信號的數量,以獲取准確的運行時間。 有一個問題:某些CPU的某些操作具有可變數量的時鍾,而您可能必須將其更改為具有固定時鍾數量的操作。 坦白的說,這是一種痛苦。
如果您只想知道代碼是否能夠以足夠快的速度運行以適合您的實時操作系統的插槽,則可以簡單地將代碼最大化並在下面的示例中填充NOOP(您的RTOS可能有一個例程)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.