Maison >développement back-end >C++ >Comment puis-je réaliser une mesure du temps à l'échelle nanométrique en C ?

Comment puis-je réaliser une mesure du temps à l'échelle nanométrique en C ?

DDD
DDDoriginal
2024-12-26 02:24:13272parcourir

How Can I Achieve Nanoscale Time Measurement in C  ?

Fonction de minuterie C pour la mesure du temps en nanosecondes

Mesurer le temps d'exécution avec une précision nanométrique avec une fonction de classe C nécessite une minuterie qui offre une précision supérieure à celle de l'implémentation clock_t par défaut.

Le code fourni utilise le type clock_t pour mesurer le temps en secondes. Pour une précision à l'échelle nanométrique, vous avez besoin d'une implémentation alternative de la minuterie.

Linux (et BSD)

Utilisez clock_gettime() :

#include <sys/time.h>

int main() {
    timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);
    return 0;
}

Windows

Utiliser QueryPerformanceCounter :

#include <windows.h>

int main() {
    LARGE_INTEGER freq, pc;
    QueryPerformanceFrequency(&freq);
    QueryPerformanceCounter(&pc);
    return 0;
}

Considérations supplémentaires :

  • QueryPerformanceCounter peut parfois renvoyer des lectures anormales sur certains chipsets.
  • Windows 7 et versions ultérieures peuvent détecter si les processeurs ont un TSC invariant et passer à une minuterie externe si nécessaire. Cependant, la synchronisation des processeurs reste un problème défi.

Références :

  • [clock_gettime](https://linux.die.net/man/3/clock_gettime)
  • [QueryPerformanceCo sous](https://docs.microsoft.com/en-us/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter)
  • [Haute résolution Horloges et minuteries pour Windows](http://performancebydesign.blogspot.com/2012/03/high-resolution-clocks-and-timers-for.html)

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!

Déclaration:
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