複数のプラットフォームでの 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 中国語 Web サイトの他の関連記事を参照してください。