COMPUTER ORGANIZATION AND DESIGN The Hardware/Software Interface Wprowadzenie do systemów wieloprocesorowych
Wstęp Do tej pory mówiliśmy głównie o systemach z jednym procesorem Coraz trudniej wycisnąć więcej z pojedynczego procesora (ograniczenia fizyczne) Aby uzyskać większą wydajność musimy myśleć o systemach z wieloma procesorami Obecnie większość maszyn (serwery, PC, laptopy, konsole, nawet telefony komórkowe) ma wiele procesorów Duże zróżnicowanie systemów wieloprocesorowych (od układów dwurdzeniowych do układów z tysiącami procesorów)
Wstęp Urównoleglanie różnych operacji już widzialiśmy: Carry-select adder, array multiplier Przetwarzanie potokowe Przetwarzanie superskalarne VLIW (very large instruction word)
Wstęp Cel: połączyć wiele CPU w celu uzyskania większej wydajności: Multiprocessors Skalowalność, Uproszczenie budowy pojedynczego CPU Zużycie energii Równoległość na poziomie niezależnych zadań (procesów) Równoległe wykonanie pojedynczego zadania na wielu procesorach Chapter 6 Parallel Processors from Client to Cloud 4
Hardware i Software Hardware serial: np. Intel Pentium 4 parallel: np. Intel Core i7 Software sequential: np. eliminacja Gaussa concurrent: e.g., operating system Sequential/concurrent software może działać na on serial/parallel hardware Challenge: efektywnie wykorzystać równoległy hardware Chapter 6 Parallel Processors from Client to Cloud 5
Programowanie równoległe Pisanie efektywnego oprogramowania równoległego nie jest łatwe Problemy: Podział zadania na części Koorydancje wykonania Komunikacja Chapter 6 Parallel Processors from Client to Cloud 6
Prawo Amdahl a Część zadania może mieć charakter sekwencyjny i nie daje się urównoleglić Przykład: 100 procesorów, 90 speedup? Tnew = T parallelizable /100 + T sequential Speedup (1 F parallelizable 1 ) F parallelizable /100 90 Fparallelizable = 0.999 Sekwencyjna część zadania nie może zająć więcej niż 0.1% oryginalnego czasu Chapter 6 Parallel Processors from Client to Cloud 7
Skalowalność: przykład Zadanie: suma 10 skalarów, oraz suma dwóch macierzy 10 10 1, 10, 100 procesorów 1 procesor: Time = (10 + 100) t add 10 procesorów Time = 10 tadd + 100/10 t add = 20 t add Speedup = 110/20 = 5.5 (55% of optymalnego) 100 procesorów Time = 10 tadd + 100/100 t add = 11 t add Speedup = 110/11 = 10 (10% optymalnego) Zakładamy, że dane mogą być równomiernie przydzielone do procesorów Chapter 6 Parallel Processors from Client to Cloud 8
Skalowalność: przykład cd Co jeśli rozmiar macierzy jest 100 100? 1 processor: Time = (10 + 10000) t add 10 procesorów Time = 10 tadd + 10000/10 t add = 1010 t add Speedup = 10010/1010 = 9.9 (99% of potential) 100 procesorów Time = 10 tadd + 10000/100 t add = 110 t add Speedup = 10010/110 = 91 (91% of potential) Chapter 6 Parallel Processors from Client to Cloud 9
Silna i słaba skalowalność Silna skalowalność: stały rozmiar problemu Słaba skalowalność: rozmiar problemu proporcjonalny do liczby procesorów 10 procesorów, macierz 10 10 Time = 20 tadd 100 procesorów, macierz 32 32 Time = 10 tadd + 1000/100 t add = 20 t add Stała efektywność Chapter 6 Parallel Processors from Client to Cloud 10
Teoria algoryt. równoległych Istnieją teoretyczne modele obliczeń równoległych (PRAM) Klasa problemów dobrze się,,urównoleglających'': NC (rozwiązywalne w czasie polilogarytmicznym na wielominowej liczbie procesorów) Status NC=P? podobny do P=NP? W NC: mnożenie macierzy, sortowanie P-zupełne: circuit value, linear programming Chapter 6 Parallel Processors from Client to Cloud 11
Strumienie instrukcji i danych Klasyfikacja Flynn'a (1960s) Data Streams Single Multiple Instruction Streams Single SISD: Intel Pentium 4 SIMD: SSE instructions of x86 Multiple MISD: No examples today MIMD: Intel Core I7 Chapter 6 Parallel Processors from Client to Cloud 12
SIMD Operują na wektorach danych Np., rozszerzenia MMX, SSE, AVX architektury x86 Procesory wykonują tą samą instrukcję Ale na innych danych Prosta synchonizacja Dobre do zastosowań,,data-parallel'' Chapter 6 Parallel Processors from Client to Cloud 13
Przykład: DAXPY (Y = a X + Y) Standardowy kod MIPS: l.d $f0,a($sp) ;load scalar a addiu r4,$s0,#512 ;upper bound of what to load loop: l.d $f2,0($s0) ;load x(i) mul.d $f2,$f2,$f0 ;a x(i) l.d $f4,0($s1) ;load y(i) add.d $f4,$f4,$f2 ;a x(i) + y(i) s.d $f4,0($s1) ;store into y(i) addiu $s0,$s0,#8 ;increment index to x addiu $s1,$s1,#8 ;increment index to y subu $t0,r4,$s0 ;compute bound bne $t0,$zero,loop ;check if done Kod na wektorową wersję MIPS: l.d $f0,a($sp) ;load scalar a lv $v1,0($s0) ;load vector x mulvs.d $v2,$v1,$f0 ;vector-scalar multiply lv $v3,0($s1) ;load vector y addv.d $v4,$v2,$v3 ;add y to product sv $v4,0($s1) ;store the result Chapter 6 Parallel Processors from Client to Cloud 14
Procesory wektorowe Silnie potokowe jednostki wykonawcze Dane przesyłane z rejestrów wektorowych do jednostek wykonawczych Pobierane z pamięci do rejestrów Zapisywane z rejestrów do pamięci Przykład: Wektorowe rozszerzenie MIPS 32 wektory 64-elementowe (elementy 64-bitowe) Instrukcje wektorowe lv, sv: load/store wektor addv.d: dodaj wektory addvs.d: dodaj skalar do każdego elementu wektora Mała liczba pobieranych instrukcji Chapter 6 Parallel Processors from Client to Cloud 15
Wektorowe kontra skalarne Architektura wektorawa: Ułatwia pisanie programów,,data-parallel'' Krótsze pętle (lub ich brak) brak hazardów sterowania Mniej hazardów danych Przy regularnym wzorze dostępów zysk z pamięci z przeplotem (interleaved) Ogólniejsza niż multimedia extensions (jak MMX, SSE) Lepiej zgrywają się z kompilatorami Chapter 6 Parallel Processors from Client to Cloud 16
Wektorowe kontra MMX, SSE Rozkazy wektorowe operują na wektorach różnej długości, rozszerzenia multimedialne: stałej Rozkazy wektorowe mogą tworzyć wektory,,z co którejś danej w pamięci''; MMX z kolejnych Jednostki wektorowe mogą być kombinacją jednostek potokowych i macierzowych Chapter 6 Parallel Processors from Client to Cloud 17
Wielowątkowość Wiele wątków procesu wykonywanych równolegle Zdublowane rejestry, PC,... Szybkie przełączanie między wątkami Fine-grain multithreading Przełącznie po każdym cyklu Przeplot rozkazów Jeśli jeden wątek czeka pozostałe działają Coarse-grain multithreading Przełączamy wątki przy długich przestojach (np. chybieniach w cache L2) Prostszy sprzęt, ale nie ukrywa krótszych przestojów (np. związanych z hazardami danych) Chapter 6 Parallel Processors from Client to Cloud 18
Simultaneous Multithreading Dotyczy procesorów superskalarnych z dynamicznym przydziałem Przydzielamy istrukcje z różnych wątków jednocześnie O ile są wolne jednostki wykonawcze Przykład: Intel Pentium-4 HT Dwa wątki: zdublowane rejestry, współdzielone jednostki wykonawcze i cache Chapter 6 Parallel Processors from Client to Cloud 19
Multithreading - przykład Chapter 6 Parallel Processors from Client to Cloud 20
MIMD: współdzielona pamięć SMP: shared memory multiprocessor Wspólna przestrzeń adresowa dla wszystkich procesorów Komunikacja za pomocą współdzielonych zmiennych I specjalnych rozkazów synchronizujących Dwa warianty, w zależności od rodzaju dostępu do pamięci: UMA (uniform) vs. NUMA (nonuniform) Chapter 6 Parallel Processors from Client to Cloud 21
Przykład: Sumowanie Sumujemy 100,000 liczb na 100 proc. UMA Każdy procesor ma ID: 0 Pn 99 Przydzialemy 1000 liczb każdemu procesorowi Każdy procesor sumuje swoje liczby: sum[pn] = 0; for (i = 1000*Pn; i < 1000*(Pn+1); i = i + 1) sum[pn] = sum[pn] + A[i]; Dodajemy te częściowe sumy Stragegia dziel i zwyciężaj Połowa procesorów sumuje wyniki z par procesorów, potem działa jedna czwarta procesorów itd. Potrzebna synchronizacja Chapter 6 Parallel Processors from Client to Cloud 22
Przykład: sumowanie half = 100; repeat synch(); if (half%2!= 0 && Pn == 0) sum[0] = sum[0] + sum[half-1]; /* Conditional sum needed when half is odd; Processor0 gets missing element */ half = half/2; /* dividing line on who sums */ if (Pn < half) sum[pn] = sum[pn] + sum[pn+half]; until (half == 1); Chapter 6 Parallel Processors from Client to Cloud 23
Grafika w systemie komp. Chapter 6 Parallel Processors from Client to Cloud 24
Architektury GPU Przetwarzanie typu,,data-parallel'' GPUs są silnie wielowątkowe Przełączanie wątków pozwala ukryć opóźnienie spowodowane dostępem do pamięci Mniejsza rola cache Pamięć grafiki szeroka, duża przepustowość Trend: użycie GPUs do innych zadań Heterogeniczny system CPU/GPU CPU zadanie sekwencyjne, GPU - równoległe Środowiska programistyczne i języki: DirectX, OpenGL C for Graphics (Cg), High Level Shader Language (HLSL) Compute Unified Device Architecture (CUDA) Chapter 6 Parallel Processors from Client to Cloud 25
MIMD: komunikacja sieciowa Każdy procesor ma prywatną przestrzeń adresową Komunikacja za pomocą wiadomości przesyłanych siecią Chapter 6 Parallel Processors from Client to Cloud 26
Loosely Coupled Clusters Sieć niezależnych komputerów Każdy z pamięcią prywatną i własnymos Połączenia za pomocą I/O Np., Ethernet/switch, Internet Dobre do zastosowań z niezależnymi zadaniami Serwery WWW, bazy danych, symulacje, Łatwo dostępne, skalowalne, niedrogie Problemy Koszt zarządzania Mała przepustowość komunikacji Chapter 6 Parallel Processors from Client to Cloud 27
Sumowanie raz jeszcze Sumujemy 100,000 liczb na 100 proc. Rozsyłamy po 1000 liczb Wyliczamy sumy częściowe sum = 0; for (i = 0; i<1000; i = i + 1) sum = sum + AN[i]; Składanie wyniku Połowa procesorów wysyła, połowa odbiera dodaje Jedna czwarta wysyła, jedna czwarta odbiera i dodaje, Chapter 6 Parallel Processors from Client to Cloud 28
Sumowanie raz jeszcze Mamy operacje send(), receive() limit = 100; half = 100;/* 100 processors */ repeat half = (half+1)/2; /* send vs. receive dividing line */ if (Pn >= half && Pn < limit) send(pn - half, sum); if (Pn < (limit/2)) sum = sum + receive(); limit = half; /* upper limit of senders */ until (half == 1); /* exit with final sum */ Send/receive zapewniają synchronizację Chapter 6 Parallel Processors from Client to Cloud 29
Grid Computing Samodzielne maszyny połączone np. za pomocą internetu Np. SETI@home Chapter 6 Parallel Processors from Client to Cloud 30