Warum läuft ein CPU-Kern langsamer als die anderen?

8

Ich habe eine große wissenschaftliche Anwendung verglichen und festgestellt, dass sie bei gleichen Eingaben manchmal um 10% langsamer lief. Nach langem Suchen fand ich heraus, dass die Verlangsamung nur auftrat, wenn sie auf dem Kern # 2 meiner Quad-Core-CPU lief (genauer gesagt, ein Intel Q6600 mit 2,4 GHz). Die Anwendung ist ein single-threaded und verbringt die meiste Zeit in CPU-intensiven Matrix-Mathe-Routinen.

Da ich jetzt weiß, dass ein Kern langsamer ist als die anderen, kann ich genaue Benchmark-Ergebnisse erhalten, indem ich die Prozessoraffinität für alle Läufe auf den gleichen Kern setze. Ich möchte jedoch immer noch wissen, warum ein Kern langsamer ist.

Ich habe mehrere einfache Testfälle ausprobiert, um den langsamen Teil der CPU zu bestimmen, aber die Testfälle liefen mit identischen Zeiten, sogar auf langsamem Kern # 2. Nur die komplexe Anwendung zeigte die Verlangsamung. Hier sind die Testfälle, die ich ausprobiert habe:

  • Fließkomma-Multiplikation und Addition:

    %Vor%
  • Trigonometrische Funktionen:

    %Vor%
  • Ganzzahl-Zusatz:

    %Vor%
  • Speicherkopie beim Versuch, den L2-Cache zu vermissen:

    %Vor%

Die Frage: Warum sollte ein CPU-Kern langsamer sein als die anderen, und welcher Teil der CPU verursacht diese Verlangsamung?

BEARBEITEN: Weitere Tests zeigten ein Verhalten von Heisenbug . Wenn ich explizit die Prozessoraffinität festlege, wird meine Anwendung nicht langsamer auf Core 2. Wenn es jedoch auf Core 2 ohne eine explizit festgelegte Prozessoraffinität ausgeführt wird, wird die Anwendung etwa 10% langsamer ausgeführt. Das erklärt, warum meine einfachen Testfälle nicht die gleiche Verlangsamung zeigten, da sie alle explizit die Prozessoraffinität festlegen. Es sieht also so aus, als gäbe es einen Prozess, der gerne auf Core # 2 lebt, aber er kommt aus dem Weg, wenn die Prozessoraffinität eingestellt ist.

Bottom Line: Wenn Sie einen genauen Benchmark eines single-threaded Programms auf einem Multicore-Rechner benötigen, stellen Sie sicher, dass Sie die Prozessoraffinität festlegen.

    
Edi H 13.05.2009, 18:55
quelle

4 Antworten

7

Sie haben möglicherweise Anwendungen, die sich für den Anschluss an denselben Prozessor (CPU-Affinität) entschieden haben.

Betriebssysteme möchten oft auf demselben Prozessor laufen, da sie alle ihre Daten im selben L1-Cache zwischenspeichern können. Wenn Sie Ihren Prozess auf dem gleichen Kern ausführen, an dem Ihr Betriebssystem viel arbeitet, könnten Sie den Effekt einer Verlangsamung Ihrer CPU-Leistung erleben.

Es klingt wie ein Prozess, der sich an die gleiche CPU halten möchte. Ich bezweifle, dass es ein Hardwareproblem ist.

Es muss nicht notwendigerweise Ihr Betriebssystem sein, das die Arbeit erledigt, ein anderer Hintergrunddämon könnte es tun.

    
Kekoa 13.05.2009, 19:03
quelle
2

Die meisten modernen CPUs haben eine separate Drosselung jedes CPU-Kerns aufgrund von Überhitzung oder Energiesparfunktionen. Sie können versuchen, den Energiesparmodus zu deaktivieren oder die Kühlung zu verbessern. Oder vielleicht ist deine CPU schlecht. Auf meinem i7 bekomme ich ca. 2-3 Grad unterschiedliche Kerntemperaturen der 8 berichteten Kerne in "Sensoren". Bei Volllast gibt es noch Schwankungen.

    
krosenvold 13.05.2009 18:57
quelle
1

Eine andere Möglichkeit besteht darin, dass der Prozess während der Ausführung von einem Kern zum anderen migriert wird. Ich würde vorschlagen, die CPU-Affinität auf den 'langsamen' Kern einzustellen und zu sehen, ob es genauso schnell geht.

Vor Jahren, vor den Zeiten von Multicore, habe ich mir einen Dual-Socket Athlon MP für die "Web-Entwicklung" gekauft. Plötzlich verlangsamten sich meine Plone / Zope / Python-Webserver. Eine Google-Suche ergab, dass der CPython-Interpreter eine globale Interpreter-Sperre hat, aber Python-Threads von Betriebssystem-Threads unterstützt werden. OS-Threads wurden gleichmäßig auf die CPUs verteilt, aber nur eine CPU kann die Sperre gleichzeitig übernehmen, also alle anderen Prozesse musste warten .

Das Festlegen der CPU-Affinität von Zope zu einer beliebigen CPU hat das Problem behoben.

    
shapr 15.05.2009 17:52
quelle
0

Ich habe etwas Ähnliches auf meinem Haswel-Laptop beobachtet. Das System war leise, kein X lief, nur das Terminal. Das Ausführen des gleichen Codes mit der Option numactl --physcpubin ergab genau die gleichen Ergebnisse für alle Kerne außer einem. Ich änderte die Frequenz der Kerne auf Turbo, auf andere Werte half nichts. Alle Kerne liefen mit der erwarteten Geschwindigkeit, außer einer, die immer langsamer lief als die anderen. Dieser Effekt hat den Neustart überstanden.

Ich habe den Computer neu gestartet und HyperThreading im BIOS deaktiviert. Als es wieder online ging, war es wieder in Ordnung. Ich habe dann HyperThreading eingeschaltet und es ist in Ordnung, bis jetzt.

Bizzare. Keine Ahnung, was das sein könnte.

    
angainor 28.11.2014 09:40
quelle