2017-06-11 3 views
0

Ich fand das folgende Zitat aus einer anderen Antwort (Performance difference for multi-thread and multi-process):Können die zwei Threads eines virtuellen Kerns (Hyperthreading) unterschiedliche OS-Prozesse ausführen?

Als nächst Sie CPUs mit „Hyper-Threading“ haben können, die (zumindest ) zwei Threads auf einem Kern sehr schnell laufen können - aber, keine Prozesse (seit die "hyperthreaded" -Threads können nicht unterschiedliche Adressräume verwenden) - noch ein weiterer Fall, in dem Threads leistungsmäßig gewinnen können.

Ist das korrekt? Die zwei Threads eines virtuellen Kerns (Hyperthreading) können nicht verschiedene OS-Prozesse ausführen? Wenn ich auf einer Hyperthreaded-Maschine eine Programmarchitektur habe, die "Worker" -Prozesse verwendet, die ein "Supervisor" -Prozess mit Sockets kommuniziert, würde ich wahrscheinlich eine Leistungssteigerung durch Verschieben dieser Worker-Prozesse in den Supervisor-Prozess sehen als Threads (Verlassen der Sockets und alles andere gleich)?

Antwort

0

Der erste Teil der Frage kann schnell beantwortet werden, Sie können es auf Ihrem System testen, wenn es das gleiche ist.

Auf meinem alten Windows-System mit einer Intel-CPU kann ich aus dem Task-Manager die Affinität von verschiedenen Programmen (oder Prozessen) auf jedem der 2 HT eines Kerns festlegen, sehen, dass sie beide tatsächlich dort laufen.

Bei der zweiten Frage mit Workers and Supervisors konnten Sie einen kleinen Leistungsgewinn (zumindest unter Linux) erzielen, indem Sie sie im selben Prozess haben. Dies liegt daran, wenn Sie eine Aufgabe machen schalten Sie machen auch die Seite Tabelle (intel CR3-Register) gesetzt, und der Code sieht so etwas wie dies bei Taskwechsel:

if (newProcess != oldProcess) 
    CR3 = new page table 

Einstellung CR3 effektiv den TLB wie die Seite ungültig Tabellen unterscheiden sich. Die Konsequenz ist, dass die CPU eine Seitentabelle ausführen muss, um die korrekten Übersetzungen zu finden. Auf einer 64-Bit-CPU dauert eine Seitenwanderung typischerweise 5 Speicherwege, die von 5 * TLB 2 -Zugriff (jeweils ~ 3 Zyklen) bis zu 5 * Speicherzugriff (jeweils ~ 300 Zyklen) kosten.

Verwandte Themen