В настоящее время рекомендуемый интерфейс для high-rez времени в Linux (и POSIX в целом) - clock_gettime. Смотрите справочную страницу.
clock_gettime(CLOCK_REALTIME, struct timespec *tp) // for wall-clock time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, struct timespec *tp) // for CPU time
Но прочитайте справочную страницу. Обратите внимание, что вам нужно связать с -lrt, потому что POSIX говорит так, я думаю. Может быть, чтобы избежать конфликтов символов в -lc, для старых программ, которые определяли свое собственное clock_gettime? Но динамические библиотеки используют слабые символы ...
Лучшая функция сна - это нано-сон. Это не возиться с сигналами или любой ерундой, как usleep. Это определено, чтобы просто спать, и не иметь никаких других побочных эффектов. И он сообщает вам, если вы проснулись рано (например, от сигналов), поэтому вам не обязательно вызывать другую функцию времени.
В любом случае, вам будет сложно протестировать одну повторение чего-то такого короткого, что включает системный вызов. Существует огромное количество возможностей для вариаций. например планировщик может решить, что нужно выполнить какую-то другую работу (маловероятно, если ваш процесс только начался; вы еще не использовали свой временной интервал). Кэш процессора (L2 и TLB) легко возможен.
Если у вас есть многоядерный компьютер и однопоточный тест для кода, который вы оптимизируете, вы можете дать ему приоритет в реальном времени, закрепленный за одним из ваших ядер. Убедитесь, что вы выбрали ядро, которое не обрабатывает прерывания, иначе ваша клавиатура (и все остальное) будет заблокирована, пока не будет сделано. Используйте набор задач (для закрепления на одном процессоре) и chrt (для настройки prio в реальном времени).
Посмотрите это письмо, которое я отправил в gmp-devel с этим трюком:
http://gmplib.org/list-archives/gmp-devel/2008-March/000789.html
О, да, для наиболее точной синхронизации вы можете использовать rdtsc самостоятельно (на x86 / amd64). Если у вас нет других системных вызовов в том, что вы жмете, это неплохая идея. Возьмите систему сравнительного анализа, чтобы реализовать свою функцию. У GMP довольно приличный. Возможно, он плохо настроен для функций бенчмаркинга, которых нет в GMP и которые называются mpn_whwhat. Я не помню, и это стоит посмотреть.