Depuis N3376:
20.11.7.1 [time.clock.system] / 1:
Les objets de classe system_clock
représentent l'heure de l'horloge murale à partir de l'horloge temps réel du système.
20.11.7.2 [heure.horloge.steady] / 1:
Les objets de classe steady_clock
représentent des horloges pour lesquelles les valeurs de time_point
ne diminuent jamais à mesure que le temps physique avance et pour lesquelles des valeurs d' time_point
avance à un rythme constant par rapport au temps réel. Autrement dit, l'horloge peut ne pas être ajustée.
20.11.7.3 [time.clock.hires] / 1:
Les objets de classe high_resolution_clock
représentent les horloges avec la période de graduation la plus courte. high_resolution_clock
peut être un synonyme de system_clock
ou steady_clock
.
Par exemple, l'horloge à l'échelle du système peut être affectée par quelque chose comme l'heure d'été, auquel moment l'heure réelle indiquée à un moment donné dans le futur peut en fait être une heure du passé. (Par exemple aux États-Unis, à l'automne, le temps recule d'une heure, de sorte que la même heure est vécue "deux fois") Cependant, il steady_clock
n'est pas autorisé à être affecté par de telles choses.
Une autre façon de penser "stable" dans ce cas est dans les exigences définies dans le tableau du 20.11.3 [time.clock.req] / 2:
Dans le tableau 59 C1
, C2
notez les types d'horloge. t1
et t2
sont des valeurs renvoyées par C1::now()
où l'appel de retour t1
se produit avant le retour de l'appel t2
et ces deux appels se produisent avant C1::time_point::max()
. [Remarque: cela signifie C1
que ne s'est pas enroulé entre t1
et t2
. —End note]
Expression: C1::is_steady
Renvoie: const bool
Sémantique opérationnelle: true
si t1 <= t2
est toujours vrai et le temps entre les tics d'horloge est constant, sinon false
.
C'est tout ce que la norme a sur leurs différences.
Si vous voulez faire un benchmarking, votre meilleur pari sera probablement std::high_resolution_clock
, car il est probable que votre plate-forme utilise une minuterie haute résolution (par exemple QueryPerformanceCounter
sous Windows) pour cette horloge. Cependant, si vous effectuez une analyse comparative, vous devriez vraiment envisager d'utiliser des minuteries spécifiques à la plate-forme pour votre référence, car différentes plates-formes gèrent cela différemment. Par exemple, certaines plates-formes peuvent vous donner des moyens de déterminer le nombre réel de cycles d'horloge requis par le programme (indépendamment des autres processus exécutés sur le même processeur). Mieux encore, mettez la main sur un véritable profileur et utilisez-le.