Operação de busca de CPU TSC especialmente em ambiente multicore-multi-processador

No mundo Linux, para obter nano segundos timer / clockticks de precisão pode-se usar:

#include <sys/time.h>

int foo()
{
   timespec ts;

   clock_gettime(CLOCK_REALTIME, &ts); 
   //--snip--      
}

Esta resposta sugere umasm abordagem para consultar diretamente o relógio cpu com oRDTSC instrução.

Em uma arquitetura multi-core e multiprocessador, como este relógio funciona / o valor do timer é sincronizado em vários núcleos / processadores? Meu entendimento é que há cercas inerentes sendo feitas. Esse entendimento está correto?

Você pode sugerir alguma documentação que explicaria isso em detalhes? Estou interessado nas microarquiteturas Intel Nehalem e Sandy Bridge.

EDITAR

Limitar o processo a um único núcleo ou cpu não é uma opção, pois o processo é realmente enorme (em termos de recursos consumidos) e gostaria de utilizar de forma ideal todos os recursos da máquina que inclua todos os núcleos e processadores.

Editar

Obrigado pela confirmação de que o TSC está sincronizado entre núcleos e processadores. Mas minha pergunta original é como essa sincronização é feita? é com algum tipo de esgrima? você conhece alguma documentação pública?

Conclusão

Obrigado por todas as entradas: Aqui está a conclusão para esta discussão: Os TSCs são sincronizados na inicialização usando um RESET que acontece entre os núcleos e processadores em um sistema multi-processador / multi-core. E depois disso, cada Núcleo está por conta própria. Os TSCs são mantidos invariantes com um Loop de Fase de Bloqueio que normalizaria as variações de freqüência e, portanto, as variações de clockdentro de um determinado Núcleo e é assim que o TSC permanece em sincronia entre núcleos e processadores.

questionAnswers(4)

yourAnswerToTheQuestion