wieloprocesorowy, wielordzeniowy i hiperwątkowy

80

Czy ktoś mógłby polecić mi jakieś dokumenty, aby zilustrować różnice między procesorami wieloprocesorowymi, wielordzeniowymi i hiperwątkowymi? Zawsze jestem zdezorientowany tymi różnicami i zaletami / wadami każdej architektury w różnych scenariuszach.

EDYCJA: oto moje obecne rozumienie po nauce online i uczeniu się na podstawie komentarzy innych; czy ktoś mógłby przejrzeć komentarz?

  1. Myślę, że Hyper-Thread jest spośród nich najbardziej gorszą technologią, ale tanią. Jego główną ideą jest zduplikowane rejestry, aby zaoszczędzić czas przełączania kontekstu;
  2. Wieloprocesorowy jest lepszy niż hiperwątek, ale ponieważ różne procesory są na różnych chipach, komunikacja między różnymi procesorami ma dłuższe opóźnienia niż wielordzeniowe, a przy użyciu wielu chipów jest większy koszt i większe zużycie energii niż w przypadku wielordzeniowych ;
  3. wielordzeniowy integruje wszystkie procesory w jednym chipie, więc opóźnienie komunikacji między różnymi procesorami jest znacznie zmniejszone w porównaniu z wieloma procesorami. Ponieważ wykorzystuje jeden układ do obsługi wszystkich procesorów, zużywa mniej energii i jest tańszy niż system wieloprocesorowy.

z góry dzięki, George

George2
źródło
Hiperwątkowość nie jest gorsza. Jest to całkiem przydatne, szczególnie w przypadku serwerów. Występuje malejąca liczba zwrotów z ILP (utrzymywanie zajętości procesora przez przestawianie instrukcji sekwencyjnych). Hiperwątkowość jest alternatywą dla zwiększenia równoległości: wiele wątków sprzętowych jest wykonywanych bez większego narzutu.
Pozdrawiam
A co z moimi innymi uwagami dotyczącymi wielordzeniowych i wieloprocesorowych, czy uważasz, że moje punkty są prawidłowe? Nic złego?
George 2
1
@ George2 - Twoja zmiana jest prawdziwa. To jest cała idea. :) Najlepszą rzeczą, jaką można uzyskać na serwerze, jest prawdopodobnie wielordzeniowy procesor wielordzeniowy, ale do zwykłego użytku najlepszy jest wielordzeniowy!
Bogdan Constantinescu
Dzięki Bogdanie, z Twoim potwierdzeniem jestem pewniejszy! :-)
George2
To okropny opis hiperwątkowości. Głównym celem jest zrezygnowanie z pewnej wydajności na wątek, aby uzyskać wyższą całkowitą przepustowość, przy tylko niewielkim dodatkowym sprzęcie na frontonie niesprawnego rdzenia. Zobacz to pytanie i odpowiedź z pytaniem o podobny akapit w zaakceptowanej odpowiedzi (przed moją edycją, która to naprawiła).
Peter Cordes,

Odpowiedzi:

86

Wieloprocesorowy był pierwszą wersją: miałbyś jedną lub więcej płyt głównych z jednym lub więcej chipami procesora. Główny problem polegał na tym, że procesory musiały ujawniać część swoich danych wewnętrznych innemu procesorowi, aby nie wchodzić im w drogę.

Następnym krokiem była hiperwątkowość. Jeden układ na płycie głównej, ale niektóre elementy miały dwa razy wewnętrznie, więc mógł wykonać dwie instrukcje w tym samym czasie.

Obecny rozwój jest wielordzeniowy. To w zasadzie oryginalny pomysł (kilka kompletnych procesorów), ale w jednym chipie. Zaleta: projektanci chipów mogą łatwo umieścić dodatkowe przewody dla sygnałów synchronizacji w chipie (zamiast kierować je na pin, a następnie przez zatłoczoną płytę główną i do drugiego układu).

Dzisiejsze super komputery są wieloprocesorowe, wielordzeniowe: mają wiele płyt głównych z zwykle 2-4 procesorami, każdy procesor jest wielordzeniowy i każdy ma własną pamięć RAM.

[EDYCJA] Masz rację. Tylko kilka drobnych punktów:

  • Hyper-threading śledzi dwa konteksty naraz w jednym rdzeniu, eksponując więcej równoległości na niesprawny rdzeń procesora. Dzięki temu jednostki wykonawcze są zasilane pracą, nawet jeśli jeden wątek utknie w martwym punkcie pamięci podręcznej, błędnym przewidywaniu gałęzi lub oczekiwaniu na wyniki instrukcji o dużym opóźnieniu. Jest to sposób na uzyskanie większej całkowitej przepustowości bez replikowania dużej ilości sprzętu, ale jeśli już, spowalnia każdy wątek z osobna. Zobacz te pytania i odpowiedzi, aby uzyskać więcej informacji i wyjaśnić, co było nie tak w poprzednim brzmieniu tego akapitu.

  • Głównym problemem związanym z wieloma procesorami jest to, że działający na nich kod w końcu uzyska dostęp do pamięci RAM. Istnieje N procesorów, ale tylko jedna magistrala zapewnia dostęp do pamięci RAM. Musisz więc mieć sprzęt, który zapewni, że a) każdy procesor otrzyma odpowiednią ilość dostępu do pamięci RAM, b) który dostęp do tej samej części pamięci RAM nie powoduje problemów i c) co najważniejsze, że CPU 2 zostanie powiadomiony gdy CPU 1 zapisuje do jakiegoś adresu pamięci, który CPU 2 ma w swojej wewnętrznej pamięci podręcznej. Jeśli tak się nie stanie, procesor 2 z radością wykorzysta wartość z pamięci podręcznej, nieświadomy faktu, że jest nieaktualna

    Wyobraź sobie, że masz zadania na liście i chcesz je rozłożyć na wszystkie dostępne procesory. Więc CPU 1 pobierze pierwszy element z listy i zaktualizuje wskaźniki. CPU 2 zrobi to samo. Ze względu na wydajność oba procesory nie tylko skopiują kilka bajtów do pamięci podręcznej, ale całą „linię pamięci podręcznej” (cokolwiek to może być). Założenie jest takie, że kiedy czytasz bajt X, wkrótce przeczytasz także X + 1.

    Teraz oba procesory mają kopię pamięci w swojej pamięci podręcznej. CPU 1 pobierze wtedy następny element z listy. Bez synchronizacji pamięci podręcznej nie zauważyłby, że procesor 2 również zmienił listę i zacznie działać na tym samym elemencie, co procesor 2.

    To właśnie sprawia, że ​​praca wieloprocesorowa jest tak skomplikowana. Skutki uboczne mogą prowadzić do gorszej wydajności niż ta, którą można uzyskać, gdyby cały kod działał tylko na jednym procesorze. Rozwiązanie było wielordzeniowe: możesz łatwo dodać tyle przewodów, ile potrzebujesz, aby zsynchronizować pamięci podręczne; można nawet skopiować dane z jednej pamięci podręcznej do drugiej (aktualizowanie części linii pamięci podręcznej bez konieczności jej opróżniania i ponownego ładowania) itp. Lub logika pamięci podręcznej mogłaby zapewnić, że wszystkie procesory otrzymają tę samą linię pamięci podręcznej, gdy uzyskują dostęp do tej samej części prawdziwa pamięć RAM, po prostu blokująca CPU 2 na kilka nanosekund, aż CPU 1 wprowadzi swoje zmiany.

[EDIT2] Głównym powodem, dla którego wielordzeniowy jest prostszy niż wieloprocesorowy, jest to, że na płycie głównej po prostu nie można poprowadzić wszystkich przewodów między dwoma chipami, które byłyby potrzebne, aby synchronizacja była skuteczna. Dodatkowo sygnał przemieszcza się tylko 30 cm / ns wierzchołków (prędkość światła; w przewodzie zwykle masz znacznie mniej). I nie zapominaj, że na wielowarstwowej płycie głównej sygnały zaczynają na siebie wpływać (przesłuchy). Lubimy myśleć, że 0 to 0 V, a 1 to 5 V, ale w rzeczywistości „0” to coś między -0,5 V (przesterowanie przy zrzucaniu linii z 1 -> 0) a .5 V i „1” to wartość powyżej 0,8 V.

Jeśli masz wszystko w jednym chipie, sygnały działają znacznie szybciej i możesz mieć ich tyle, ile chcesz (no prawie :). Ponadto znacznie łatwiej jest kontrolować przesłuchy sygnału.

Aaron Digulla
źródło
3
Twoja koncepcja hiperwątkowości może być nieco myląca, ponieważ hiperwątkowość „tylko” symuluje równoległe wykonywanie wielu wątków - ale głównie próbuje poprawić wydajność wielowątkowości za pomocą wbudowanej logiki procesora.
JC Inacio,
@jcinacio, czy hiperwątkowość poprawia wydajność wielu procesów? Czemu?
George 2
@Aaron, 1. Po uzyskaniu informacji od Ciebie, zredagowałem aktualne punkty w moim oryginalnym poście. Czy mógłbyś pomóc w przejrzeniu i skomentowaniu? 2. Co oznacza „ujawnij część swoich danych wewnętrznych innemu procesorowi, aby nie stanęły im na drodze”. w swoim poście?
George 2
@Aaron, twoja odpowiedź jest tak doskonała, moje ostatnie pytanie, dlaczego mówisz, że wielordzeniowy procesor rozwiązuje problem synchronizacji stanu procesora / oczekiwania na problemy z pamięcią RAM? Myślę, że jeśli logika kodu jest taka sama, synchronizacja i oczekiwanie na problem z pamięcią RAM nadal istnieje. Jakieś uwagi?
George2,
1
@AmitP pamiętaj, że zbyt szerokie pytania są zwykle odrzucane i zamykane w Programmers, zobacz Co dzieje się w Programmers.SE? Przewodnik po przepełnieniu stosu
komar
4

Możesz znaleźć kilka interesujących artykułów na temat dwóch procesorów, wielordzeniowych i hiperwątkowości na stronie Intela lub w krótkim artykule z Uniwersytetu Yale .

Mam nadzieję, że znajdziesz tutaj wszystkie potrzebne informacje.

Bogdan Constantinescu
źródło
Bogdanie, w moim oryginalnym poście zredagowałem aktualne punkty. Czy mógłbyś pomóc w przejrzeniu i skomentowaniu? Nauczyłem się ich po przeczytaniu polecanych przez Ciebie linków.
George 2
@ George2 - Twoja zmiana jest prawdziwa. To jest cała idea. :) Najlepszą rzeczą, jaką można dostać na serwerze, jest prawdopodobnie wielordzeniowy procesor wieloprocesorowy
Bogdan Constantinescu
2
Oba linki są zepsute :(
rkachach
2

Krótko mówiąc: system wieloprocesorowy lub wieloprocesorowy ma kilka procesorów. System wielordzeniowy to system wieloprocesorowy z kilkoma procesorami na tej samej matrycy. W przypadku wielowątkowości wiele wątków może działać na tym samym procesorze (oznacza to, że czas przełączania kontekstu między tymi wieloma wątkami jest bardzo krótki).

Wieloprocesorowe istnieją już od 30 lat, ale głównie w laboratoriach. Wielordzeniowy to nowy popularny wieloprocesor. Procesory do serwerów wdrażają obecnie technologię wielowątkowości wraz z procesorami wieloprocesorowymi.

Artykuły na Wikipedii dotyczące tych tematów są dość ilustracyjne.

dobrze
źródło
Amit, 1. Po uzyskaniu informacji od Ciebie, zredagowałem aktualne punkty w moim oryginalnym poście. Czy mógłbyś pomóc w przejrzeniu i skomentowaniu? 2. Co oznacza umrzeć i rozerwać swój post?
George 2