簡體   English   中英

使用time命令了解實時時間和cpu時間-精度如何?

[英]Using time command to know the real time and cpu time - how accurate?

我只是想通過在Linux控制台上使用time命令運行代碼來獲取CPU時間和經過的實時時間。 但是,每次我運行此命令時,都會得到不同的值。 因此,結果的可重復性不存在。 CPU時間估算值在12-31 ms的范圍內變化。 然后,我應該認為哪個結果是最准確的結果,或者我將其運行10次並取平均值即可?

自上次重置以來,您必須獲取處理器時間戳記記錄及其時鍾周期數。 如何獲取rdtsc取決於處理器和處理器指令集。 首先檢查您的處理器名稱,然后訪問供應商網站並搜索處理器指令集。

得到的時間很明顯,因為當您剛開始執行代碼時,它不會開始執行。 為此,您現在必須知道response time是多少, starvation time是多少,這兩個因素都決定着另一個因素,即turn around time ,而在unix / linux環境中, time命令為您提供turn around time ,如果有的話小於5毫秒,則顯示0。

看看時間手冊頁上的內容

DESCRIPTION
 The time utility executes and times utility.
 After the utility finishes, time writes the total time elapsed, 
 the time consumed by system overhead, and the
 time used to execute utility to the standard error stream.  
 Times are reported in seconds.

它清楚地提到了總經過時間,這反過來又意味着總周轉時間,這進一步取決於幾個因素,而這些因素是

  1. 操作系統的調度策略
  2. 流程經理如何管理流程
  3. 處理器的時鍾頻率
  4. 數據總線時間延遲
  5. PCB加載時間

因此,實際上不可能精確計算時間。 現在,如果您在x86模擬器中查看asm文件的執行情況,您會發現指令沒有立即從RAM提供給處理器。 此外,指令集Architecture(ISA)對其影響很大。 time實用工具只是一個包裝器實現,因此無法准確獲取執行時間,但是我認為即使在實際示例中,您也不需要這種准確性(我在這里猜測)

我認為真正重要的是確保您在同一環境中進行測量。 確保您的機器是“安靜的”機器,即進行測量時沒有其他進程在運行。 如果其他進程正在運行,則時間度量可能會有所不同,因為其他地方消耗了CPU周期。

了解您的代碼在運行時的實際作用也很重要。 它是否涉及大量的IO操作? 在這種情況下,您可以考慮使用Ramdisk for IO來減少時序差異。 IO的Ramdisk

您的代碼是否在多個線程中運行? 還是單線程? 您可以嘗試使用taskset實用程序將應用程序“綁定”到Linux上的某個處理器內核。 我已經看到使用Taskset的一致數字。

由於內存和緩存的原因,如果您多次運行它,則緩存中會有部分代碼,這會影響您的時序。 為了消除這種影響,您可以在開始測量時間之前多次運行代碼10分鍾。 或者,可以通過在每次運行前重新引導計算機,使計算機處於相同的內存和緩存狀態。

暫無
暫無

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

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