在多個平台上測量 CPU 時間和掛鐘時間
決定程式碼的執行時間對於效能最佳化至關重要。確定函數分配給 CPU 處理的時間與啟動後所花費的總時間,可以為運行時分析提供有價值的見解。為了滿足這項需求,讓我們來探索 Linux 和 Windows 平台的時間測量方法,包括架構依賴的注意事項。
C 和C 函數:
這裡是一個程式碼片段提供跨平台解決方案:
#include <cstdio> #include <ctime> double get_wall_time() { struct timeval time; gettimeofday(&time, NULL); return (double)time.tv_sec + (double)time.tv_usec * .000001; } double get_cpu_time() { return (double)clock() / CLOCKS_PER_SEC; }
對於Windows 系統,對應的函數為:
#include <Windows.h> double get_wall_time() { LARGE_INTEGER time, freq; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&time); return (double)time.QuadPart / freq.QuadPart; } double get_cpu_time() { FILETIME a, b, c, d; GetProcessTimes(GetCurrentProcess(), &a, &b, &c, &d); return (double)(d.dwLowDateTime | ((unsigned long long)d.dwHighDateTime << 32)) * 0.0000001; }
示範:
為了說明這些函數的用法,以下是一個範例:
#include <math.h> int main() { double wall0 = get_wall_time(); double cpu0 = get_cpu_time(); // Perform some computation (e.g., a computationally intensive loop) double wall1 = get_wall_time(); double cpu1 = get_cpu_time(); printf("Wall Time: %.6f seconds\n", wall1 - wall0); printf("CPU Time: %.6f seconds\n", cpu1 - cpu0); return 0; }
此程式碼計算密集型循環消耗的掛鐘時間和CPU 時間,並列印結果進行分析。
架構獨立性:
所提出的時間測量方法在很大程度上與架構無關。它們依賴於系統提供的功能,這些功能旨在考慮特定的硬體架構。但是,某些邊緣情況可能需要特定於平台的最佳化或考慮。
以上是如何跨平台測量CPU時間與掛鐘時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!