В мире Linux, чтобы получить таймерные таймеры/часы-часы nano секунд, вы можете использовать:
#include <sys/time.h>
int foo()
{
timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
//--snip--
}
Этот ответ предлагает подход asm
для прямого запроса для часов процессора с инструкцией RDTSC
.
В многоядерной многопроцессорной архитектуре, как синхронизируется эта синхронизация часов/таймера по нескольким ядрам/процессорам? Мое понимание заключается в том, что там, где делается неотъемлемое фехтование. Правильно ли это понимание?
Можете ли вы предложить некоторую документацию, которая подробно объяснила бы это? Меня интересуют микроархитектуры Intel Nehalem и Sandy Bridge.
ИЗМЕНИТЬ
Ограничение процесса до одного ядра или процессора не является вариантом, поскольку процесс действительно огромен (с точки зрения потребляемых ресурсов) и хотел бы оптимально использовать все ресурсы в машине, которые включают в себя все ядра и процессоры.
Изменить
Спасибо за подтверждение того, что TSC синхронизирован по ядрам и процессорам. Но мой первоначальный вопрос: как эта синхронизация выполняется? это с каким-то фехтованием? знаете ли вы о какой-либо публичной документации?
Заключение
Спасибо за все входы: Здесь вывод для этого обсуждения: TSC синхронизируются при инициализации с использованием RESET, который происходит по ядрам и процессорам в многопроцессорной/многоядерной системе. И после этого каждое Ядро само по себе. TSC сохраняются в неизменном виде с помощью цикла Phase Locked Loop, который нормализует вариации частоты и, следовательно, изменения часов в пределах заданного Core, и именно так TSC остается в синхронизации по ядрам и процессорам.