Jak działa koligacja procesorów Windows w przypadku procesorów hyperthreaded? Użyjmy przykładu (na zdjęciu) systemu z czterema rdzeniami, z których każdy ma wirtualny rdzeń hiperwątkowy.
- Które rdzenie odpowiadają poszczególnym „procesorom” poniżej?
- Czy (powiedzmy) procesor 6 i procesor 7 poniżej stanowią jeden rdzeń; HT i prawdziwy rdzeń?
- Jeśli na przykład procesor 6 reprezentuje prawdziwy rdzeń, a procesor 7 rdzeń HT, czy wątek przypisany tylko do procesora CPU7 otrzyma tylko resztki zasobów prawdziwego rdzenia? (zakładając, że rdzeń wykonuje inne zadania)
- Czy hyperthreading jest zarządzany całkowicie w procesorze, tak że wątki są żonglowane wewnętrznie? Jeśli tak, to czy dotyczy to zakresu procesora, czy zakresu podstawowego? Przykład: jeśli CPU 6 i 7 reprezentują jeden rdzeń, czy nie ma znaczenia, do którego procesu jest przypisany, ponieważ CPU przypisze zasoby odpowiednio do działającego wątku?
- Zauważam, że długo działające procesy jednowątkowe są dość często odbijane wokół rdzeni, przynajmniej według menedżera zadań. Czy to oznacza, że przypisanie procesu do jednego rdzenia nieco poprawi wydajność (unikając przełączników kontekstu i unieważnienia pamięci podręcznej itp.)? Jeśli tak, to czy mogę wiedzieć, że nie przypisuję do „tylko wirtualnego rdzenia”?
To wszystko jest dla mnie bardzo niejasne i mylące. HT jest świetny, ale z pewnością wydaje się zmniejszać przejrzystość alokacji zasobów.
windows
scheduling
hyper-threading
affinity
Charles Burns
źródło
źródło
Odpowiedzi:
Zakładając, że mamy Core 1, 2, 3 i 4, CPU4 i CPU5 reprezentują rdzeń 3.
Nie ma różnicy między nimi - oba mają fizyczny interfejs sprzętowy do procesora, interfejs logiczny jest zaimplementowany sprzętowo (więcej informacji znajduje się w arkuszu danych procesora Intel Core Processor, tom 1 ). Zasadniczo każdy rdzeń ma dwie oddzielne jednostki wykonawcze, ale dzieli między nimi niektóre wspólne zasoby. Dlatego w niektórych przypadkach hiperwątkowanie może faktycznie obniżyć wydajność.
Patrz wyżej. Wątek przypisany TYLKO CPU6 lub TYLKO CPU7 będzie działał z dokładnie taką samą prędkością (zakładając, że wątek działa tak samo, a pozostałe rdzenie procesora są w stanie bezczynności). System Windows wie o procesorach z obsługą HT, a harmonogram procesów uwzględnia te rzeczy.
Obie. Sam sprzęt nie planuje, na których rdzeniach uruchamiane są programy, takie jest zadanie systemu operacyjnego. Sam procesor jest jednak odpowiedzialny za współdzielenie zasobów między rzeczywistymi jednostkami wykonawczymi, a Intel decyduje, w jaki sposób można napisać kod, aby uczynić to tak wydajnym, jak to możliwe.
Jest to normalne zachowanie i nie, przypisanie go do jednego rdzenia nie poprawi wydajności. Biorąc to pod uwagę, jeśli z jakiegoś powodu chcesz upewnić się, że pojedynczy proces jest wykonywany tylko na jednym fizycznym rdzeniu, przypisz go do dowolnego pojedynczego procesora logicznego.
Powód, dla którego proces „odbija się”, wynika z harmonogramu procesu. Jest to normalne zachowanie i najprawdopodobniej zmniejszysz wydajność, ograniczając liczbę rdzeni, na których proces może być wykonywany (niezależnie od liczby wątków), ponieważ program planujący procesy musi teraz pracować ciężej, aby wszystko działało zgodnie z nałożonymi ograniczeniami. Tak, w większości przypadków kara ta może być nieistotna, ale najważniejsze jest, jeśli nie masz ku temu powodu, nie rób tego !
źródło
Układ procesora powinien być tak zorganizowany, aby system operacyjny, który nie rozpoznaje wszystkich procesorów, uzyskał maksymalną możliwą wydajność. Oznacza to, że jeden wirtualny rdzeń z każdego fizycznego rdzenia zostanie wymieniony, zanim pojawi się drugi wirtualny rdzeń z dowolnego rdzenia fizycznego.
Załóżmy na przykład, że masz cztery rdzenie hiperwątkowe, zwane A, B, C i D. Jeśli założymy, że A i B współużytkują pamięć podręczną L2, a C i D współużytkują pamięć podręczną L2, kolejność powinna wyglądać następująco:
0 = A1 1 = C1 2 = B1 3 = D1 4 = A2 5 = C2 6 = B2 7 = D2
W ten sposób system operacyjny, który pobiera tylko dwa procesory, może korzystać z całej pamięci podręcznej L2. Ponadto system operacyjny, który pobiera tylko cztery procesory, może korzystać ze wszystkich jednostek wykonawczych.
Znowu tak właśnie powinno być.
Oczywiście, jeśli używasz systemu operacyjnego, który rozumie topologię procesora, nie ma to znaczenia. BIOS wypełnia tabelę, która wyjaśnia, które rdzenie współużytkują jednostki wykonawcze, które współużytkują pamięć podręczną i tak dalej. Każdy nowoczesny system operacyjny, którego prawdopodobnie będziesz używać i który w pełni obsługuje procesor, rozumie pełną topologię procesora.
źródło
Ostatecznie sprowadza się to do tego, że często niewiele (użytkownik końcowy) może zrobić z powinowactwem do wątku, aby znacząco wpłynąć na wydajność, poza upewnieniem się, że korzystasz z aktualnego systemu operacyjnego, który wie o różnych bitach w Twój system.
Jeśli znajdziesz obciążenia, w których ręczne przypisywanie koligacji ma znaczący wpływ, zgłoś to jako błąd twórcy aplikacji, aby program mógł zostać naprawiony.
źródło