Freigeben über


Mehrere Prozessoren

Computer mit mehreren Prozessoren sind in der Regel für eine von zwei Architekturen ausgelegt: nicht einheitlicher Speicherzugriff (NUMA) oder symmetrische Multiprocessing (SMP).

In einem NUMA-Computer ist jeder Prozessor näher an einigen Teilen des Arbeitsspeichers als andere, wodurch der Speicherzugriff für einige Teile des Arbeitsspeichers schneller als andere Teile erfolgt. 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 Support.

In einem SMP-Computer stellen zwei oder mehr identische Prozessoren oder Kerne eine Verbindung mit einem einzigen gemeinsam genutzten Hauptspeicher 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 Threads gleichzeitig ausgeführt werden können. Die Planung wird weiterhin von der Threadpriorität bestimmt, kann jedoch beeinflusst werden, indem threadaffine und thread ideale Prozessor festgelegt werden, wie in diesem Thema beschrieben.

Threadaffinität

Threadaffinität erzwingt die Ausführung eines Threads für eine bestimmte Teilmenge von Prozessoren. Das Festlegen der Threadaffinität sollte im Allgemeinen vermieden werden, da sie die Fähigkeit des Schedulers beeinträchtigen kann, Threads effektiv über Prozessoren hinweg zu planen. Dies kann die Leistungsgewinne verringern, die durch parallele Verarbeitung erzeugt werden. Eine geeignete Verwendung der Threadaffinität besteht darin, jeden Prozessor zu testen.

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. 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.

Thread idealer Prozessor

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

NUMA Support-

Prozessorgruppen