Chapter

advertisement
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



Software



serial: np. Intel Pentium 4
parallel: np. Intel Core i7
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 = Tparallelizable/100 + Tsequential

1
Speedup 
 90
(1 Fparallelizable )  Fparallelizable /100

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 procesor: Time = (10 + 100) × tadd
10 procesorów



Time = 10 × tadd + 100/10 × tadd = 20 × tadd
Speedup = 110/20 = 5.5 (55% of optymalnego)
100 procesorów



1, 10, 100 procesorów
Time = 10 × tadd + 100/100 × tadd = 11 × tadd
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) × tadd
10 procesorów

Time = 10 × tadd + 10000/10 × tadd = 1010 × tadd

Speedup = 10010/1010 = 9.9 (99% of potential)
100 procesorów

Time = 10 × tadd + 10000/100 × tadd = 110 × tadd

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


100 procesorów, macierz 32 × 32


Time = 20 × tadd
Time = 10 × tadd + 1000/100 × tadd = 20 × tadd
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
Instruction Single
Streams
Multiple
Multiple
SISD:
Intel Pentium 4
SIMD: SSE
instructions of x86
MISD:
No examples today
MIMD:
Intel Core I7
Chapter 6 — Parallel Processors from Client to Cloud — 12
SIMD

Operują na wektorach danych


Procesory wykonują tą samą instrukcję



Np., rozszerzenia MMX, SSE, AVX
architektury x86
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)
addiu r4,$s0,#512
loop: l.d
$f2,0($s0)
mul.d $f2,$f2,$f0
l.d
$f4,0($s1)
add.d $f4,$f4,$f2
s.d
$f4,0($s1)
addiu $s0,$s0,#8
addiu $s1,$s1,#8
subu $t0,r4,$s0
bne
$t0,$zero,loop
 Kod na wektorową wersję MIPS:
l.d
$f0,a($sp)
lv
$v1,0($s0)
mulvs.d $v2,$v1,$f0
lv
$v3,0($s1)
addv.d $v4,$v2,$v3
sv
$v4,0($s1)

;load scalar a
;upper bound of what to load
;load x(i)
;a × x(i)
;load y(i)
;a × x(i) + y(i)
;store into y(i)
;increment index to x
;increment index to y
;compute bound
;check if done
;load scalar a
;load vector x
;vector-scalar multiply
;load vector y
;add y to product
;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



Fine-grain multithreading




Zdublowane rejestry, PC, ...
Szybkie przełączanie między wątkami
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



Pamięć grafiki – szeroka, duża przepustowość
Trend: użycie GPUs do innych zadań



Mniejsza rola cache
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


Dobre do zastosowań z niezależnymi zadaniami



Np., Ethernet/switch, Internet
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
Download