Mehrere Prozessoren

Computer mit mehreren Prozessoren sind in der Regel für eine von zwei Architekturen konzipiert: non-uniform memory access (NUMA) oder Symmetric Multiprocessing (SMP).

In einem NUMA-Computer ist jeder Prozessor näher an einigen Teilen des Arbeitsspeichers als andere, sodass der Speicherzugriff für einige Teile des Arbeitsspeichers schneller ist als für andere Teile. Unter dem NUMA-Modell versucht das System, Threads auf Prozessoren zu planen, die sich in der Nähe des verwendeten Arbeitsspeichers befinden. Weitere Informationen zu NUMA finden Sie unter NUMA-Unterstützung.

Auf einem SMP-Computer stellen zwei oder mehr identische Prozessoren oder Kerne eine Verbindung mit einem einzelnen freigegebenen Standard Arbeitsspeicher her. Unter dem SMP-Modell kann jeder Thread jedem Prozessor zugewiesen werden. Daher ähnelt das Planen von Threads auf einem SMP-Computer dem Planen von Threads auf einem Computer mit einem einzelnen Prozessor. Der Scheduler verfügt jedoch über einen Pool von Prozessoren, sodass er die gleichzeitige Ausführung von Threads planen kann. Die Planung wird weiterhin von der Threadpriorität bestimmt, kann jedoch durch festlegen der Threadaffinität und des idealen Threadprozessors beeinflusst werden, wie in diesem Thema erläutert.

Threadaffinität

Die Threadaffinität erzwingt, dass ein Thread auf einer bestimmten Teilmenge von Prozessoren ausgeführt wird. Das Festlegen der Threadaffinität sollte im Allgemeinen vermieden werden, da dies die Fähigkeit des Planers beeinträchtigen kann, Threads effektiv über Prozessoren hinweg zu planen. Dies kann die Durch parallele Verarbeitung erzeugten Leistungssteigerungen verringern. Eine geeignete Verwendung der Threadaffinität ist das Testen der einzelnen Prozessoren.

Das System stellt die Affinität mit einer Bitmaske dar, die als Prozessoraffinitätsmaske bezeichnet wird. Die Affinitätsmaske ist die Größe der maximalen Anzahl von Prozessoren im System, wobei Bits festgelegt sind, um eine Teilmenge von Prozessoren zu identifizieren. Zunächst bestimmt das System die Teilmenge der Prozessoren in der Maske.

Sie können die aktuelle Threadaffinität für alle Threads des Prozesses abrufen, indem Sie die GetProcessAffinityMask-Funktion aufrufen. Verwenden Sie die SetProcessAffinityMask-Funktion , um die Threadaffinität für alle Threads des Prozesses anzugeben. Um die Threadaffinität für einen einzelnen Thread festzulegen, verwenden Sie die SetThreadAffinityMask-Funktion . Die Threadaffinität muss eine Teilmenge der Prozessaffinität sein.

Auf Systemen mit mehr als 64 Prozessoren stellt die Affinitätsmaske zunächst Prozessoren in einer einzelnen Prozessorgruppe dar. Die Threadaffinität kann jedoch auf einen Prozessor in einer anderen Gruppe festgelegt werden, wodurch die Affinitätsmaske für den Prozess geändert wird. Weitere Informationen finden Sie unter Prozessorgruppen.

Idealer Threadprozessor

Wenn Sie einen idealen Threadprozessor angeben, führt der Planer den Thread nach Möglichkeit auf dem angegebenen Prozessor aus. Verwenden Sie die SetThreadIdealProcessor-Funktion , um einen bevorzugten Prozessor für einen Thread anzugeben. Dies garantiert nicht, dass der ideale Prozessor ausgewählt wird, sondern bietet dem Planer einen nützlichen Hinweis. Auf Systemen mit mehr als 64 Prozessoren können Sie die SetThreadIdealProcessorEx-Funktion verwenden, um einen bevorzugten Prozessor in einer bestimmten Prozessorgruppe anzugeben.

NUMA-Unterstützung

Prozessorgruppen