ホームページ >バックエンド開発 >C++ >異なるプラットフォーム間で CPU 時間と実測時間を測定するにはどうすればよいですか?

異なるプラットフォーム間で CPU 時間と実測時間を測定するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-10 04:15:021008ブラウズ

How to Measure CPU Time and Wall Clock Time Across Different Platforms?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。