Architektury komputerów systemy komputerowe i ich klasyfikacja Tomasz Dziubich
Klasyfikacja Flynna Pojedynczy strumień danych Wiele strumieni danych Pojedynczy strumień instrukcji SISD SIMD Wielokrotny strumień instrukcji MISD MIMD
Systemy SIMD Ściśle powiązane Luźno powiązane Jednostka sterująca (CU) LM LM LM EU EU EU LM LM LM EU EU EU LM LM LM EU EU EU
MMX grupa instrukcji MMX (multimedia extension) przeznaczona jest do wykonywania w sposób równoległy operacji na liczbach 8 i 16 bitowych Pentium 57 instrukcji wprowadzono osiem 64-bitowych rejestrów oznaczonych MM0, MM1,..., MM7, które częściowo pokrywają się z rejestrami koprocesora arytmetycznego w takim przypadku używa się instrukcji EMMS, która przygotowuje do użycia rejestry stosu koprocesora, jeśli wcześniej używane były instrukcje MMX dane MMX przechowywane są wg konwencji mniejsze niżej, tj. mniej znaczący bajt umieszczony jest w lokacji pamięci o niższym adresie (little endian)
MMX 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 upakowany bajt (ang. packed byte) 63 48 47 32 31 16 15 0 upakowane słowo (ang. packed word) 63 32 31 0 upakowane podwójne słowo (ang. packed double word) 63 0 poczwórne słowo (ang. quadword)
MMX na poziomie asemblera instrukcje MMX kodowane są w konwencjonalny sposób prawie wszystkie mnemoniki instrukcji MMX zaczynają się od litery P (packed) instrukcje MMX nie zmieniają rejestru znaczników kody instrukcji MMX są dwubajtowe i zaczynają się od bajtu 0FH; przed kodem może wystąpić przedrostek rozmiaru adresu lub przedrostek chwilowej zmiany segmentu; instrukcje MMX mogą powodować wyjątki
MMX w mnemonikach instrukcji, obok zwykłego skrótu operacji (np. ADD), stosowane są dodatkowe litery: S arytmetyka nasycenia (saturation), U liczby bez znaku (unsigned), L młodsza część (low), H starsza część (high), B bajt (8 bitów) W słowo (16 bitów), D podwójne słowo (32 bity), Q poczwórne słowo (64 bity); 1. arytmetyka przewinięcia PADDB mm, mm/m64 ; dodawanie bajtami PADDW mm, mm/m64 ; dodawanie słowami PADDD mm, mm/m64 ; dodawanie podw. słowami 2. arytmetyka nasycenia dla liczb ze znakiem PADDSB mm, mm/m64 ; dodawanie bajtami PADDSW mm, mm/m64 ; dodawanie słowami 3. arytmetyka nasycenia dla liczb bez znaku PADDUSB mm, mm/m64 ;dodawanie bajtami PADDUSW mm, mm/m64 ; dodawanie słowami
Przykład.686.MMX.data p1 dq 0F7F8F9FAFBFCFDFEH p2 dq 0303030303030303H wynik dq?.code zacznij: movq mm1, p1 ; wpisanie zmiennej p1 ; do rejestru mm1 paddusb mm1, p2 ; dodawanie bajtowe ; (liczb bez znaku) do mm2 movq wynik, mm1 ; przesłanie wyniku ; do zmiennej wynik
MMX Arytmetyka przewinięcia Arytmetyka nasycenia liczby ze znakiem i bez znaku liczby bez znaku liczby ze znak. dodawanie: 9000H + A010H = 3010H dodawanie: 9000H + A010H = FFFFH (nasycenie do górnej granicy) dodawanie: 9000H +A010H = 8000H (nasycenie do dolnej granicy) odejmowanie: 9000H A010H = EFF0H odejmowanie: 9000H - A010H = 0H (nasycenie do dolnej granicy) odejmowanie: 9000H - A010H = EFF0H (nie ma nasycenia)
Przykład Przykład działania instrukcji PADDUSW mm6, mm1 63 48 47 32 31 16 15 0 MM6 A000H A000H A000H 4000H 63 48 47 32 31 16 15 0 MM1 1000H B000H 9000H 6000H 63 48 47 32 31 16 15 0 MM6 B000H FFFFH FFFFH A000H
SSE instrukcje SSE (Streaming SIMD Extensions) - Pentium III (1999) - zestaw instrukcji wykonujących działania na liczbach zmiennoprzecinkowych wykonują równoległe operacje na czterech 32-bitowych liczbach zmiennoprzecinkowych zastosowanie w grafice komputerowej (3D), gdzie występują operacje przetwarzania dużych zbiorów liczb zmiennoprzecinkowych dla potrzeb SSE zdefiniowano 8 nowych 128 bitowych rejestrów (xmm0 - xmm7) każdy rejestr zawiera 4 liczby zmiennoprzecinkowe; rejestry oznaczone są symbolami; zestaw instrukcji SSE obejmuje 70 instrukcji 50 instrukcji operacji zmiennoprzecinkowych 12 instrukcji operacji stałoprzecinkowych 8 instrukcji pomocniczych
SSE Działania na liczbach upakowanych (psxxx) 127 96 95 64 63 32 31 0 a3 a2 a1 a0 op op op op 127 96 95 64 63 32 31 0 b3 b2 b1 b0 127 96 95 64 63 32 31 a3 op b3 a2 op b2 a1 op b1 a0 op b0 0
SSE Działania na liczbach skalarnych (xxxs) 127 96 95 64 63 32 31 0 a3 a2 a1 a0 op 127 96 95 64 63 32 31 0 b3 b2 b1 b0 127 96 95 64 63 32 31 a3 a2 a1 a0 op b0 0
Propozycja klasyfikacji architektur Instruction Level Parallelizm - ILP Thread Level Parallelizm TLP Data Level Parallelizm - DLP
Vector Memory-Memory vs Maszyna z rejestrami wektorowymi Instrukcje wektorowe pamięć-pamięć utrzymują wszystkie operandy w pamięci operacyjnej Cray-1 (1976) był pierwszą maszyną z rejestrami wektorowymi Kod Vector Memory-Memory Przykład kodu źródłowego ADDV C, A, B SUBV D, A, B for (i=0; i<n; i++) { C[i] = A[i] + B[i]; D[i] = A[i] - B[i]; } Kod dla maszyny z rejestrami wektorowymi LV V1, A LV V2, B ADDV V3, V1, V2 SV V3, C SUBV V4, V1, V2 SV V4, D
Przykładowa architektura komputera wektorowego
Wykonanie instrukcji wektorowych ADDV C,A,B Pojedyncza jednostka wektorowa Wykonanie z czterema jednostkami A[6] B[6] A[24] B[24] A[25] B[25] A[26] B[26] A[27] B[27] A[5] B[5] A[20] B[20] A[21] B[21] A[22] B[22] A[23] B[23] A[4] B[4] A[16] B[16] A[17] B[17] A[18] B[18] A[19] B[19] A[3] B[3] A[12] B[12] A[13] B[13] A[14] B[14] A[15] B[15] C[2] C[8] C[9] C[10] C[11] C[1] C[4] C[5] C[6] C[7] C[0] C[0] C[1] C[2] C[3]
Budowa jednostki wektorowej Jednostka funkcyjna Rejestry wektorowe Elementy 0, 4, 8, Elementy 1, 5, 9, Elementy 2, 6, 10, Elementy 3, 7, 11, Tor (lane) Podsystem pamięci
Zrównoleglenie instrukcji wektorowych Przykład maszyny, która ma 32 elementy na rejestr wektorowy i 8 torów czas load load Load Unit Multiply Unit Add Unit mul mul add add Instruction issue Ukończenie 24 operacji/cykl podczas wykonania 1 instrukcji/cykl
Intel Advanced Vector Extensions (AVX) AVX rozszerza 16 rejestrów XMM do 256 bitów YMM0 XMM0 256 bits (2010) 128 bits (1999) AVX może pracować na Całych 256 bitach Młodszych 128 bitach (instrukcje SSE) Zachowuje wszystkie instrukcje SSE Starsza część jest zerowana Nie jest generowany błąd wyrównania
AVX AVX (Advanced Vector Extensions) 16 256-bitowych rejestrów (YMM) 8x32 bity, 4 x 64 bity Format rozkazu VxxxxPS/PD/SS/SD Np. VMOVUPD ymm1, mem256 VMOVUPS ymm0. mem256 VMOVPAD z wyrównanego adresu (do 32) VADDPD ymm3,ymm2,ymm1 W planach AVX-512 (32 rejestry, ZMM, Xeon Phi)
AVX Prawie wszystkie instrukcje SSE FP zostały wypromowane do 256 bitów VADDPS YMM1, YMM2, [m256] ; dodanie dwóch liczb wektorów i zapis w rejestrze Prawie wszystkie instrukcje mają możliwość kodowania w nowym formacie (za wyjątkiem tych które odwołują się do rejestrów MMX) VADDPS XMM1, XMM2, [m128] VMULSS XMM1, XMM2, [m32] ; mnożenie skalarne dwóch najmłodszych liczb
AVX addps xmm1,xmm2 ; (xmm1 = xmm1 + xmm2) instrukcja SSE dodawanie czterech par liczb pojedynczej precyzji vaddps ymm1, ymm2, ymm3 ; (ymm1 = ymm2 + ymm3) instrukcja AVX dodawanie ośmiu par liczb pojedynczej precyzji Typ asemblerowy YMMWORD Język C VADDPS m256 _mm256_add_ps ( m256 a, m256 b); ADDPS m128 _mm_add_ps ( m128 a, m128 b);
Intel Xeon Phi
Archiektura rdzenia
Intel Xeon Phi - pamięć
Architektura oprogramowania
Wydajność
Systemy MIMD Ze wspólną pamięcią Z pamięcią rozproszoną Z rozproszoną pamięcią wspólną
MIMD z pamięcią wspólną Procesory P1, P2,..., Pn P1 P2 Pn Sieć połączeń Pamięć
MIMD z pamięcią rozproszoną Węzeł 1 Węzeł 2 Węzeł 3 Pamięć lokalna Pamięć lokalna Pamięć lokalna Procesor Procesor Procesor Układy we/wy Układy we/wy Układy we/wy System przesyłania komunikatów
MIMD z rozproszoną pamięcią wspólną
Architektura klastra Klaster Połączenie niezależnych komputerów przy użyciu sieci komputerowej w celu dostarczenia wspólnej usługi Serwery high-end Bazy danych, serwery plików, web serwery, symulacje, itp. Potrzeba wysokiej dostępności, łatwej lokalizacji uszkodzeń i żądanej niezawodności Potrzeba skalowalności
Zalety klastrów Izolacja błędów Oddzielna przestrzeń adresowa ogranicza rozprzestrzenianie się błędów Naprawa Łatwość wymiany uszkodzonego węzła bez konieczności zatrzymywania systemu Łatwa skalowalność Niski koszt Amazon, AOL, Google, Hotmail, and Yahoo
Wady klastrów Koszty administracji (n maszyn a 1) Połączenia za pomocą I/O (a nie szyny pamięci) Klaster potrzebuje N niezależnych pamięci i n kopii OS
Przykład Czas życia klastra ok. 3 lat Twórcy: Larry Page i Sergey Brin (09.98) W swoich bazach Google przechowuje informacje (01/2007) o 8 miliardach obiektów, w tym 4,3 miliarda stron WWW, 880 milionów obrazków oraz 850 milionów wiadomości z grup dyskusyjnych. Większość systemu została napisana w C lub C++ i działa na komputerach wyposażonych w system Linux
Architektura klastra Engine wyszukiwarki wymaga wysokiej liczby obliczeń na pojedyncze żądanie Pojedyncze żądanie w Google (średnio) odczyt rzędu setek MB danych pochłania ok. 10 bilionów cyklów CPU Szczytowe wymagania (peak request) Tysiące żądań w ciągu sekundy Wymagana jest dekompozycja i porównywalny rozmiar z superkomputerami
Systemy Obliczeniowe Wysokiej Wydajności High Performance Computing Techniques Supercomputers Clusters Grid Systems Custom build Shared memory processing (SMP) Not-parallelizable problems Optimized processors Use parallelism Consists of more than one computers Distributed memory processing Internet is the computer No geographical limitations
Architektura klastra Google Połączone ~15,000 zwykłych PC ów Zamiast mniejszej liczby serwerów (high-end) Najważniejsze czynniki brane pod uwagę przy projektowaniu Pobór energii Współczynnik cena/wydajność Aplikacja Google pozwala na łatwe zrównoleglenie Różne zapytania mogą być wykonane na różnych procesorach Pojedyncze pytanie może używać wielu procesorów ponieważ cały index jest podzielony
Wymagania Projektowany pod kątem uzyskania najlepszej średniej przepustowości a nie najkrótszego czasu odpowiedzi Niezawodność Bazuje na poziomie oprogramowania a nie na poziomie sprzętu Możliwe więc wykorzystanie zwykłych PC (niska cena) Budowanie niezawodnego przetwarzania na bazie klastra zawodnych (niewiarygodnych) PC
Wykonanie zapytania Załóżmy zapytanie (żądanie) www.google.com/search?q=zadania+ak Przeglądarka Generuje zapytanie do Systemu Rozwiązywania Nazw - Domain Name System (DNS) aby dokonać mapowania nazwy na konkretny adres IP
Wykonanie zapytania Nadrzędny DNS jest rozproszony pod względem geograficznym i również wykonany w postaci klastrów Zabezpiecza przed wystąpieniem awarii katastroficznej Systemy DNS są to systemy równoważące obciążenie (load-balancing) i wybierają klaster zgodnie z Aproksymacją geograficzną użytkownika Dostępną pojemnością przetwarzania żądań na różnych klastrach Przeglądarka Wysyła zapytanie HTTP do jednego z klastrów google Żądanie trafia do tzw. front-end computer kierującego ruchem zapytań
Ścieżka wykonania zapytania Front-end jest wyposażony w sprzętowy load-balancer Monitoruje dostępne Google Web Servers (GWSs) Dokonuje przekierowanie zapytania do jednego z GWS Maszyna GWS Koordynuje wykonanie zapytania Generuje rezultat w postaci kodu HTML
Schemat blokowy google
Przetwarzanie zapytania w klastrze Fazy wykonania zapytania Serwer indeksowy wyznacza odpowiednie dokumenty Korzysta z tzw. Odwróconego indeksu Wyzwanie w połączeniu z dużą ilością danych Surowe dokumenty -> kilka dziesiątek TB danych Inverted index -> również rzędu TB of data Szukając w sposób wysoce równoległy Podział zbioru indeksów na części - udziały (index shards) Dla każdego udziału, przepytanie dokonane przez inną maszynę Serwer dokumentów określa faktyczne adresy URL i generuje odpowiedz na udział
Zasady projektowania klastrów google Zapewnienie niezawodności przez oprogramowanie Bez wsparcia sprzętowego dodatkowych zasilaczy. Lepszych pamięci czy macierzy dyskowych RAID. Użycie replikacji Price/performance a nie peak performance Użycie zwykłych PC zmniejsza koszty przetwarzania
Pierwszy sewer google Computer History Museum (od 1999) Każdy tray zawierał 8x22GB HDD i jeden zasilacz
Budowa Google s racks Od 40 do 80 serwerów klasy x86 Serwery zbliżone do desktopowych PC ze średniej półki za wyjątkiem dużej przestrzeni dyskowej Zakres (2003) od 533-MHz Intel-Celeron do dual 1.4-GHz Intel Pentium III Połączenia w rack ach przez 100 Mbps Ethernet Wszystkie rack i połączone przez gigabit switch
Koszt Zestawienie kosztów klastra i komputera klasy mainframe Rack -> 176 2-GHz Xeon CPUs + 176 Gbytes RAM + 7 Tbytes of disk space = $278,000 Server -> 8 2-GHz Xeon CPUs + 64 Gbytes RAM + 8 Tbytes of disk space = $758,000
Problemy energetyczne Serwery z dwoma procesorami 1.4- GHz Pentium III 90 W 55 W 2 CPUs 10 W - HDD 25 W DRAM i płyta główna Wydajność zasilacza (typowa) 75% 120 W zasilacz per server ok 10 kw per rack
Problemy energetyczne Szafa (rack) Zajmuje 25 ft2 (2,32 m2) Oznacza to oddaną moc rzędu 400 W/ ft2 Dla lepszych procesorów 700 W/ft2 Zalecana moc oddana dla komercyjnych składnic danych 70-150 W/ft2 Konieczność dodatkowego chłodzenia i klimatyzacja Można użyć procesorów z redukcją mocy ale nie można zauważyć spadku wydajności i wzrostu kosztów
Charakterystyka sprzętowa Umiarkowanie wysoki CPI Pentium III ma możliwość wykonania 3 instrukcji/cykl Jednak występuje znacząca liczba trudnych do przewidzenia skoków Trawersowanie po dynamicznych strukturach danych Kontrola sterowania zależna od danych W nowszych procesor Pentium 4 To samo obciążenie, CPI jest zbliżone lub mniejsze Pomimo, że Pentium 4 Ma możliwość wykonywania większej liczby instrukcji równolegle i dysponuje lepszą logiką predykcji Google (oprogramowanie) nie wykorzystują możliwości instrukcji równoległych
Charakterystyka sprzętowa Zrównoleglenie uzyskuje się w sposób programowy Kolejkując procesy żądań i przypisując je do węzłów w klastrze Wykorzystując zrównoleglenie wątków i procesów na poziomie sprzętowym Procesory z Simultaneous multithreading (SMT) 30% wzrostu wydajności Architektury wielordzeniowe (multicore)
Pamięć podręczna Dobra wydajność dla pamięci podręcznej instrukcji i TLB instrukcji w związku z relatywnie małymi rozmiarami pętli kodu Bloki danych indeksowanych Brak lokalności czasowej ze względu na rozmiar danych i nieprzewidywalny wzorzec wyszukiwanych danych Korzyści lokalność przestrzennej możliwość użycia dłuższego wiersza w cache u
Pamięć RAM Przepustowość pamięci RAM nie jest tutaj wąskim gardłem Odpowiednia pamięć dla odczytu Relatywnie mały rozmiar L2 cache Krótkie CL przy dostępie do L2 cache i RAM Dłuższe (od 128 bajtów) wiersze (linie) w pamięci cache
Podsumowanie Infrastruktura Google Rozproszone systemy MIMD Ogromnej wielkości klaster tanich maszyn Indeksacja danych pozwala na zmniejszenie liczby komunikatów przesyłanych przez sieć łatwe zarządzanie równoważeniem obciążenia Łatwiejsze zarządzanie systemem i mniejsze koszty ewentualnej awarii Oprogramowanie zostało wyprodukowane przez studentów