C++統計資源消耗和耗時

海_纳百川發表於2024-10-27

在 Linux 下統計可執行程式的執行耗時,你可以使用 time 命令。它能夠顯示程式的使用者時間、系統時間和總耗時等詳細資訊。以下是 time 命令的基本使用方式:

time ./your_program

其中 your_program 是你要執行的可執行檔案。

輸出解釋:

real    0m2.123s  # 實際的時間(從程式開始到結束的總時間,包含了等待時間)
user    0m1.456s  # 程式在使用者態執行的時間
sys     0m0.567s  # 程式在核心態執行的時間
  • real:從程式開始執行到結束的真實時間(包括等待時間,如I/O操作等待)。
  • user:CPU執行使用者程式碼的時間(即程式本身消耗的時間)。
  • sys:CPU在作業系統核心中執行的時間(即系統呼叫消耗的時間,如檔案讀寫等)。

高階用法:

  1. 儲存結果到檔案:你可以將耗時結果重定向到檔案:

    /usr/bin/time -o output.txt ./your_program
    

    這將把耗時資訊儲存到 output.txt 檔案中。

  2. 自定義格式:你還可以透過 -f 選項自定義輸出格式。例如:

    /usr/bin/time -f "\nreal_time: %E\nuser_time: %U\nsys_time: %S" ./your_program
    
    • %E:實際耗時(real time)。
    • %U:使用者態耗時。
    • %S:核心態耗時。
  3. 測量命令的平均耗時:你可以使用迴圈執行程式多次,然後計算平均值:

    for i in {1..10}; do time ./your_program; done
    

這種方法適合統計程式的耗時並可以用於效能分析。


如果系統中沒有 time 命令,可以透過以下幾種方式來統計程式的執行時間:

1. 使用 date 命令計算時間差

date 命令可以獲取當前的時間戳,透過記錄程式開始和結束的時間,計算出執行的總耗時。

start=$(date +%s)    # 獲取開始時間的時間戳(單位為秒)
./your_program       # 執行你的程式
end=$(date +%s)      # 獲取結束時間的時間戳
echo "Runtime: $((end - start)) seconds"  # 計算並輸出耗時

如果需要更高的精度(以毫秒為單位),可以使用:

start=$(date +%s%3N)    # 獲取開始時間的時間戳(單位為毫秒)
./your_program          # 執行你的程式
end=$(date +%s%3N)      # 獲取結束時間的時間戳
echo "Runtime: $((end - start)) milliseconds"  # 計算並輸出耗時

2. 使用 bash 的內建 SECONDS 變數

Bash 提供了一個名為 SECONDS 的內建變數,程式執行時會自動記錄從指令碼開始執行到當前時間的秒數。

SECONDS=0           # 初始化 SECONDS 變數
./your_program      # 執行你的程式
echo "Runtime: $SECONDS seconds"  # 輸出耗時

3. 使用 perf 工具

如果你有 perf 工具安裝,可以用它來統計程式的執行耗時及其他效能指標。perf 是一個強大的 Linux 效能分析工具。

perf stat ./your_program

perf 會顯示總耗時、CPU利用率等多種資訊。

相關文章