Horloge monotone sur OSX

CLOCK_MONOTONIC ne semble pas disponible, donc clock_gettime n'est pas disponible.

j'ai lu à certains endroits que mach_absolute_time() pourrait être la bonne façon de faire, mais après avoir lu que c'était une 'valeur dépendante du cpu', cela m'a immédiatement fait me demander si elle utilise rtdsc en dessous. Ainsi, la valeur pourrait dériver dans le temps même si elle est monotone. En outre, les problèmes avec l'affinité de thread pourrait entraîner des résultats significativement différents de l'appel de la fonction (ce qui rend pas monotone dans tous les core.)

bien sûr, ce ne sont que des spéculations. Personne ne sait comment mach_absolute_time fonctionne réellement? Je cherche un remplaçant à clock_gettime (CLOCK_MONOTONIC... ou quelque chose comme ça pour OSX. Quelle que soit la source de l'horloge, j'attends au moins une précision de MILLISECONDE et de milliseconde.

je voudrais juste comprendre quelles horloges sont disponibles, quelles horloges sont monotones, si certaines horloges dérivent, ont des problèmes d'affinité de fil, ne sont pas prises en charge sur tout le matériel Mac, ou prenez un nombre' super élevé ' de cycles cpu à exécuter.

Voici les liens que j'ai pu trouver sur ce sujet (certains sont déjà morts des liens et pas trouvable sur archive.org):

https://developer.apple.com/library/mac/#qa/qa1398/_index.html http://www.wand.net.nz/~smr26 / wordpress/2009/01/19/monotone-temps-en-mac-os-x/ http://www.meandmark.com/timing.pdf

Merci! Brett

20
demandé sur Brett 2012-07-27 05:56:22

3 réponses

Le noyau Mach permet d'accéder à l'horloge système, dont au moins une (SYSTEM_CLOCK annoncé par la documentation comme étant monotone.

#include <mach/clock.h>
#include <mach/mach.h>

clock_serv_t cclock;
mach_timespec_t mts;

host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
clock_get_time(cclock, &mts);
mach_port_deallocate(mach_task_self(), cclock);