Can Clocks von std :: chrono können auf verschiedenen Kernen unterschiedlich sein

8

Ich möchte time_point s von std::chrono::high_resolution_clock vergleichen, die in Threads gemessen wurden, die auf verschiedenen Kernen in einem Prozessor ausgeführt wurden. Kann es signifikante Unterschiede geben, wie Verzögerungen oder schnellere / langsamere Uhren? Was spezifiziert der Standard?

    
max 05.06.2017, 13:31
quelle

2 Antworten

3

Ich werde dies speziell anhand Ihres Kommentars beantworten, dass Sie dies auf einer 'modernen' Intel-CPU ausführen.

Ich werde auch hervorheben, dass dies eine sehr umstrittene Diskussion sein kann, da dies sehr stark von der CPU und dem Motherboard abhängt. "Modern" kann ein sehr flüssiges Konzept sein:)

Allgemein gesprochen

Die "modernen" Intel-CPUs haben einige Mechanismen eingebaut, um einheitliche Ticks über die Kerne sicherzustellen. Es spielt jedoch auch eine Rolle, auf welchem ​​Betriebssystem Sie laufen. Zum Beispiel werden einige Linux-Kernel den Time Stamp Counter als Quelle verwenden, da sie weniger Overhead haben und auf den (modernen) High Precision Event Timer zurückgreifen, der versucht, den Takt über die Kerne hinweg gleichmäßig zu halten.

Denken Sie auch daran, dass Intel-CPUs zahlreiche Stromverbrauchs-Utilities enthalten, die die CPU-Taktfrequenz beeinflussen können.

Best-Case-Annahme

Ich würde nach dem constant_tsc -Flag als Teil von / proc / cpuinfo unter Linux suchen, da dann angenommen werden kann, dass der TSC in einer festen Frequenz über Kerne läuft. Aber ... erinnere dich an die obigen Variationen.

Es gibt Maschinenzustandsereignisse wie Stromsparmodus und Ruhezustand, die dazu führen können, dass sich die CPU-Taktfrequenz ändert. In diesem Fall ist eine Neukalibrierung des TSC erforderlich, und einige Dokumente deuten darauf hin, dass dies nur beim Neustart der Fall ist.

Empfehlung:

Zielen Sie auf einen bestimmten Chipsatz und ein spezifisches Betriebssystem und studieren Sie die spezifischen Dokumentation . Die meisten Betriebssystemfamilien haben detaillierte Informationen über die Einzelheiten ihrer Taktquelle.

Abhängig von Ihren Zeitpräzisionsanforderungen möchten Sie möglicherweise zu

wechseln %Vor%     
geekonedge 05.06.2017, 16:20
quelle
4

Die std -Takte haben keine Prozessoraffinität, die meisten Threads auch nicht. Zwei Taktimpulse des gleichen Threads könnten auf verschiedenen Kernen liegen.

Bei der mit den Messungen verbundenen Vor- und Nacheilung unterscheidet sich dies nicht von der Ausführung irgendeiner anderen Anweisung; die üblichen Pipelines etc. können Auswirkungen haben, aber ich halte das nicht für schädlich. Wenn es sich nachteilig auswirken könnte, müssen Sie möglicherweise andere Tools für den Job in Betracht ziehen, z. B. einige spezielle Plattform-Timing-Tools oder CPU-spezifische Anweisungen.

    
Niall 05.06.2017 13:37
quelle

Tags und Links