CPU-TSC-Abrufoperation, insbesondere in einer Multicore-Multiprozessor-Umgebung

In der Linux-Welt kann man zur Ermittlung von Sekundengenauigkeits-Timern / Clockticks Folgendes verwenden:

#include <sys/time.h>

int foo()
{
   timespec ts;

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

Diese Antwort schlägt eine vorasm Ansatz zur direkten Abfrage der CPU-Uhr mit derRDTSC Anweisung.

Wie wird in einer Multi-Core-Multi-Prozessor-Architektur dieser Takt / Timer-Wert über mehrere Kerne / Prozessoren hinweg synchronisiert? Ich verstehe, dass dort inhärentes Fechten stattfindet. Ist dieses Verständnis richtig?

Können Sie eine Dokumentation vorschlagen, die dies im Detail erklären würde? Ich interessiere mich für die Mikroarchitekturen von Intel Nehalem und Sandy Bridge.

BEARBEITEN

Die Beschränkung des Prozesses auf einen einzelnen Kern oder eine CPU ist keine Option, da der Prozess (in Bezug auf den Ressourcenverbrauch) sehr umfangreich ist und alle Ressourcen auf dem Computer, der alle Kerne und Prozessoren enthält, optimal nutzen möchte.

Bearbeiten

Vielen Dank für die Bestätigung, dass die TSC zwischen Kernen und Prozessoren synchronisiert ist. Meine ursprüngliche Frage ist jedoch, wie diese Synchronisation durchgeführt wird. ist es mit einer Art Fechten? Kennen Sie eine öffentliche Dokumentation?

Fazit

Vielen Dank für alle Eingaben: Hier ist die Schlussfolgerung für diese Diskussion: Die TSCs werden bei der Initialisierung mit einem RESET synchronisiert, das in einem Multiprozessor- / Multi-Core-System zwischen den Kernen und Prozessoren erfolgt. Und danach ist jeder Kern für sich. Die TSCs werden mit einer Phasenregelschleife unveränderlich gehalten, die die Frequenzschwankungen und damit die Taktschwankungen normalisieren würdeinnerhalb eines gegebenen Kerns und so bleibt die TSC über Kerne und Prozessoren hinweg synchron.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage