Właściciele procesorów Intela najnowszej generacji są poniekąd zmuszeni do zaktualizowania systemu operacyjnego. Różnica wydajności między Windowsem 10, a Windowsem 11, który otrzymał ekskluzywną dla siebie funkcję Intel Thread Director, jest tak ogromna, że tylko szaleńcy pozostają na starszej wersji, tracąc dobre kilka, a czasem nawet kilkanaście procent wydajności zarówno w programach, jak i grach. Co więc takiego wyjątkowego jest w technologii Intel Thread Director i za dokładnie ona odpowiada? Zanim do tego przejdziemy, warto poznać nieco teorii i historii.
O schedulerach, czyli planistach, ale też rdzeniach i wątkach
Przed premierą procesorów Intel Core 12. generacji, które zachwycają wydajnością i przerażają nieco poborem energii, desktopowe CPU klasy konsumenckiej (AMD oraz Intela) rozwijały się w oczekiwany sposób. Ciągle dążyły do możliwie najwyższej wydajności, zwiększając zarówno swoje taktowanie, jak i IPC, czyli instrukcje na cykl, nie przejmując się zbytnio zużyciem energii.
Czytaj też: Xiaomi Loop Liquidcool, to naprawdę chłodzenie nowej generacji? Firma nieco przesadziła
Taką strategię ciągle pielęgnuje AMD, a przynajmniej będzie ją pielęgnować przez najbliższe dwa lata, bo Intel, inspirując się podejściem Apple i producentów SoC do smartfonów, zaczął przejmować się tym, ile jego procesory pożerają energii. Przynajmniej w codziennych zadaniach “biurowych”, jak wynika z testów najnowszych Core. Stąd obecność w Alder Lake łącznie dwóch rodzajów rdzeni – Performance oraz Efficiency, które są nastawione kolejno na wydajność oraz energooszczędność.
Zanim wejdziemy w szczegóły, warto wspomnieć o tym, że najprostsze schedulery “rozkazywały” procesorom jeszcze przed technologią Hyper-Threading Intela, czy SMT od AMD. Wtedy miały bardzo, ale to bardzo ułatwione zadanie, bo podejmowały decyzje głównie na podstawie temperatury rdzeni i dostępnej energii w myśl “podbijania” zegarów. Pierwsze problemy napotkały już w erze ciągle towarzyszącej nam wielowątkowości, czyli wyciskaniu z każdego fizycznego rdzenia dwóch wątków.
Od tego momentu schedulery były zmuszone rozdzielać zadania nie tylko na rdzenie, ale też wątki. Warto tutaj wspomnieć, że te nie oferują tego samego poziomu wydajności, bo rdzenie i wątki nie działają tak samo. Odseparowywanie dwóch wątków z jednego rdzenia (który w systemie jest rzecz jasna uznawany za swój wirtualny odpowiednik, czyli wątek) sprawia, że te korzystają z tych samych zasobów, czyli mają m.in. współdzielony dostęp do pamięci podręcznej i wyższe opóźnienia.
“Sztuczne wątki” były więc tym pierwszym problemem dla schedulerów, które musiały rozróżniać je od tych “pełnoprawnych” i odpowiednio rozdysponowywać obciążenia. Spowodowały jednak wzrosty opóźnień i generowanego ciepła, a nawet doprowadziły swojego czasu do całego mnóstwa dyskusji na temat tego, czy są w ogóle potrzebne. Dziś doskonale wiemy, że są i maksymalizują wydajność procesorów, choć nie we wszystkich programach i zastosowaniach.
Czytaj też: Chłodzenia LGA1700. Wszystko, co musicie wiedzieć o coolerach dla procesorów Alder Lake-S
Dlatego właśnie wielowątkowość nie jest czymś, co widzimy w segmencie smartfonów, czy nawet laptopów i komputerów, odkąd m.in. Apple przeszło na “mobilną” architekturę ARM, porzucając rozwiązania Intela. Jest to związane nawet ze zjawiskiem “wybudzania” rdzeni ze stanu spoczynku, kiedy zaczną być potrzebne, bo to generowało dodatkowe koszty po stronie energii statycznej.
Wracając jednak już do meritum, wraz z premierą procesorów Intel Core 12. generacji schedulery musiały zacząć stawiać czoła jeszcze większemu problemowi – dzieleniu zadań nie tylko na główne i poboczne wątki, ale też między konkretne rdzenie. W procesorach Alder Lake (przede wszystkim rodzinach i7 oraz i9) znajdują się już bowiem dwa zestawy rdzeni. Jedne są tymi “tradycyjnymi” o możliwie najwyższej wydajności (Performance na bazie architektury Golden Cove), a drugie tymi energooszczędnymi (Efficiency na podstawie Gracemont). Przez to właśnie Intel nawiązał współpracę z Microsoftem i dzięki temu w Windows 11 znalazł się specjalny scheduler Intel Thread Director.
Intel Thread Director, bo obciążeniem trzeba jakoś zarządzać
Przez tą wyjątkowość procesorów Alder Lake, scheduler musi radzić sobie z aż trzema “pułapami wydajności”, bo kolejno rdzeniami Performance, rdzeniami Efficiency i dodatkowymi wątkami na rdzeniach P. W tym celu, aby zapewnić maksymalne wykorzystanie rdzeni, Intel musiał współpracować z Microsoftem w celu zaimplementowania nowego harmonogramu obsługującego tego typu hybrydowe procesory. Jednak w grę wchodzą nie tylko rozwiązania po stronie oprogramowania, ale też samego sprzętu.
Sfera hardware dotyczy specjalnego mikrokontrolera. Ten posiada dostęp do wszystkich informacji na temat procesora, monitorując nawet instrukcje na poziomie nanosekund i komunikując się z systemem Windows 11 w około 30 mikrosekund. Ten mikrokontroler jest w stanie zapewnić systemowi szereg danych telemetrycznych niskiego poziomu. Te dane system wykorzystuje w celu inteligentnego i zoptymalizowanego sposobu przekierowywania konkretnych zadań na odpowiednie wątki i rdzenie.
Jednak to scheduler w systemie operacyjnym podejmuje finalne decyzje na podstawie otrzymanych danych wedle stosownych ustawień. Przykładowo przy działaniu w ramach zrównoważonego planu działania, rdzenie Performance zawsze będą zajmować się priorytetowo zmaksymalizowanym programem, oddając te w tle rdzeniom Efficiency, ale przy planie Wysokiej Wydajności ten schemat działania ustanie.
W praktycznym ujęciu Intel Thread Director w Windows 11 sprawia, że scheduler skupia się nie tylko na wydajności jako takiej, ale też efektywności energetycznej. Tak też Windows 10 po prostu uznaje rdzenie E za te o niższej częstotliwości i nie rozpoznaje zarówno tego, jak każdy z rdzeni radzi sobie, jak i nie ma dostępu do priorytetyzacji instrukcji. To ostatnie sprawia, że wytrenowany na całych godzinach danych zebranych podczas pracy, algorytm Thread Director jest w stanie zidentyfikować konkretne zadanie i dopasować je do danej specyfiki rdzenia pod kątem wydajności i efektywności. Dzięki temu jest w stanie manipulować wątkami w czasie rzeczywistym w oparciu o cztery klasy obciążeń:
- Klasa 0 – większość obciążeń
- Klasa 1 – obciążenia z instrukcjami AVX/AVX2
- Klasa 2 – obciążenia AVX-VNNI
- Klasa 3 – obliczenia nieograniczone żadnym wąskim gardłem
Czytaj też: Wyjaśniamy tajemnice USB i wskazujemy, dlaczego USB-C jest tak rewolucyjny
Na podstawie tej hierarchii rdzenie E zajmują się priorytetowo obliczeniami w klasie 3, a rdzenie P tymi w 1 i 2, choć ta druga ma priorytet nad pierwszą. Pozostałe obliczenia mieszczą się w klasie 0 i jeśli przypisane do nich zostaną rdzenie P, podsystemy będą na bieżąco regulować ich częstotliwość. Thread Director zapewnia nawet systemowi tak wiele danych, że umożliwia mu przerzucanie zadań między wątkami zależnie od ich fazy.