我需要知道如何以納秒計算C代碼中函數的時間。 我試圖重複該功能,直到消耗一些微秒。 time.h
中是否有其他函數可用於計算納秒時間?以C代碼計算函數時間(以納秒爲單位)
回答
你永遠不會得到納秒級的精度。想想你在問什麼:在1 GHz CPU上1納秒是一個時鐘週期。不管你試圖打電話,你永遠不會得到那種準確性,你最好堅持幾微秒。有很多例子的類似問題在這裏:C++ Cross-Platform High-Resolution Timer。
僅適用於c:在想要使用QueryPerformanceCounter的窗口上。這裏更多的是QPC。 Here是關於如何使用QueryPerformanceCounter的相關問題。
無論您如何處理此類問題或您使用的是何種類型的系統/操作系統,最好都會得到一個近似的答案,由於問題的性質而有相當大的差異。
其次,你需要一個支持這種呼叫的系統。這是很容易,如果你正在使用QNX Neutrino中:
http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/lib_ref/c/clock_gettime.html
/*
* This program calculates the time required to
* execute the program specified as its first argument.
* The time is printed in seconds, on standard out.
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#define BILLION 1000000000L;
int main(int argc, char** argv)
{
struct timespec start, stop;
double accum;
if(clock_gettime(CLOCK_REALTIME, &start) == -1) {
perror("clock gettime");
return EXIT_FAILURE;
}
system(argv[1]);
if(clock_gettime(CLOCK_REALTIME, &stop) == -1) {
perror("clock gettime");
return EXIT_FAILURE;
}
accum = (stop.tv_sec - start.tv_sec)
+ (double)(stop.tv_nsec - start.tv_nsec)
/(double)BILLION;
printf("%lf\n", accum);
return EXIT_SUCCESS;
}
標準C的clock
功能是不是這個有用。它通常具有可怕的解決方案,並且它在測量經過的掛牆時間或CPU消耗的時間方面(平臺之間)不一致。您應該使用POSIX標準的clock_gettime
函數(它具有納秒分辨率,可以指定要測量的時鐘),並使用在缺乏POSIX功能的平臺上可用的任何系統特定的時鐘操作進行仿真。
注意:「納秒分辨率」和「納秒精度」之間存在差異。此外,他想要一個Windows解決方案,這不是(對不起,他在評論中提到它,我只是添加了標籤)。 – chacham15
調用該函數足夠的時間,你得到的總秒的時間,使用任何方法測量(甚至是普通的C時鐘())。以微米/納秒爲單位的測量本質上太不精確。
要進行基準測試,您需要QueryPerformanceCounter。這是Windows上最好的秒錶。請參閱:How to use QueryPerformanceCounter?然而,使用它來衡量(例如)單個函數調用仍然會非常不精確;我認爲你需要花費第二個時間來獲得良好的信噪比來進行測量。採取任何你想要的時間進行多次測量,其價值比較它們的標準偏差,以確保您充分精確測量。
Multimedia Timers可能是最好的時鐘(注意時鐘和秒錶的區別:一個措施絕對時間,只有等時間間隔)在Windows上使用。您應該可以通過timeGetTime()獲得接近毫秒的分辨率和精度。
- 1. 以秒爲單位計算時間差
- 2. 時間以毫秒爲單位計算
- 3. 代碼來計算在納秒時間
- 4. 以納秒爲單位存儲時間戳C++
- 5. 如何以毫秒或納秒爲單位在C++中獲取時間
- 6. 如何計算以毫秒爲單位執行時間
- 7. 如何計算以天/分/秒爲單位的unix時間戳?
- 8. 使用bash計算時間(以秒爲單位)
- 9. PHP以秒計算時間
- 10. 以納米秒爲單位測量程序的運行時間
- 11. 以納秒爲單位測量曆元時間 - Android
- 12. 時間選擇器以毫秒爲單位以毫秒爲單位計算出錯誤的值
- 13. 以毫秒爲單位計算C程序中的已用時間
- 14. C GetTickCount(windows函數)到時間(納秒)
- 15. PHP - 以微秒爲單位計算時間,在整秒內作出反應
- 16. 以小時,分鐘,秒鐘(以秒爲單位)獲取時間
- 17. Python:解析時間戳和計算時間差(以毫秒爲單位)
- 18. 如何在Perl中以納秒計算系統時間?
- 19. TimePicker以毫秒爲單位倒計時
- 20. 以微秒爲單位計時功能
- 21. C++計時系統時間(以毫秒爲單位),時間操作
- 22. 以秒爲單位的打印時間
- 23. Mongodb時間戳,以毫秒爲單位
- 24. 花費時間以毫秒爲單位
- 25. Windows上的C代碼的測量時間(以毫秒爲單位)
- 26. C++獲取系統時間,以秒數爲單位
- 27. 如何計算兩個用戶輸入之間的時間(以秒爲單位)?
- 28. 使用計時器以秒爲單位的顯示時間
- 29. java將時間戳以秒爲單位轉換爲以毫秒爲單位的時間戳
- 30. 計算以下代碼對函數
納秒級的精確度至多高度取決於平臺。什麼平臺 - Windows/Linux /嵌入的東西? –
不,並且測量單個函數調用不是很有用。你可以使用clock()。 – Cubic
如果您使用的是Linux,Linux不是實時平臺。它的調度程度以毫秒爲單位。 – MOHAMED