Wielowątkowość (architektura komputera)
W architekturze komputerowej wielowątkowość to zdolność jednostki centralnej (CPU) (lub pojedynczego rdzenia w procesorze wielordzeniowym ) do jednoczesnego wykonywania wielu wątków , obsługiwanych przez system operacyjny . Podejście to różni się od przetwarzania wieloprocesowego . W aplikacji wielowątkowej wątki współdzielą zasoby jednego lub wielu rdzeni, które obejmują jednostki obliczeniowe, pamięci podręczne procesora i bufor translacji (TLB).
Tam, gdzie systemy wieloprocesorowe obejmują wiele kompletnych jednostek przetwarzających w jednym lub kilku rdzeniach, wielowątkowość ma na celu zwiększenie wykorzystania pojedynczego rdzenia za pomocą równoległości na poziomie wątków , a także równoległości na poziomie instrukcji . Ponieważ te dwie techniki uzupełniają się, są one łączone w prawie wszystkich nowoczesnych architekturach systemów z wieloma procesorami wielowątkowymi i procesorami z wieloma rdzeniami wielowątkowymi.
Przegląd
Paradygmat wielowątkowości stał się bardziej popularny, ponieważ wysiłki mające na celu dalsze wykorzystanie równoległości na poziomie instrukcji utknęły w martwym punkcie od późnych lat 90. Pozwoliło to na ponowne wyłonienie się koncepcji obliczeń przepustowości z bardziej wyspecjalizowanej dziedziny przetwarzania transakcji . Chociaż dalsze przyspieszenie pojedynczego wątku lub pojedynczego programu jest bardzo trudne, większość systemów komputerowych w rzeczywistości działa wielozadaniowo wśród wielu wątków lub programów. Zatem techniki poprawiające przepustowość wszystkich zadań skutkują ogólnym wzrostem wydajności.
Dwie główne techniki obliczeń przepustowości to wielowątkowość i wieloprocesorowość .
Zalety
Jeśli wątek otrzyma wiele braków w pamięci podręcznej , inne wątki mogą nadal korzystać z nieużywanych zasobów obliczeniowych, co może prowadzić do szybszego ogólnego wykonania, ponieważ zasoby te byłyby bezczynne, gdyby wykonywany był tylko jeden wątek. Ponadto, jeśli wątek nie może wykorzystać wszystkich zasobów obliczeniowych procesora (ponieważ instrukcje zależą od wyników innych), uruchomienie innego wątku może zapobiec bezczynności tych zasobów.
Niedogodności
Wiele wątków może kolidować ze sobą podczas współdzielenia zasobów sprzętowych, takich jak pamięci podręczne lub bufory translacji (TLB). W rezultacie czasy wykonywania pojedynczego wątku nie ulegają poprawie i mogą ulec pogorszeniu, nawet gdy wykonywany jest tylko jeden wątek, z powodu niższych częstotliwości lub dodatkowych etapów potoku, które są niezbędne do dostosowania sprzętu do przełączania wątków.
Ogólna wydajność jest różna; Intel twierdzi, że dzięki technologii Hyper-Threading poprawił się nawet o 30% , podczas gdy syntetyczny program wykonujący tylko pętlę niezoptymalizowanych zależnych operacji zmiennoprzecinkowych w rzeczywistości zyskuje 100% poprawę szybkości, gdy jest uruchamiany równolegle. Z drugiej strony ręcznie dostrojone programy języka asemblera przy użyciu MMX lub AltiVec rozszerzenia i wykonywanie wstępnego pobierania danych (jak może to zrobić dobry koder wideo) nie cierpi z powodu chybień w pamięci podręcznej ani bezczynnych zasobów obliczeniowych. W związku z tym takie programy nie korzystają ze sprzętowej wielowątkowości i mogą faktycznie wykazywać obniżoną wydajność z powodu rywalizacji o współdzielone zasoby.
Z punktu widzenia oprogramowania sprzętowa obsługa wielowątkowości jest bardziej widoczna dla oprogramowania i wymaga więcej zmian zarówno w programach użytkowych, jak iw systemach operacyjnych niż wieloprocesorowość. Techniki sprzętowe używane do obsługi wielowątkowości są często równoległe do technik programowych używanych do wielozadaniowości komputera . Planowanie wątków jest również poważnym problemem w wielowątkowości.
Rodzaje wielowątkowości
Wielowątkowość z przeplotem/temporalna
Wielowątkowość gruboziarnista
Najprostszy typ wielowątkowości występuje, gdy jeden wątek działa do momentu zablokowania go przez zdarzenie, które normalnie spowodowałoby przeciągnięcie z dużym opóźnieniem. Takie zatrzymanie może być brakiem pamięci podręcznej, która musi uzyskać dostęp do pamięci poza chipem, co może wymagać setek cykli procesora, aby dane powróciły. Zamiast czekać na rozwiązanie przeciągnięcia, procesor wielowątkowy przełączałby wykonywanie na inny wątek, który był gotowy do działania. Dopiero po otrzymaniu danych dla poprzedniego wątku poprzedni wątek został ponownie umieszczony na liście gotowych do uruchomienia wątków.
Na przykład:
- Cykl i : wydawana jest instrukcja j z wątku A.
- Cykl i + 1 : wydawana jest instrukcja j + 1 z wątku A.
- Cykl i + 2 : wydawana jest instrukcja j + 2 z wątku A , która jest instrukcją ładowania, której brakuje we wszystkich pamięciach podręcznych.
- Cykl i + 3 : wywołany harmonogram wątków, przełącza się na wątek B .
- Cykl i + 4 : wydawana jest instrukcja k z wątku B.
- Cykl i + 5 : wydawana jest instrukcja k + 1 z wątku B.
Koncepcyjnie jest to podobne do wielozadaniowości kooperacyjnej stosowanej w systemach operacyjnych czasu rzeczywistego , w których zadania dobrowolnie rezygnują z czasu wykonania, gdy muszą czekać na jakiś rodzaj zdarzenia. Ten typ wielowątkowości jest znany jako wielowątkowość blokowa, kooperacyjna lub gruboziarnista.
Celem sprzętowej obsługi wielowątkowości jest umożliwienie szybkiego przełączania między zablokowanym wątkiem a innym wątkiem gotowym do działania. Przełączanie z jednego wątku do drugiego oznacza, że sprzęt przełącza się z używania jednego zestawu rejestrów do innego. Aby osiągnąć ten cel, replikowany jest sprzęt dla widocznych rejestrów programu, a także niektórych rejestrów kontrolnych procesora (takich jak licznik programu). Na przykład, aby szybko przełączać się między dwoma wątkami, procesor jest zbudowany z dwoma zestawami rejestrów.
Dodatkowa sprzętowa obsługa wielowątkowości umożliwia przełączanie wątków w jednym cyklu procesora, co zapewnia poprawę wydajności. Ponadto dodatkowy sprzęt pozwala każdemu wątkowi zachowywać się tak, jakby działał samodzielnie i nie współdzielił żadnych zasobów sprzętowych z innymi wątkami, minimalizując liczbę zmian oprogramowania potrzebnych w aplikacji i systemie operacyjnym do obsługi wielowątkowości.
Wiele rodzin mikrokontrolerów i wbudowanych procesorów ma wiele banków rejestrów, aby umożliwić szybkie przełączanie kontekstu dla przerwań. Takie schematy można uznać za rodzaj blokowej wielowątkowości między wątkami programu użytkownika i wątkami przerwań. [ potrzebne źródło ]
Drobnoziarnista wielowątkowość
Celem drobnoziarnistej wielowątkowości jest usunięcie wszystkich blokad zależności danych z potoku wykonawczego . Ponieważ jeden wątek jest względnie niezależny od innych wątków, istnieje mniejsze prawdopodobieństwo, że jedna instrukcja na jednym etapie potokowania będzie wymagała wyjścia ze starszej instrukcji w potoku. Koncepcyjnie jest podobny do wielozadaniowości z wywłaszczaniem stosowanej w systemach operacyjnych; analogią byłoby to, że przedział czasu przydzielony każdemu aktywnemu wątkowi to jeden cykl procesora.
Na przykład:
- Cykl i + 1 : wydawana jest instrukcja z wątku B.
- Cykl i + 2 : wydawana jest instrukcja z wątku C.
Ten typ wielowątkowości został po raz pierwszy nazwany przetwarzaniem beczki, w którym klepki beczki reprezentują etapy potoku i ich wątki wykonawcze. Nowoczesną terminologią jest wielowątkowość z przeplotem, z wywłaszczaniem, drobnoziarnista lub z podziałem na czas.
Oprócz kosztów sprzętowych omówionych w bloku wielowątkowości, wielowątkowość z przeplotem wiąże się z dodatkowym kosztem każdego etapu potoku śledzenia identyfikatora wątku instrukcji, którą przetwarza. Ponadto, ponieważ w potoku jest wykonywanych jednocześnie więcej wątków, współdzielone zasoby, takie jak pamięci podręczne i TLB, muszą być większe, aby uniknąć przerzucania się między różnymi wątkami.
Jednoczesna wielowątkowość
Najbardziej zaawansowany typ wielowątkowości dotyczy procesorów superskalarnych . Podczas gdy normalny procesor superskalarny wydaje wiele instrukcji z jednego wątku w każdym cyklu procesora, w równoczesnej wielowątkowości (SMT) procesor superskalarny może wydawać instrukcje z wielu wątków w każdym cyklu procesora. Uznając, że każdy pojedynczy wątek ma ograniczoną ilość równoległości na poziomie instrukcji , ten typ wielowątkowości próbuje wykorzystać równoległość dostępną w wielu wątkach, aby zmniejszyć marnotrawstwo związane z nieużywanymi gniazdami problemów.
Na przykład:
- Cykl i : instrukcje j i j + 1 z wątku A oraz instrukcja k z wątku B są wydawane jednocześnie.
- Cykl i + 1 : instrukcja j + 2 z wątku A , instrukcja k + 1 z wątku B i instrukcja m z wątku C są wydawane jednocześnie.
- Cykl i + 2 : instrukcja j + 3 z wątku A oraz instrukcje m + 1 i m + 2 z wątku C są wydawane jednocześnie.
Aby odróżnić inne typy wielowątkowości od SMT, termin „ wielowątkowość czasowa ” jest używany do określenia, kiedy instrukcje z tylko jednego wątku mogą być wydawane jednocześnie.
Oprócz omawianych kosztów sprzętowych dla wielowątkowości z przeplotem, SMT ma dodatkowy koszt każdego etapu potoku śledzenia identyfikatora wątku każdej przetwarzanej instrukcji. Ponownie, współdzielone zasoby, takie jak pamięci podręczne i TLB, muszą być dostosowane do dużej liczby przetwarzanych aktywnych wątków.
Implementacje obejmują DEC (później Compaq ) EV8 (nieukończony), Intel Hyper-Threading Technology , IBM POWER5 / POWER6 / POWER7 / POWER8 / POWER9 , IBM z13 / z14 / z15 , Sun Microsystems UltraSPARC T2 , Cray XMT oraz AMD Bulldozer i Zen mikroarchitektury.
Specyfika wdrożenia
Głównym obszarem badań jest program planujący wątki, który musi szybko wybierać spośród listy gotowych do uruchomienia wątków do wykonania jako następny, a także utrzymywać listy gotowych do uruchomienia i zablokowanych wątków. Ważnym tematem podrzędnym są różne schematy priorytetów wątków, które mogą być używane przez program planujący. Harmonogram wątków może być zaimplementowany całkowicie w oprogramowaniu, całkowicie w sprzęcie lub jako kombinacja sprzęt/oprogramowanie.
Innym obszarem badań jest to, jakiego rodzaju zdarzenia powinny powodować przełączanie wątków: chybienia w pamięci podręcznej, komunikacja między wątkami, zakończenie DMA itp.
Jeśli schemat wielowątkowości replikuje cały stan widoczny dla oprogramowania, w tym uprzywilejowane rejestry kontrolne i TLB, umożliwia tworzenie maszyn wirtualnych dla każdego wątku. Dzięki temu każdy wątek może uruchamiać swój własny system operacyjny na tym samym procesorze. Z drugiej strony, jeśli zapisywany jest tylko stan trybu użytkownika, potrzeba mniej sprzętu, co pozwoliłoby na aktywację większej liczby wątków w tym samym czasie przy tym samym obszarze matrycy lub koszcie.
Zobacz też
Linki zewnętrzne
- A Survey of Processors with Explicit Multithreading , ACM , marzec 2003, autor: Theo Ungerer, Borut Robi i Jurij Silc
- System operacyjny | Różnica między wielozadaniowością, wielowątkowością i wieloprocesorowością GeeksforGeeks, 6 września 2018 r.