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; }
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; }
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; }
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!