Festlegen der Affinität für mehrere Kerne auf einem Dual-CPU-System

1164
Sarmes

Wir verwenden einige Systeme mit 2cpu mit 6 Kernen / 12 Threads, also insgesamt 24 Threads, für eine Vielzahl von Multitread-Simulationen. Da das Problem nicht perfekt skaliert ist, werden normalerweise 4 Probleme in Parralel mit jeweils 5 Threads ausgeführt. 4 Kerne zur Verfügung stehen, um die 4 Threads auszuführen, die die Simulationen und die Vor- und Nachbearbeitung starten. Ich habe einige merkwürdige Leistungsunterschiede für identische Simulationen festgestellt.

Meine Idee war, dass ich durch die Verwendung der Affinität die Leistung vielleicht etwas mehr regulieren und den Prozess so lenken könnte, dass er nicht über 2 CPU verteilt wird, so dass das Problem nicht über verschiedene Teile des Cache und des Speichers verteilt wird, sondern auf einen einzelnen Wert fixiert wird CPU oder Kerne auf der CPU.

Ich kann die Affinität im Task-Manager einstellen, sobald der Prozess ausgeführt wird, aber ich möchte sie in einer Batch-Datei festlegen.

zum Beispiel:

start / affinity HEXNUM myprog3.exe

Dabei ist HEXNUM beispielsweise: 1F000 (die Hex-Darstellung von 011111000000000000)

wenn das Ziel war, es auf dem Kern auszuführen: 0,1,2,3,4 von CPU2

oder HEXNUM 1F die hexadezimale Darstellung von 011111, wenn es auf Core 0,1,2,3,4 von cpu1 laufen soll.

Aber wie es scheint, funktioniert es nicht, wie ich es erwarte: Wenn ich eine Simulation mit 5 Threads ohne Affinitätsspezifikation starte, benötigt der Prozess 20-21% der CPU. Wenn ich 5 Stufen beginne, mit einer Affinität zu 6 Kernen, funktioniert es auch, aber wenn ich 5 Stufen mit einer Affinität zu 5 Kernen beginne. Es dauert nur 13% und wenn ich in den Task-Manager schaue (Windows 7 64 Pro), sieht es so aus, als würde er nur Core 1,3,5 verwenden.

Gibt es Probleme bei der Verwendung einer ungeraden Anzahl von Kernen für die Affinitätsspezifikation? oder mache ich etwas falsch?

Gibt es Personen, die Erfahrung mit der Affinitätsspezifikation haben und dabei einige Leistungssteigerungen erzielen konnten? Welche Strategien haben Sie angewendet?

0
Es sind keine 24 logischen Kerne verfügbar. Ich führe 4 Simulationen mit jeweils 5 Threads durch, wobei 24- (4x5) = 4 Threads für den Overhead übrig bleiben. (was ist mit -1?) Sarmes vor 9 Jahren 0
Ich glaubte, die Frage sei nicht klar. Downvotes sind natürlich aus einem bestimmten Grund anonym. Ich schätze es nicht, dass Sie davon ausgehen, dass ich es war. Ramhound vor 9 Jahren 0
Verwandte Themen: [Wie funktioniert die Windows-Prozessoraffinität mit Hyperthread-CPUs?] (Http://superuser.com/questions/347982/how-does-windows-prozessor-affinity-work-with-hyperthreaded-cpus) Ƭᴇcʜιᴇ007 vor 9 Jahren 0
@ Ƭᴇcʜιᴇ007, Ja, es ist verwandt, aber dieser Beitrag behandelt nur die Grundlagen der Affinitätsspezifikation. Ich hoffte auf einige Antworten / Kommentare von Benutzern, die Erfahrung mit der Einstellung der Affinität zu Multithread-Problemen in Multi-CPU-Konfigurationen haben. Und auch meine Frage, warum 5 Fäden, die auf 5 Kernen gesetzt sind, auf Abstand funktioniert, 5 Fäden auf 6 Kernen, es distinghuises. Sarmes vor 9 Jahren 0
Ich erwähnte es als verwandt für diejenigen, die nach verwandten Informationen suchten (nach ähnlichen Problemen oder möglichen Antworten), ohne darauf hinzuweisen, dass dies ein Betrug war. Fortfahren. ;) Ƭᴇcʜιᴇ007 vor 9 Jahren 0
Ich habe keine Erklärung für Ihre spezifischen Ergebnisse, aber ich werde sagen, dass es im Allgemeinen am besten ist, Affinitäten in Ruhe zu lassen. Windows weist Threads automatisch "idealen Prozessoren" zu und steuert sie zu diesen, um die Cache-Nutzung zu optimieren. Wenn Sie mit Affinitäten zu "kreativ" sind, werden Sie häufig in Situationen geraten, in denen Threads, die ausgeführt werden können, eine Zeitlang nicht ausgeführt werden können, da Sie sie von den einzigen derzeit verfügbaren CPUs gesperrt haben. Es ist im Allgemeinen besser, wenn der Rechendurchsatz irgendwo ausgeführt wird als nirgendwo. Jamie Hanrahan vor 7 Jahren 1

0 Antworten auf die Frage