Wiele procesorów
Komputery z wieloma procesorami są zwykle zaprojektowane z myślą o jednej z dwóch architektur: nieujednolity dostęp do pamięci (NUMA) lub symetryczny wieloprocesorowy (SMP).
W komputerze NUMA każdy procesor jest bliżej niektórych części pamięci niż inne, co sprawia, że dostęp do pamięci jest szybszy dla niektórych części pamięci niż inne części. W modelu NUMA system próbuje zaplanować wątki na procesorach, które są zbliżone do używanej pamięci. Aby uzyskać więcej informacji na temat NUMA, zobacz NUMA Support.
Na komputerze SMP dwa lub więcej identycznych procesorów lub rdzeni łączą się z jedną współdzieloną pamięcią główną. W modelu SMP każdy wątek można przypisać do dowolnego procesora. W związku z tym planowanie wątków na komputerze SMP jest podobne do planowania wątków na komputerze z jednym procesorem. Jednak harmonogram ma pulę procesorów, dzięki czemu może zaplanować równoczesne uruchamianie wątków. Planowanie jest nadal określane według priorytetu wątku, ale może mieć wpływ na ustawienie koligacji wątku i idealnego procesora wątku, zgodnie z opisem w tym temacie.
Koligacja wątków
koligacja wątków wymusza uruchomienie wątku w określonym podzestawie procesorów. Zwykle należy unikać ustawiania koligacji wątków, ponieważ może zakłócać możliwość planowania wątków w procesorach. Może to zmniejszyć wzrost wydajności generowany przez przetwarzanie równoległe. Odpowiednie użycie koligacji wątków polega na testowaniu każdego procesora.
System reprezentuje koligację z maską bitów nazywaną maską koligacji procesora. Maska koligacji to rozmiar maksymalnej liczby procesorów w systemie z bitami ustawionymi w celu zidentyfikowania podzestawu procesorów. Początkowo system określa podzestaw procesorów w masce.
Koligację bieżącego wątku dla wszystkich wątków procesu można uzyskać, wywołując funkcję GetProcessAffinityMask. Użyj funkcji SetProcessAffinityMask, aby określić koligację wątków dla wszystkich wątków procesu. Aby ustawić koligację wątku dla pojedynczego wątku, użyj funkcji SetThreadAffinityMask. Koligacja wątku musi być podzbiorem koligacji procesu.
W systemach z ponad 64 procesorami maska koligacji początkowo reprezentuje procesory w jednej grupie procesorów. Koligację wątków można jednak ustawić na procesor w innej grupie, co zmienia maskę koligacji dla procesu. Aby uzyskać więcej informacji, zobacz Grupy procesorów.
Wątek idealny procesor
Po określeniu wątku idealnego procesoraharmonogram uruchamia wątek na określonym procesorze, gdy jest to możliwe. Użyj funkcji SetThreadIdealProcessor, aby określić preferowany procesor dla wątku. Nie gwarantuje to, że idealny procesor zostanie wybrany, ale zapewnia przydatną wskazówkę dla harmonogramu. W systemach z więcej niż 64 procesorami można użyć funkcji SetThreadIdealProcessorEx, aby określić preferowany procesor w określonej grupie procesorów.
Tematy pokrewne
-
obsługi NUMA