簡體   English   中英

Linux 上的計算時間:粒度和精度

[英]Computing time on Linux: granularity and precision

**********************原文編輯************************


我使用不同類型的時鍾來獲取 Linux 系統上的時間:

rdtsc, gettimeofday, clock_gettime

並且已經閱讀了諸如此類的各種問題:

但我有點困惑:


粒度、分辨率、精度和准確度之間有什么區別?


粒度(或分辨率或精度)准確度不是一回事(如果我是對的......)

例如,在使用“clock_gettime”時,精度為 10 毫秒,因為我得到:

struct timespec res;
clock_getres(CLOCK_REALTIME, &res):

並且粒度(定義為每秒滴答數)為 100 Hz(或 10 ms),正如我在執行時得到的:

 long ticks_per_sec = sysconf(_SC_CLK_TCK);

精度以納秒為單位,如上述代碼所示:

struct timespec gettime_now;

clock_gettime(CLOCK_REALTIME, &gettime_now);
time_difference = gettime_now.tv_nsec - start_time;

在下面的鏈接中,我看到這是 Linux 全局粒度定義,最好不要更改它:

http://wwwagss.informatik.uni-kl.de/Projekte/Squirrel/da/node5.html#fig:clock:hw

所以我的問題是,上面的這句話是否正確,以及:

a) 我們可以看到 rdtsc 和 gettimeofday 的粒度是多少(用命令)?

b) 我們可以(以任何方式)改變它們嗎?


**********************編輯編號 2************************

我已經測試了一些新的時鍾,我想分享信息:

a) 在下面的頁面中, David Terei做了一個很好的程序,比較了各種時鍾及其性能:

https://github.com/dterei/Scraps/tree/master/c/time

B)我還測試omp_get_wtime作為Raxman所建議的,我發現了一個精密的納秒,但不是真的比“clock_gettime(因為他們在這個網站做的):

http://msdn.microsoft.com/en-us/library/t3282fe5.aspx

我認為這是一個面向 Windows 的時間函數。

與使用 CLOCK_REALTIME 相比,使用 CLOCK_MONOTONIC 的clock_gettime給出更好的結果。 這是正常的,因為第一個分別計算PROCESSING時間和另一個REAL TIME

c) 我還發現了英特爾函數ippGetCpuClocks ,但我沒有測試過它,因為它必須先注冊:

http://software.intel.com/en-us/articles/ipp-downloads-registration-and-licensing/

...或者您可以使用試用版

  • 精度是信息量,即您報告的有效數字的數量。 (例如,我的身高為 2 m、1.8 m、1.83 m 和 1.8322 m。所有這些測量值都是准確的,但越來越精確。)

  • 准確性是報告的信息與真實性之間的關系。 (例如,“我身高 1.70 m”比“1.8 m”更精確,但實際上並不准確。)

  • 粒度分辨率大約是計時器可以測量的最小時間間隔。 例如,如果您有 1 毫秒的粒度,那么以納秒精度報告結果就沒有什么意義了,因為它不可能准確到那個精度級別。

在 Linux 上,可用的定時器粒度越來越大:

  • 來自<time.h> clock() (20 毫秒或 10 毫秒分辨率?)

  • 來自 Posix <sys/time.h> gettimeofday() (微秒)

  • Posix 上的clock_gettime() (納秒?)

在 C++ 中, <chrono>標頭為此提供了一定數量的抽象,並且std::high_resolution_clock嘗試為您提供最佳時鍾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM