Maison > développement back-end > C++ > le corps du texte

Comment mesurer le temps CPU et le temps d'horloge murale sur différentes plates-formes ?

Linda Hamilton
Libérer: 2024-11-10 04:15:02
original
939 Les gens l'ont consulté

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

Mesurer le temps CPU et le temps d'horloge murale sur plusieurs plates-formes

La détermination du temps d'exécution du code est cruciale pour l'optimisation des performances. L'identification du temps qu'une fonction alloue au traitement du processeur par rapport au temps total écoulé depuis son lancement fournit des informations précieuses pour l'analyse du temps d'exécution. Pour répondre à ce besoin, explorons les méthodes de mesure du temps pour les plates-formes Linux et Windows, y compris les considérations relatives à la dépendance architecturale.

Fonctions C et C :

Voici un extrait de code qui fournit une solution multiplateforme :

#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;
}
Copier après la connexion

Pour les systèmes Windows, les fonctions correspondantes seraient be :

#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;
}
Copier après la connexion

Démonstration :

Pour illustrer l'utilisation de ces fonctions, voici un exemple :

#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;
}
Copier après la connexion

Ce code calcule le le temps d'horloge murale et le temps CPU consommés par la boucle à forte intensité de calcul et imprime les résultats pour analyse.

Indépendance de l'architecture :

Les méthodes de mesure du temps présentées sont largement indépendantes de l'architecture. Ils s'appuient sur des fonctions fournies par le système et conçues pour tenir compte de l'architecture matérielle spécifique. Cependant, certains cas extrêmes peuvent nécessiter des optimisations ou des considérations spécifiques à la plate-forme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal