Vous êtes sur la page 1sur 141

Politechnika lska w Gliwicach

Architektura komputerw
17 wrzenia 2015

ULTIMATE

Autorzy:
Son Mati
Doxus

Informatyka, semestr VI
Rok akademicki 2014/2015
Grupy GKiO3 oraz PSI
Rybnik oraz Mikow
Rocznik 2012

Gry s yciem. Gry s wiatem.

Doxus
Spis treci

I Teoria 8
1 Historia rozwoju komputerw 8

2 Architektura CISC 8
2.1 Znaczenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Przyczyny rozwoju architektury CISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Cechy architektury CISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Architektura RISC 9
3.1 Znaczenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Przyczyny rozwoju . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3 Pierwszy procesor RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.4 Cechy architektury RISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.5 Format rozkazu procesora RISC I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6 Realizacja wybranych rozkazw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6.1 Rozkazy arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6.2 Rozkazy komunikujce si z pamici . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.6.3 Adres efektywny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.7 Logiczna organizacja rejestrw procesora RISC I . . . . . . . . . . . . . . . . . . . . . . . 11
3.8 Okno rejestrw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4 Mechanizmy potokowe 12
4.1 Realizacja rozkazw w procesorze niepotokowym . . . . . . . . . . . . . . . . . . . . . . . 12
4.2 Potokowe wykonanie rozkazw dla prostej organizacji cyklu rozkazowego . . . . . . . . . . 12
4.3 Podzia cyklu rozkazowego na wiksz liczb faz . . . . . . . . . . . . . . . . . . . . . . . . 12
4.4 Analiza czasowa potokowej realizacji cigu rozkazw . . . . . . . . . . . . . . . . . . . . . 13
4.5 Przyspieszenie dla potokowego wykonania rozkazw . . . . . . . . . . . . . . . . . . . . . . 13
4.6 Problemy z potokow realizacj rozkazw . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.7 Rozwizanie problemu hazardu sterowania . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.8 Skoki opnione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.8.1 Zaoenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.8.2 Dziaanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.9 Przewidywanie rozgazie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.9.1 Strategie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.9.2 Tablica historii rozgazie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.10 Metody rozwizywania hazardu danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.10.1 Co to jest? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.10.2 Metody usuwania hazardu danych . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.10.3 Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

5 Architektura superskalarna 16
5.1 Co to jest? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2 Cechy architektury superskalarnej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3 Zalenoci midzy rozkazami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3.1 Prawdziwa zaleno danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3.2 Zaleno wyjciowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3.3 Antyzaleno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.3.4 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4 Metody eliminacji zalenoci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4.1 Metoda przemianowania rejestrw . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2
6 Architektura VLIW 18
6.1 Co to jest? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.2 Cechy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.3 Szeregowanie rozkazw przez kompilator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.4 Redukcja skokw warunkowych - predykacja rozkazw . . . . . . . . . . . . . . . . . . . . 18
6.5 Spekulatywne wykonanie rozkazw LOAD . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

7 Wielowtkowo 19
7.1 Co to jest? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.2 Sprztowa realizacja wielowtkowoci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.3 Wielowtkowo gruboziarnista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.4 Wielowtkowo drobnoziarnista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.5 Warunki sprztowej realizacji wielowtkowoci . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.6 Wielowtkowo w procesorze dwupotokowym . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.7 Mankamenty wspbienej wielowtkowoci . . . . . . . . . . . . . . . . . . . . . . . . . . 20

8 Klasyfikacja komputerw rwnolegych 21


8.1 Formy rwnolegoci w architekturze komputerw . . . . . . . . . . . . . . . . . . . . . . . 21
8.1.1 Rwnolego na poziomie rozkazw . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.1.2 Rwnolego na poziomie procesorw . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.2 Rodzaje rwnolegoci w aplikacjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.2.1 Rwnolego poziomu danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.2.2 Rwolego poziomu zada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
8.3 Wykorzystanie rwnolegoci aplikacji w architekturze komputerw . . . . . . . . . . . . . 21
8.4 Klasyfikacja Flynna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
8.4.1 Kryterium klasyfikacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
8.4.2 Klasyfikacja opisowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

9 Architektura SIMD 24
9.1 Co to jest? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.2 Komputery wektorowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.2.1 Lokalizacja wektorw danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.2.2 Przykad rozkazu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.2.3 Przyspieszenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9.2.4 Przepustowo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
9.2.5 Zaleno mocy obliczeniowej od dugoci wektora . . . . . . . . . . . . . . . . . . 25
9.2.6 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
9.2.7 Zastosowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
9.3 Komputery macierzowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.3.1 Co to jest? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.3.2 Elementy komputera macierzowego . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.3.3 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.4 Model SIMD w procesorach superskalarnych . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.4.1 Technologia MMX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
9.5 Technologia SSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

10 Karty graficzne i architektura CUDA 27


10.1 Charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
10.2 Architektura CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
10.3 Multiprocesor strumieniowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
10.4 Model programistyczny CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
10.5 Wykonanie oblicze z uyciem architektury CUDA (5 faz) . . . . . . . . . . . . . . . . . . 28
10.6 CUDA procesor (rdze) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
10.7 Wtki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
10.7.1 Co to jest? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
10.7.2 Grupowanie wtkw w bloki i siatk . . . . . . . . . . . . . . . . . . . . . . . . . . 28
10.7.3 Sprztowa organizacja wykonywania wtkw . . . . . . . . . . . . . . . . . . . . . 28

3
10.8 Rodzaje pamici multiprocesora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
10.8.1 Pami globalna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
10.8.2 Pami wspdzielona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
10.8.3 Pami staych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
10.8.4 Rejestry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
10.8.5 Pami lokalna i pami tekstur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

11 Systemy wieloprocesorowe (UMA) 30


11.1 Rodzaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
11.2 Systemy z pamici wspln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
11.2.1 Klasyfikacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
11.3 Skalowalno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
11.4 Systemy ze wspln magistral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
11.4.1 Protok MESI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
11.5 Systemy wielomagistralowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
11.6 Systemy z przecznic krzyow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
11.7 Systemy z wielostopniow sieci pocze . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
11.8 Systemy z pamici wieloportow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
11.9 Systemy z sieciami typu punkt-punkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
11.9.1 HyperTransport (HT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
11.9.2 Intel QuickPath Interconnect (QPI) . . . . . . . . . . . . . . . . . . . . . . . . . . 32
11.10Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

12 Systemy NUMA 33
12.1 Rodzaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
12.2 Wze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
12.3 Katalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
12.3.1 Najprostsza posta katalogu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
12.3.2 Rozmiar katalogu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
12.3.3 Rne warianty organizacji katalogu . . . . . . . . . . . . . . . . . . . . . . . . . . 34
12.4 Dziaanie katalogu na przykadzie systemu DASH . . . . . . . . . . . . . . . . . . . . . . . 34
12.4.1 Co to jest system DASH? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
12.4.2 Interpretacja stanu linii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
12.4.3 Operacja odczytu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
12.4.4 Operacja zapisu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
12.5 Katalog czy snooping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
12.6 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

13 Systemy SMP - podsumowanie 36

14 Systemy MMP 36
14.1 Uproszczona organizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
14.2 Hierarchiczna organizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
14.2.1 Rodzaje wzw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
14.3 Topologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
14.4 Obsuga przesyu komunikatw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
14.5 Narzdzia programowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
14.6 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

15 Klastry 38
15.1 Definicja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
15.2 Oglna struktura systemw typu klaster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
15.3 Oglna charakterystyka klastrw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
15.3.1 Wzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
15.3.2 System operacyjny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
15.3.3 Infrastruktura scalajca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
15.3.4 Komunikacja midzy wzami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4
15.3.5 Sieci czce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
15.3.6 Cele budowy klastrw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
15.3.7 Inne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
15.4 Sieci czce klastrw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
15.4.1 Sieci specjalizowane - starsze rozwizania . . . . . . . . . . . . . . . . . . . . . . . 39
15.4.2 Sieci LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
15.4.3 Sieci specjalizowane - nowsze rozwizania . . . . . . . . . . . . . . . . . . . . . . . 39
15.5 Fibre Channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
15.6 Sieci czce - rnice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
15.7 Sieci specjalizowane (SAN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
15.7.1 Opis elementw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
15.7.2 Cechy transmisji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
15.7.3 Rodzaje komunikatw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
15.7.4 Przepustowo czy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
15.7.5 Parametry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
15.8 Klastry o wysokiej niezawodnoci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
15.8.1 Czynniki tworzce wysok niezawodno klastrw . . . . . . . . . . . . . . . . . . . 41
15.8.2 Redundancja wzw / mocy obliczeniowej . . . . . . . . . . . . . . . . . . . . . . 41
15.8.3 Warianty modelu mieszanego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
15.9 Warianty dostpu do wsplnych zasobw . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
15.9.1 Zasada wspdziel wszystko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
15.9.2 Zasada nie wspdziel nic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
15.9.3 Mirroring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
15.10Mechanizmy kontrolujce funkcjonowanie wzw . . . . . . . . . . . . . . . . . . . . . . . 43
15.10.1 Heartbeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
15.10.2 Fail-over . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
15.11Problem rywalizacji o zasoby po awarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
15.11.1 Mechanizm quorum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
15.12Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

II Pytania zamknite 44

III Pytania otwarte 77


1 2010, Termin I (odpowiedzi z forum) 77

2 2013, Termin I (odpowiedzi z forum) 79

3 2014, termin I, NSI 80

4 2015, Termin 0 81

IV Zadania egzaminacyjne 83
1 Sparc 83
1.1 Laborka: min, max oraz max - min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.1.1 Funkcja w jzyku C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.1.2 Odpowiednik w SPARCu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
1.2 Laborka, szukanie min i max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
1.3 2008, I termin, Jerzy Respondek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
1.3.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
1.3.2 Propozycja rozwizania 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
1.3.3 Propozycja rozwizania 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
1.4 2010, I termin, Jerzy Respondek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
1.4.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

5
1.4.2 Propozycja rozwizania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
1.5 2012, I termin, Jerzy Respondek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
1.5.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
1.5.2 Propozycja rozwizania 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
1.5.3 Propozycja rozwizania 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
1.6 2013, I termin, Jerzy Respondek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
1.6.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
1.6.2 Rozwizanie nr 1 by Doxus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
1.6.3 Rozwizanie nr 2 by Trimack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
1.6.4 Rozwizanie nr 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
1.7 2015, 0 termin, Jerzy Respondek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
1.7.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
1.7.2 Rozwizanie 1 by Doxus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
1.7.3 Rozwizanie 2 by Trimack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

2 PVM 95
2.1 Wstp z laborek, szukanie min i max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2.1.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2.1.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
2.2 Laborki, odejmowanie macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2.2.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2.2.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
2.3 Laborki, Szyfr Cezara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.3.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.3.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

3 Egzamin 2012, T1, Hafed Zghidi 103


3.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.2 Propozycja rozwizania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

4 Egzamin 2013, T1, Hafed Zghidi 106


4.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.3 Propozycja rozwizania z forum - dlaczego jest le i moesz ujeba bezmylnie przepisujc 108

5 Egzamin 2014, T1, Hafed Zghidi 110


5.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.3 2015, 0 termin, Hafed Zighdi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.3.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.3.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

6 Java Spaces 114


6.1 Wstp z laborek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.1.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.1.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.2 Zadanie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.2.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.3 2010, I termin, Adam Duszeko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.3.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.3.2 Propozycja rozwizania 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.4 2011, I termin, Adam Duszeko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.4.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.5 2012, I termin, Adam Duszeko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.5.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.6 2013, I termin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.6.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

6
6.6.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.7 2014, I termin, Adam Duszeko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.7.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.7.2 Propozycja rozwizania 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.8 2015, 0 termin, Adam Duszeko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.8.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.8.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

7 CUDA 131
7.1 2013, 1 termin, Hafed Zighdi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.1.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.1.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.2 2015, 0 termin, Hafed Zighdi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.2.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.2.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

8 MOSIX 135
8.1 2013, 1 termin, Daniel Kostrzewa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
8.1.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
8.1.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
8.2 2014, 1 termin, Daniel Kostrzewa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.2.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.2.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.3 2015, 0 termin, Daniel Kostrzewa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
8.3.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
8.3.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
8.4 Termin nieznany, Daniel Kostrzewa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
8.4.1 Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
8.4.2 Rozwizanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

7
Teoria
1 Historia rozwoju komputerw
1. Liczydo

2. Pascalina - maszyna liczca Pascala (dodawanie i odejmowanie)

3. Maszyna mnoca Leibniza (dodawanie, odejmowanie, mnoenie, dzielenie, pierwiastek kwadratowy

4. Maszyna rnicowa - Charles Babbage, obliczanie wartoci matematycznych do tablic

5. Maszyna analityczna - Charles Babvage, programowalna za pomoc kart perforowanych

6. Elektryczna maszyna sortujca i tabelaryzujca Holleritha 1890

7. Kalkulator elektromechaniczny Mark I, tablicowanie funkcji, cakowanie numeryczne, rozwizywa-


nie rwna rniczkowych, rozwizywanie ukadw rwna liniowych, analiza harmoniczna, obli-
czenia statystyczne

8. Maszyny liczce Z1: pami mechaniczna, zmiennoprzecinkowa reprezentacja liczb, binarna jed-
nostka zmiennoprzecinkowa

9. Z3: Pierwsza maszyna w peni automatyczna, kompletna w sensie Turinga, pami przekanikowa

10. Colossus i Colossus 2

11. ENIAC

12. EDVAC - J. von Neumann (wtedy utworzy swoj architektur)

13. UNIVAC I (pierwszy udany komputer komercyjny)

14. IBM 701, potem 709

15. po 1955 zaczyna si zastosowanie tranzystorw w komputerach (komputery II generacji)

16. po 1965 komputery III generacji z ukadami scalonymi

17. od 1971 komputery IV generacji - z ukadami scalonymi wielkiej skali inegracji VLSI

2 Architektura CISC
2.1 Znaczenie
Complex Instruction Set Computers

2.2 Przyczyny rozwoju architektury CISC


Drogie, mae i wolne pamici komputerw

Rozwj wielu rodzin komputerw

Dua popularno mikroprogramowalnych ukadw sterujcych (prostych w rozbudowie)

Denie do uproszczenia kompilatorw: im wicej bdzie rozkazw maszynowych odpowiadajcych


instrukcjom jzykw wyszego poziomu tym lepiej; model oblicze pami pami.

8
2.3 Cechy architektury CISC
Dua liczba rozkazw (z czego te najbardziej zaawansowane i tak nie byy uywane)

Dua ilo trybw adresowania (zwizane z modelem oblicze)

Duy rozrzut cech rozkazw w zakresie:

zoonoci
dugoci (szczeglnie to - nawet kilkanacie bajtw)
czasw wykonania

Model oblicze pami - pami

Mikroprogramowane ukady sterujce

Niewiele rejestrw - byy drosze ni komrki pamici i przy przeczaniu kontekstu obawiano si
wzrostu czasu przeczania kontekstu (chowanie rejestrw na stos i odwrotnie)

Przerost struktury sprztowej przy mao efektywnym wykorzystaniu list rozkazw

CIEKAWOSTKA: Przeanalizowano jakie tam programy i w procesorze VAX 20% najbardziej


zoonych rozkazw odpowiadao za 60% kodu, stanowic przy tym ok 0.2% wywoa.
W procesorze MC68020 71% rozkazw nie zostao nawet uytych w badanych programach

3 Architektura RISC
3.1 Znaczenie
Reduced Instruction Set Computers.

3.2 Przyczyny rozwoju


Poszukiwanie optymalnej listy rozkazw

Ch wykonania mikroprocesora o funkcjach penego wczesnego procesora

3.3 Pierwszy procesor RISC


Procesor RISC I (1980), D. Patterson (Berkeley University)
Zaoenia projektowe:

Wykonanie jednego rozkazu w jednym cyklu maszynowym

Stay rozmiar rozkazw uproszczenie metod adresacji

Model oblicze rejestr rejestr: komunikacja z pamici operacyjn tylko za pomoc rozkazw
LOAD i STORE.

Wsparcie poprzez architektur jzykw wysokiego poziomu.

Efekty realizacji fizycznej:

44 420 tranzystorw (wczesne procesory CISC zawieray ok. 100 000 tranzystorw)

lista rozkazw = 32 rozkazy

dwustopniowy potok strata tylko 6% cykli zegara, zamiast 20% (w zwizku z realizacj skokw)

9
3.4 Cechy architektury RISC
1. Staa dugo i prosty format rozkazu
2. Niedua liczba trybw adresowania
3. Niezbyt obszerna lista rozkazw
4. Model oblicze rejestr-rejestr - dostp do pamici operacyjnej tylko w rozkazach LOAD i STORE

5. Duy zbir rejestrw uniwersalnych


6. Ukad sterowania logika szyta
7. Intensywne wykorzystanie przetwarzania potokowego

8. Kompilatory o duych moliwociach optymalizacji potoku rozkazw

3.5 Format rozkazu procesora RISC I

7 1 5 5 1 13
OPCODE SCC DEST SRC1 IMM SRC2

OPCODEkod rozkazu
SCC ustawianie (lub nie) kodw warunkw

DEST nr rejestru wynikowego


SRC1 nr rejestru zawierajcego pierwszy argument
IMM wskanik natychmiastowego trybu adresowania

SRC2 drugi argument lub nr rejestru (na 5 bitach)

3.6 Realizacja wybranych rozkazw


3.6.1 Rozkazy arytmetyczne
Tryb rejestrowy: (IMM=0) R[DEST] R[SRC1] op R[SRC2]
Tryb natychmiastowy: (IMM=1) R[DEST] R[SRC1] op SRC2

3.6.2 Rozkazy komunikujce si z pamici


LOAD R[DEST] M[AE]P

STORE M[AE] R[DEST]

3.6.3 Adres efektywny


Tryb z przesuniciem AE = R[SRC1] + SRC2 = RX + S2
Inny zapis powyszego AE = RX + S2
Tryb absolutny AE = R0 + S2 = S2 (R0 0)

Tryb rejestrowy poredni AE = RX + 0 = RX

Tryb absolutny oraz tryb rejestrowy poredni s przypadkami szczeglnymi.

10
3.7 Logiczna organizacja rejestrw procesora RISC I

Tabela 1: Rejestry
R31

6 Wysokie

10 Lokalne

6 Niskie

R9

10 Globalne
R0

3.8 Okno rejestrw

Tabela 2: Rejestry fizyczne - okno rejestrw


137

Okno rejestrw

R31
Wysokie

Lokalne

Niskie

Globalne
R0

11
4 Mechanizmy potokowe
4.1 Realizacja rozkazw w procesorze niepotokowym
Rozkazy wykonywane s liniowo w czasie - jeden po drugim, w takiej kolejnoci w jakiej przyjd do
procesora.
Procesor

r4, r3, r2, r1 r1 r2 r3 t

4.2 Potokowe wykonanie rozkazw dla prostej organizacji cyklu rozkazowego


Prosty podzia procesora na moduy:
S1 - pobranie rozkazu

S2 - wykonanie rozkazu
Zakadajc, e czas pracy obu moduw jest rwny, wwczas 3 rozkazy mog zosta wykonane w 2
okresach. 1 T - pobranie i wykonanie rozkazu. W momencie gdy pierwszy rozkaz zostanie pobrany, w
chwili 0.5 T S1 moe pobra kolejny.

Procesor

r4, r3, r2, r1 0 T 2T t


S1 S2

r1

r2

r3

4.3 Podzia cyklu rozkazowego na wiksz liczb faz


Na przykadzie cyklu rozkazowego komputera Amdahl 470:

Rozkazy Fazy zegarowe


1. Pobranie rozkazu
1 2 3 4 5 6 7
2. Dekodowanie rozkazu S1 r1 r2 r3 r4 r5 r6 r7
3. Obliczenie adresu efektywnego S2 r1 r2 r3 r4 r5 r6
S3 r1 r2 r3 r4 r5
4. Pobranie argumentw
S4 r1 r2 r3 r4
5. Wykonanie operacji
S5 r1 r2 r3
6. Zapis wyniku S6 r1 r2
Zasada dziaania jest dokadnie taka sama jak w
Tabela 3: Realizacja cigu rozkazw w wielostopnio-
przypadku podziau na dwie fazy. Zamy, e je-
wym procesorze potokowym.
den rozkaz wykonuje si w 7iu taktach zegaro-
wych. 1 T = 7 F. Wwczas w momencie gdy roz-
kaz numer 1 znajduje si w 5tym takcie wykonania
rozkaz numer 5 moe zosta pobrany.

12
4.4 Analiza czasowa potokowej realizacji cigu rozkazw
Zaoenia:
Procesor
P - liczba faz r4, r3, r2, r1
S1 S2 S3 Sp = T/p
T - okres
T t
P = - czas wykonania pojedynczej fazy
T
r1
(n 1) - czas rozpoczcia wykonywania n-tego rozkazu. r2
T

r3

rn
(n 1)
T

4.5 Przyspieszenie dla potokowego wykonania rozkazw


Czas wykonywania rozkazu w procesorze niepotokowym (dla n rozkazw)

t=nT

T
Czas wykonywania rozkazu w procesorze potokowym dla idealnego przypadku, gdy = P

T
t = (n 1) + T = (n 1 + P )
P

Przyspieszenie jest stosunkiem czasu wykonywania rozkazw dla procesora niepotokowego do czasu
dla procesora potokowego.
nT
lim =P
n (n 1 + P ) T
P

Maksymalne przyspieszenie (dla modelu idealnego) jest rwne iloci faz.

4.6 Problemy z potokow realizacj rozkazw


Problemem zwizanym z realizacj potokow jest zjawisko hazardu.

Hazard sterowania problemy z potokow realizacj skokw i rozgazie.

Hazard danych zalenoci midzy argumentami kolejnych rozkazw

Hazard zasobw konflikt w dostpie do rejestrw lub do pamici

4.7 Rozwizanie problemu hazardu sterowania


Skoki opnione

Przewidywanie rozgazie

4.8 Skoki opnione


4.8.1 Zaoenia
Rozkaz nastpny po skoku jest zawsze cakowicie wykonywany

To znaczy, e efekt skoku jest opniony o jeden rozkaz

13
4.8.2 Dziaanie
Zmienia kod programu w trakcie kompilacji, jeli widzi taka potrzeb. Sprowadza si to do dwch mo-
liwoci:
Modyfikacja programu - dodanie rozkazu NOP po instrukcji skoku JMP
Optymalizacja programu - zmiany kolejnoci wykonywania rozkazw

4.9 Przewidywanie rozgazie

4.9.1 Strategie
1. Statyczne
przewidywanie, e rozgazienie (skok warunkowy) zawsze nastpi
przewidywanie, e rozgazienie nigdy nie nastpi
podejmowanie decyzji na podstawie kodu rozkazu rozgazienia (specjalny bit ustawiany przez
kompilator)
2. Inne
przewidywanie, e skok wstecz wzgldem licznika rozkazw zawsze nastpi
przewidywanie, e skok do przodu wzgldem licznika rozkazw nigdy nie nastpi
3. Dynamiczne
Tablica historii rozgazie.

4.9.2 Tablica historii rozgazie


Skada si z:
Bit wanoci
Adres rozkazu rozgazienia
Bity historii
Adres docelowy rozgazienia (opcja)
Operacje wykonywane na tablicy historii rozgazie
Sprawdzenie, czy adres rozkazu rozgazienia jest w tablicy
Nie wtedy:
przewidywanie rozgazienia jest wykonywane wedug jednej ze strategii statycznych
do tablicy jest wpisywany adres rozkazu rozgazienia, informacja o wykonaniu/niewyko-
naniu rozgazienia (bit historii) i (opcjonalnie) adres docelowy rozgazienia

14
Tak - wtedy:
przewidywanie rozgazienia jest wykonywane wedug bitw historii
do tablicy jest wpisywana informacja o wykonaniu/niewykonaniu rozgazienia (uaktual-
nienie bitw historii)

1 bit historii - algorytm przewidywania rozgazie dla jednego bitu historii - kolejne wykonanie
rozkazu rozgazienia bdzie przebiegao tak samo jak poprzednie.

2 bity historii

algorytm przewidywania rozgazie dla dwch bitw historii bazuje na 2-bitowym automacie
skoczonym.
Interpretacja dwch bitw historii (x y):
y: historia ostatniego wykonania skoku (0 nie, 1 tak)
x: przewidywanie nastpnego wykonania skoku (0 nie, 1 tak)
Oglna zasada przewidywania - zmiana strategii nastpuje dopiero po drugim bdzie
przewidywania.

4.10 Metody rozwizywania hazardu danych


4.10.1 Co to jest?
Hazard danych - zalenoci midzy argumentami kolejnych rozkazw wykonywanych potokowo.

4.10.2 Metody usuwania hazardu danych


Jest kilka sposobw:

Sprztowe wykrywanie zalenoci i wstrzymanie napeniania potoku

Wykrywanie zalenoci na etapie kompilacji i modyfikacja programu (np. dodanie rozkazu NOP)

Wykrywanie zalenoci na etapie kompilacji, modyfikacja i optymalizacja programu (np. zamiana


kolejnoci wykonywania rozkazw)

Wyprzedzajce pobieranie argumentw (zastosowanie szyny zwrotnej)

4.10.3 Problem
Jeli faza wykonania rozkazu nie bdzie moga by wykonana w jednym takcie (np. dla rozkazw zmien-
noprzecinkowych), to zachodzi konieczno wstrzymania napeniania potoku.

15
5 Architektura superskalarna

5.1 Co to jest?
Architektura umoliwiajca wykonanie w jednym takcie wikszej od 1 liczby instrukcji.

5.2 Cechy architektury superskalarnej


Moliwo wykonania kilku rozkazw w jednym takcie, co powoduje konieczno:

Kilku jednostek potokowych

Zaadowania kilku rozkazw z pamici operacyjnej w jednym takcie procesora

5.3 Zalenoci midzy rozkazami


5.3.1 Prawdziwa zaleno danych

Read After Write (RAW)


Wystpuje w momencie kiedy jeden rozkaz wymaga argumentu obliczanego przez poprzedni rozkaz.
Opnienie eliminowane za pomoc wyprzedzajcego pobierania argumentu - dana nie jest zapisywana
do rejestru, tylko pobierana bezporednio z poprzedniego rozkazu, ktry znajduje si w akumulatorze
(jeeli dobrze rozumiem rysunek ze slajdu 21, wykad 4).

5.3.2 Zaleno wyjciowa

Write After Write (WAW)


Gdy rozkazy zapisujca dane do tego samego rejestru wykonuj si rwnolegle to drugi z nich musi czeka
a pierwszy si zakoczy. Ukad sterujcy musi kontrolowa tego typu zaleno.

5.3.3 Antyzaleno

Write After Read (WAR)


W przypadku gdy pierwszy rozkaz czyta warto rejestru, a drugi zapisuje co do tego rejestru i oba
wykonuj si rwnolegle, to drugi musi czeka a pierwszy odczyta swoje. Ten rodzaj zalenoci moe
zosta wyeliminowany przez sprztowe wykrywanie zalenoci i wstrzymanie napeniania potoku na co
najmniej takt.
Jeli faza wykonania rozkazu nie bdzie moga by wykonana w jednym takcie (np. dla rozkazw zmien-
noprzecinkowych), to zachodzi konieczno wstrzymania napeniania potoku.

16
5.3.4 Wnioski
Dopuszczenie do zmiany kolejnoci rozpoczynania wykonania (wydawania) rozkazw i / lub zmia-
ny kolejnoci koczenia rozkazw prowadzi do moliwoci wystpienia zalenoci wyjciowej lub
antyzalenoci.
Zawartoci rejestrw nie odpowiadaj wtedy sekwencji wartoci, ktra winna wynika z realizacji
programu

5.4 Metody eliminacji zalenoci


5.4.1 Metoda przemianowania rejestrw
Stosowana w przypadku zwielokrotnienia zestawu rejestrw.
Rejestry s przypisywane dynamicznie przez procesor do rozkazw.
Gdy wynik rozkazu ma by zapisany do rejestru Rn, procesor angauje do tego now kopi tego
rejestru.

Gdy kolejny rozkaz odwouje si do takiego wyniku (jako argumentu rdowego), rozkaz ten musi
przej przez proces przemianowania.
Przemianowanie rejestrw eliminuje antyzaleno i zaleno wyjciow.

Przykad procesu przemianowania rejestrw:


I1: R3b R3a op R5a
I2: R4b R3b + 1

I3: R3c R5a + 1


I4: R7b R3c op R4b
W powyszym przykadzie rozkaz I3 moe by wykonany jako drugi (co zapobiegnie zalenociom RAW
midzy I1 i I2 oraz I3 i I4), lub nawet jako pierwszy.

17
6 Architektura VLIW
6.1 Co to jest?
VLIW - Very Long Instruction Word.

6.2 Cechy
Wsplna pami operacyjna

Szeregowanie rozkazw

6.3 Szeregowanie rozkazw przez kompilator


Podzia rozkazw programu na grupy

Sekwencyjne wykonywanie grup


Moliwo rwnolegej realizacji rozkazw w ramach grupy
Podzia grupy na paczki
Paczka = 3 rozkazy + szablon (3 x 41 + 5 = 128 bitw)

Szablon - informacja o jednostkach funkcjonalnych, do ktrych kierowane maj by rozkazy i ewen-


tualna informacja o granicach grup w ramach paczki

6.4 Redukcja skokw warunkowych - predykacja rozkazw


Rozkazy uwarunkowane - uwzgldnianie warunku w trakcie realizacji rozkazu.

6.5 Spekulatywne wykonanie rozkazw LOAD


Problem: chybione odwoania do PaP (cache) i konieczno czekania na sprowadzenie do PaP linii
danych
Rozwizanie: przesunicie rozkazw LOAD jak najwyej, aby zminimalizowa czas ewentualnego
oczekiwania.
Rozkaz CHECK sprawdza wykonanie LOAD (zaadowanie rejestru)

18
7 Wielowtkowo
7.1 Co to jest?
Cecha systemu operacyjnego umoliwiajca wykonywanie kilku wtkw w ramach jednego procesu
Cecha procesora oznaczajca moliwo jednoczesnego wykonywanie kilku wtkw w ramach jed-
nego procesora (rdzenia)

7.2 Sprztowa realizacja wielowtkowoci


Celem wspbienej realizacji dwch (lub wicej) wtkw w jednym procesorze (rdzeniu) jest minimali-
zacja strat cykli powstaych w trakcie realizacji pojedynczego wtku w wyniku:
chybionych odwoa do pamici podrcznej,
bdw w przewidywaniu rozgazie,
zalenoci midzy argumentami kolejnych rozkazw

7.3 Wielowtkowo gruboziarnista


Coarse-grained multithreading.
Przeczanie wtkw nastpuje przy duszym opnieniu wtku w potoku (np. chybione odwoanie
do pamici podrcznej (nawet L2))
W niektrych rozwizaniach rozpoczcie nowego wtku nastpuje dopiero po oprnieniu potoku
Zalet jest prostota procesu przeczania wtkw
Wad takiego rozwizania s straty czasu przy krtszych opnieniach potoku

A: ADDF R1, R2 P D U V Z
SUBF R3, R1 P D U V Z
MULF R4, R3 P D U V Z
B: MULF R0, R2 P D U V Z
SUBF R3, R0 P D U V Z
ADDF R1, R3 P D U V Z

7.4 Wielowtkowo drobnoziarnista


Fine-grained multithreading.
Przeczanie wtkw nastpuje po kadym rozkazie
Wtek oczekujcy (np. na dostp do pamici) jest pomijany
Zalet jest unikanie strat nawet przy krtkich opnieniach wtkw
Istotnym wymaganiem dla procesora jest szybkie (w kadym takcie) przeczanie wtkw
Pewn wad jest opnienie realizacji wtkw w peni gotowych do wykonania

A: ADDF R1, R2 P D U V Z
B: MULF Z0, Z2 P D U V Z
A: SUBF R3, R1 P D U V Z
B: SUBF Z3, Z0 P D U V Z
A: MULF R4, R3 P D U V Z
B: ADDF Z1, Z3 P D U V Z

19
7.5 Warunki sprztowej realizacji wielowtkowoci
powielenie zestaww rejestrw uniwersalnych (lub powielenie tabel mapowania rejestrw)
powielenie licznikw rozkazw
powielenie ukadw dostpu do pamici podrcznej (tabel stron)
powielenie sterownikw przerwa

7.6 Wielowtkowo w procesorze dwupotokowym


Reguy realizacji i przeczania wtkw:

1. Wielowtkowo gruboziarnista
wtek realizowany w kolejnych taktach do momentu wstrzymania rozkazu
do obu potokw wprowadzane s rozkazy tylko jednego wtku (w jednym takcie!)
2. Wielowtkowo drobnoziarnista

w kolejnych taktach realizowane s naprzemiennie rozkazy kolejnych wtkw (przeczanie


wtkw co takt)
do obu potokw wprowadzane s rozkazy tylko jednego wtku (w jednym takcie!)
3. Wielowtkowo wspbiena (SMT -Simultaneous multithreading)

wtek realizowany do momentu wstrzymania rozkazu


do obu potokw w jednym takcie mog by wprowadzane rozkazy rnych wtkw

7.7 Mankamenty wspbienej wielowtkowoci


Rywalizacja wtkw w dostpie do pamici podrcznej - mniejsza wielko PaP przypadajca na
wtek
Wiksze zuycie energii (w porwnaniu z procesorami dwurdzeniowymi)
Moliwo monitorowanie wykonania jednego wtku przez inny wtek (zoliwy), poprzez wpyw
na wspdzielone dane pamici podrcznej - kradzie kluczy kryptograficznych

20
8 Klasyfikacja komputerw rwnolegych
8.1 Formy rwnolegoci w architekturze komputerw
8.1.1 Rwnolego na poziomie rozkazw
Wykonywanie w danej chwili wielu rozkazw w jednym procesorze.

Mechanizmy potokowe - w procesorach CISC i RISC


Architektura superskalarna i VLIW

8.1.2 Rwnolego na poziomie procesorw


Wykonywanie w danej chwili wielu rozkazw w wielu procesorach.

Komputery wektorowe
Komputery macierzowe
Systemy wieloprocesorowe
Klastry (systemy wielokomputerowe)

8.2 Rodzaje rwnolegoci w aplikacjach


8.2.1 Rwnolego poziomu danych
DLP - Data Level Parallelism.
Pojawia si kiedy istnieje wiele danych, ktre mog by przetwarzane w tym samym czasie.

8.2.2 Rwolego poziomu zada


TLP - Task Level Parallelism.
Pojawia si kiedy s tworzone zadania, ktre mog by wykonywane niezalenie i w wikszoci rwnolegle.

8.3 Wykorzystanie rwnolegoci aplikacji w architekturze komputerw


Rwnolego poziomu rozkazw (ILP - Instruction Level Parallelism) - odnosi si do prze-
twarzania potokowego i superskalarnego, w ktrych w pewnym (niewielkim) stopniu wykorzystuje
si rwnolego danych.

Architektury wektorowe i procesory graficzne - wykorzystuj rwnolego danych poprzez


rwnolege wykonanie pojedynczego rozkazu na zestawie danych.
Rwnolego poziomu wtkw (TLP - Thread Level Parallelism) - odnosi si do wykorzy-
stania rwnolegoci danych albo rwnolegoci zada w cile poczonych systemach (ze wspln
pamici), ktre dopuszczaj interakcje midzy wtkami.

Rwnolego poziomu zlece (RLP - Request Level Parallelism) - odnosi si do rwnolegoci


zada okrelonych przez programist lub system operacyjny. Ta forma rwnolegoci jest wykorzy-
stywana w systemach luno poczonych (z pamici rozproszon) i klastrach.

21
8.4 Klasyfikacja Flynna
M. Flynn, 1966

8.4.1 Kryterium klasyfikacji


Liczba strumieni rozkazw i liczba strumieni danych w systemie komputerowym.

SISD: Single Instruction, Single Data Stream

SIMD: Single Instruction, Multiple Data Stream

MISD: Multiple Instruction, Single Data Stream

MIMD: Multiple Instruction, Multiple Data Stream

Gdzie:

JS Jednostka sterujca

JP Jednostka przetwarzajca

PaO Pami operacyjna

22
8.4.2 Klasyfikacja opisowa

23
9 Architektura SIMD
9.1 Co to jest?
Tumaczenie Single Instruction Multiple Device

Cecha wyrniajca dla programisty - rozkazy wektorowe (rozkazy z argumentami wektorowymi).

Dwa rne podejcia do sprztowej realizacji rozkazw wektorowych:

Komputery (procesory) macierzowe


Komputery wektorowe

Idee realizacji obu (macierzowy i wektorowy):

9.2 Komputery wektorowe


9.2.1 Lokalizacja wektorw danych
Pami operacyjna (STAR 100)

Rejestry wektorowe (Cray -1)

9.2.2 Przykad rozkazu


Rozkaz dodawania wektorw: VADDF A,B,C,n
Czas wykonania:
tw = tstart + (n 1)
W komputerze macierzowym czas wykonywania tego rozkazu jest rwny const.

9.2.3 Przyspieszenie
Przyspieszenie jest stosunkiem czasu wykonywania w komputerze klasycznym (szeregowo) do czasu wy-
konywania w komputerze wektorowym.

15 n
a = limn = 15
tstart + (n 1)

24
9.2.4 Przepustowo

Przepustowo (moc obliczeniowa) jest stosunkiem iloci operacji zmiennoprzecinkowych do czasu ich
wykonania.
n 1
P rzep = limn =
tstart + (n 1)
Wymiarem przepustowoci jest FLOPS.

9.2.5 Zaleno mocy obliczeniowej od dugoci wektora

9.2.6 Podsumowanie

1. Hardware

rozkazy wektorowe
dua liczba potokowych jednostek arytmetycznych (specjalizowanych)
dua liczba rejestrw (nawet kilkaset tysicy)

2. Software

klasyczne jzyki: Fortran, C


klasyczne algorytmy
kompilatory wektoryzujce

9.2.7 Zastosowanie

Numeryczna symulacja orodkw cigych

Rwnania rniczkowe, rwnania rnicowe, ukady rwna algebraicznych (rachunek macierzowy)

Dziedziny zastosowa:

prognozowanie pogody
symulacja aerodynamiczna
sejsmiczne poszukiwania ropy naftowej i innych surowcw
symulacja reakcji jdrowych
medycyna i farmacja
obliczenia inynierskie duej skali

25
9.3 Komputery macierzowe
9.3.1 Co to jest?
Architektura komputerw macierzowych - model SIMD w dwch wariantach:

SIMD - DM (z pamici rozproszon)

SIMD - SM (z pamici wspln)

9.3.2 Elementy komputera macierzowego


1. Jednostka sterujca - procesor wykonujcy rozkazy sterujce i skalarne oraz inicjujcy wykonanie
rozkazw wektorowych w sieci elementw przetwarzajcych.

2. Elementy przetwarzajce (procesorowe) - jednostki arytmetyczno-logiczne wykonujce operacje


elementarne rozkazw wektorowych.

3. Sie czca - czy elementy przetwarzajce midzy sob lub z moduami pamici operacyjnej;
warianty:

sie statyczna: piercie, gwiazda, krata, drzewo, hiperszecian


sie dynamiczna: jednostopniowa; wielostopniowa (wyrnia poczenia blokujce i niebloku-
jce)

9.3.3 Podsumowanie
Architektura SIMD

Jednostka sterujca + jednostka macierzowa

Rozkazy wektorowe - wykonywane synchronicznie w sieci (macierzy) EP

Skomplikowana wymiana danych midzy EP

Trudne programowanie - konieczno tworzenia nowych wersji algorytmw

9.4 Model SIMD w procesorach superskalarnych


9.4.1 Technologia MMX
8 rejestrw 64-bitowych MMX

Nowe typy danych

Rozszerzony zestaw instrukcji (57 instrukcji)

Realizacja operacji na krtkich wektorach wg modelu SIMD

9.5 Technologia SSE


8 rejestrw 128-bitowych

Osiem 16-bitowych argumentw (elementw wektora) typu integer

Cztery 32-bitowe argumenty integer/fplub dwa 64-bitowe

Operacje zmp na 4-elementowych wektorach liczb 32-bit (pojed. prec.)

26
10 Karty graficzne i architektura CUDA
10.1 Charakterystyka
GPU - Graphics Processing Unit

Wczeniejsze GPU - specjalizowane jzyki (HLSL, GLSL czy NVIDIA Cg), tylko rendering

CUDA (Compute Unified Device Architecture) - architektura wielordzeniowych procesorw graficz-


nych (GPU)

Uniwersalna architektura obliczeniowa poczona z rwnolegym modelem programistycznym

wsparcie dla jzykw C/C++

GPGPU = GPU + CUDA

CUDA - obsugiwana przez karty graficzne GeForce i GeForce Mobile od serii 8 (GeForce 8800),
nowsze ukady z rodzin Tesla i Quadro, Fermi, obecnie Kepler

10.2 Architektura CUDA


W miejsce oddzielnych potokw przetwarzajcych wierzchoki i piksele wprowadzenie uniwersalnego
procesora przetwarzajcego wierzchoki, piksele i oglnie geometri, a take uniwersalne programy
obliczeniowe

Wprowadzenie procesora wtkw eliminujcego rczne zarzdzanie rejestrami wektorowymi

Wprowadzenie modelu SIMT (single-instruction multiple-thread ), w ktrym wiele niezalenych wt-


kw wykonuje rwnoczenie t sam instrukcj

Wprowadzenie wspdzielonej pamici oraz mechanizmw synchronizacji wtkw (barrier synchro-


nization) dla komunikacji midzy wtkami

10.3 Multiprocesor strumieniowy


Architektura GT 200.

8 rdzeni C1 -C8 (SP)

podrczna pami instrukcji (ang. instruction cache),

podrczna pami danych (ang. constant cache) - pami tylko do odczytu,

pami wspdzielona (ang. shared memory)

16 384 rejestry,

jednostka arytmetyczna wykonujca obliczenia zmiennoprzecinkowe podwjnej precyzji (fp64),

dwie jednostki arytmetyczne przeznaczone do obliczania funkcji specjalnych (ang. special function
unit),

pami globalna

10.4 Model programistyczny CUDA


Specjalny kompilator NVCC

Podzia programu na kod wykonywany przez procesor (ang. Host code) i przez urzdzenie (kart
graficzn) (ang. Device code) - kernel

Realizacja operacji rwnolegych wedug modelu SIMT (Single Instruction Multiple Threading)

27
10.5 Wykonanie oblicze z uyciem architektury CUDA (5 faz)
1. Przydzielenie w pamici globalnej obszaru pamici dla danych, na ktrych bd wykonywane obli-
czenia przez kernel.

2. Przekopiowanie danych do przydzielonego obszaru pamici.

3. Zainicjowanie przez CPU oblicze wykonywanych przez GPU, tj. wywoanie kernela.

4. Wykonanie przez wtki (z uyciem GPU) oblicze zdefiniowanych w kernelu.

5. Przekopiowanie danych z pamici globalnej do pamici operacyjnej.

10.6 CUDA procesor (rdze)


Potokowa jednostka arytmetyczna zmp

Potokowa jednostka arytmetyczna stp

Ulepszona realizacja operacji zmp FMA (fused multiply-add ) dla pojedynczej i podwjnej precyzji

10.7 Wtki
10.7.1 Co to jest?
Wtek reprezentuje pojedyncz operacj (a single work unit or operation)

Wtki s automatycznie grupowane w bloki, maksymalny rozmiar bloku = 512 wtkw (w archi-
tekturze Fermi i wyszych - 1024 wtki).

Bloki grupowane s w siatk (grid - krat)

Grupowanie wtkw - bloki o geometrii 1, 2 lub 3-wymiarowej

Grupowanie blokw - siatka (grid ) o geometrii 1, 2-wymiarowej

Wymaga si, aby bloki wtkw tworzcych siatk mogy si wykonywa niezalenie: musi by
moliwe ich wykonanie w dowolnym porzdku, rwnolegle lub szeregowo.

10.7.2 Grupowanie wtkw w bloki i siatk


Siatka o geometrii jednowymiarowej (trzy bloki wtkw)

Kady blok - geometria dwuwymiarowa (wymiary 2 x 3)

10.7.3 Sprztowa organizacja wykonywania wtkw


Przy uruchomieniu kernela wszystkie bloki tworzce jego siatk oblicze s rozdzielane pomidzy
multiprocesory danego GPU

Wszystkie wtki danego bloku s przetwarzane w tym samym multiprocesorze

W danej chwili (cyklu) pojedynczy rdze multiprocesora wykonuje jeden wtek programu

Multiprocesor tworzy, zarzdza, szereguje i wykonuje wtki w grupach po 32, nazywanych wizkami
(warp).

Wizki s szeregowane do wykonania przez warp scheduler. Wizka wtkw jest wykonywana jako
jeden wsplny rozkaz (analogia do rozkazu SIMD, tzn. rozkazu wektorowego)

28
Sposb wykonania wizki wtkw (rozkazu SIMD) zaley od budowy multiprocesora:

Dla architektury Fermi (32 procesory w jednym multiprocesorze / 2 warp-schedulery = 16


procesorw na 1 wizk) wizka jest wykonywana jako 2 rozkazy - wizka jest dzielona na dwie
powki (halfwarp) wykonywane jako 2 rozkazy (te same, ale na dwch zestawach danych).
Dla architektury Tesla (8 procesorw w jednym multiprocesorze, 1 warp-scheduler ) wizka
jest dzielona na cztery wiartki (quarter-warp) wykonywane jako 4 kolejne rozkazy (te same,
ale na czterech zestawach danych).

Konstrukcja warp schedulera umoliwia uruchomienie wielu wizek wtkw wspbienie - warp
scheduler pamita wtedy adresy wizek, przypisane im rozkazy SIMD oraz ich stan (gotowo do
wykonania lub stan oczekiwania na pobranie danych z pamici).
Wspbiene uruchomienie wielu wizek pozwala zmniejszy straty zwizane z oczekiwaniem na
dane (zwykle dugi czas dostpu do pamici).

10.8 Rodzaje pamici multiprocesora


10.8.1 Pami globalna
Dua pami, o czasie ycia aplikacji (dane umieszczone w tej pamici s usuwane po zakoczeniu apli-
kacji), dostpna dla kadego wtku w dowolnym bloku, ale o do dugim czasie dostpu wynoszcym
ok. 400-600 taktw zegara.

10.8.2 Pami wspdzielona


Niewielka pami o czasie ycia bloku (zakoczenie dziaania bloku powoduje usunicie danych w niej
przechowywanych), dostpna dla kadego wtku w bloku dla ktrego jest dedykowana, o bardzo krtkim
czasie dostpu.

10.8.3 Pami staych


Niewielki fragment pamici globalnej, ktry jest cache-owany, przez co dostp do niego jest bardzo szybki.
Jest ona tylko do odczytu. Czas ycia pamici staych oraz jej dostpno jest taka sama jak pamici
globalnej.

10.8.4 Rejestry
Niewielka, bardzo szybka pami o czasie ycia wtku (po zakoczeniu wtku dane z rejestrw s usu-
wane). Tylko jeden wtek moe w danym momencie korzysta z danego rejestru.

10.8.5 Pami lokalna i pami tekstur


Podobnie jak w przypadku pamici staych, s to dedykowane fragmenty pamici globalnej. Pami lokal-
na jest wykorzystywana do przechowywania danych lokalnych wtku, ktre nie mieszcz si w rejestrach,
a pami tekstur posiada specyficzne metody adresowania i cache-owania dla zastosowa graficznych.

29
11 Systemy wieloprocesorowe (UMA)
11.1 Rodzaje
Systemy z pamici wspln

Systemy z pamici rozproszon

11.2 Systemy z pamici wspln


Systemy z jednorodnym dostpem do pamici (UMA Uniform Memory Access)

Systemy z niejednorodnym dostpem do pamici (NUMA Non - Uniform Memory Access)

11.2.1 Klasyfikacja
Systemy ze wspln magistral

Systemy wielomagistralowe

Systemy z przecznic krzyow

Systemy z wielostopniow sieci pocze

Systemy z pamici wieloportow

Systemy z sieciami typu punkt - punkt

11.3 Skalowalno
System skalowalny - System, w ktrym dodanie pewnej liczby procesorw prowadzi do proporcjonal-
nego przyrostu mocy obliczeniowej.

11.4 Systemy ze wspln magistral


Prostota konstrukcji niska zoono ukadowa caoci

Niski koszt

atwo rozbudowy doczenia kolejnego procesora, ale tylko w ograniczonym zakresie

Ograniczona zoono magistrali (jej szybko jest barier)

Niska skalowalno

11.4.1 Protok MESI


Ten rodzaj systemu posiada problem zapewnienia spjnoci pamici podrcznych (snooping). W celu
rozwizania go wykorzystuje w tym celu protok MESI:

I - invalid

S - shared

E - exclusive

M - modified

30
11.5 Systemy wielomagistralowe
M M M M

P P P IO IO

Wielokrotnie zwikszona przepustowo

Konieczno stosowania ukadu arbitra do sterowania dostpem do magistral

Rozwizania kosztowne

11.6 Systemy z przecznic krzyow


M1 M2 Mm

P1

P2

Pn

Zadania kadego przecznika

Rozwizywanie konfliktw dostpu do tego samego moduu pamici


Zapewnienie obsugi rwnolegych transmisji, krzyujcych si w przeczniku

Dua przepustowo

Dua zoono ukadowa O(n2 )

Wysoki koszt

Problem: realizacja techniczna przecznicy krzyowej dla duych n wykorzystanie wielostopnio-


wych sieci pocze

11.7 Systemy z wielostopniow sieci pocze

Przykady:

Nieblokujca sie Closa

Sie wielostopniowa Benesa

Sie wielostopniowa typu Omega

31
11.8 Systemy z pamici wieloportow
M1 M2 Mm

P1

P2

Pn

Kady procesor ma niezaleny dostp do moduw pamici poprawa wydajnoci

Ukad sterowania moduu pamici rozstrzyga konflikty dostpu wiksza zoono

Moliwo skonfigurowania czci pamici jako prywatnej dla jednego lub kilku procesorw

Stosowana technika zapisu do pamici cache write through poprzez wasn magistral i port w
module

Ograniczona liczba portw w module

11.9 Systemy z sieciami typu punkt-punkt


11.9.1 HyperTransport (HT)
Technologia wprowadzona w 2001 przez HyperTransport Consortium(AMD, Apple, Cisco, Nvidia,
Sun i in.).

Przeznaczona do czenia procesorw, pamici i ukadw we/wy - technologia HT zastpia wspln


magistral.

Dla czenia wielu procesorw stosowana razem z technik NUMA.

Topologia punkt - punkt.

Sie dwukierunkowa, szeregowo / rwnolega, o wysokiej przepustowoci, maych opnieniach.

cza o szerokoci 2, 4, 8, 16, or 32 bity. Teoretyczna przepustowo: 25.6 GB/s (3.2GHz x 2


transfers per clock cycle x 32 bits per link ) dla jednego kierunku lub 51.2 GB/s cznie dla obu
kierunkw transmisji.

Transmisja pakietw skadajcych si z 32-bitowych sw.

11.9.2 Intel QuickPath Interconnect (QPI)


Nastpca Front-SideBus (FSB) - magistrali czcej procesor z kontrolerem pamici.

Tworzy bardzo szybkie poczenia midzy procesorami i pamici oraz procesorami i hubami we-
/wy.

Tworzy mechanizm scalable shared memory (NUMA) zamiast wsplnej pamici dostpnej przez
FSB, kady Procesor ma wasn dedykowan pami dostpn przez Integrated Memory Controler
oraz moliwo dostpu do dedykowanej pamici innych procesorw poprzez QPI.

Podstawow zalet QPI jest realizacja pocze punkt-punkt (zamiast dostpu przez wspln ma-
gistral).

32
11.10 Podsumowanie
Symetryczna architektura jednakowy dostp procesorw do pamici operacyjnej oraz we/wy
Utrzymanie spjnoci pamici podrcznych (cache):
snooping - metoda starsza i mao skalowalna (gwnie w systemach ze wspln magistral)
katalog - metoda lepiej skalowalna, stosowana razem z sieciami typu punkt - punkt

atwe programowanie (realizacja algorytmw rwnolegych)


Niska skalowalno:
Mechanizm snoopingu, zapewniajcy spjno pamici podrcznych wzw systemw UMA
nie jest skalowalny dla bardzo duej liczby wzw.
W systemach z du liczb wzw, posiadajcych lokaln pami, dla zapewnienia spjnoci
pamici podrcznych jest stosowane rozwizanie oparte na katalogu.

12 Systemy NUMA
Systemy wieloprocesorowe z niejednorodnym dostpem do pamici.
NUMA (Non-Uniform Memory Access).

12.1 Rodzaje
NC-NUMA (Non-cached NUMA)
Odwoania do nielokalnej PaO przekierowywane do odlegych wzw
Odwoania do nielokalnej PaO wolniejsze ok. 10 razy
CC-NUMA (Cache Coherent NUMA)

Wykorzystuje wzy i katalogi

12.2 Wze
Wze 1 Wze k

P P M P P M

K K

Sie czca

33
12.3 Katalog
12.3.1 Najprostsza posta katalogu

12.3.2 Rozmiar katalogu


dla PaO wza = 1 GB i linii = 128 B katalog musiaby mie 223 pozycji

dla PaO wza = 8 GB i linii = 128 B katalog musiaby mie 226 pozycji

dlatego katalog praktycznie jest zazwyczaj realizowany jako pami asocjacyjna, o znacznie mniej-
szych rozmiarach

12.3.3 Rne warianty organizacji katalogu


Zawarto pozycji katalogu:

1. numer wza aktualnie posiadajcego dan lini

2. k numerw wzw aktualnie posiadajcych dan lini

3. n bitw (1 bit na wze) wskazujcych posiadanie linii przez wze

4. element listy pl z numerami wzw aktualnie posiadajcych dan lini

12.4 Dziaanie katalogu na przykadzie systemu DASH


12.4.1 Co to jest system DASH?
Pierwszy system CC-NUMA wykorzystujcy katalog

Katalog = 1 M wierszy 18-bitowych

Wiersz katalogu= 16 bitw obecnoci linii w wzach + stan linii


Stan linii: uncached, shared, modified

34
12.4.2 Interpretacja stanu linii
uncached linia pamici jest tylko w pamici lokalnej (domowej)

shared linia PaP zostaa przesana do odczytu do kilku wzw (ich pamici lokalnych)

modified linia PaP jest w pamici domowej nieaktualna (zostaa zmodyfikowana w innym wle)

12.4.3 Operacja odczytu


Stan danej linii = uncached lub shared linia jest przesyana do wza dajcego; stan linii
:= shared.

Stan danej linii = modified sterownik katalogu domowego danej linii przekazuje danie do
wza x posiadajcego lini. Sterownik katalogu wza x przesya lini do wza dajcego oraz
wza domowego tej linii; stan linii := shared.

12.4.4 Operacja zapisu


Przed zapisem wze dajcy linii musi by jedynym jej posiadaczem.

Wze dajcy posiada lini

stan linii = modified zapis jest wykonywany


stan linii = shared wze przesya do domowego katalogu tej linii danie uniewanienia
innych kopii linii; stan linii := modified

Wze dajcy nie posiada linii wysya danie dostarczenia linii do zapisu

stan linii = uncached linia jest przesyana do wza dajcego; stan linii := modified
stan linii = shared wszystkie kopie linii s uniewaniane, potem jak dla uncached
stan linii = modified przekierowanie dania do wza x posiadajcego lini. Wze x unie-
wania j u siebie i przesya dajcemu.

12.5 Katalog czy snooping


Mechanizm spjnoci oparty o katalog jest bardziej skalowalny od mechanizmu snooping, poniewa
wysya si w nim bezporedni prob i komunikaty uniewaniajce do tych wzw, ktre maj kopie
linii, podczas gdy mechanizm snooping rozgasza (broadcast) wszystkie proby i uniewanienia do
wszystkich wzw.

12.6 Podsumowanie
PaO fizycznie rozproszona, ale logicznie wsplna

Niejednorodny dostp do pamici - PaO lokalna, PaO zdalna

Utrzymanie spjnoci pamici podrcznych (cache) - katalog

Hierarchiczna organizacja: procesor wze (system UMA) system NUMA

Zalety modelu wsplnej pamici dla programowania

Dobra efektywno dla aplikacji o dominujcych odczytach z nielokalnej pamici

Gorsza efektywno dla aplikacji o dominujcych zapisach do nielokalnej pamici

Skalowalno: 1024 2560 rdzeni

35
13 Systemy SMP - podsumowanie
Symetryczna architektura jednakowy dostp procesorw do pamici operacyjnej oraz we/wy (na
poziomie fizycznych przesyw tylko w systemach wieloprocesorowe z pamici wspln fizycznie
- UMA)

Utrzymanie spjnoci pamici podrcznych (cache):

systemy UMA - snooping lub katalog


systemy NUMA - katalog

atwe programowanie (realizacja algorytmw rwnolegych)

Niska (UMA) i rednia (NUMA) skalowalno

14 Systemy MMP
Systemy wieloprocesorowe z pamici rozproszon.
MPP Massively Parallel Processors.

14.1 Uproszczona organizacja


Sie czca

P1 P2 Pn

M1 M2 Mn

14.2 Hierarchiczna organizacja


14.2.1 Rodzaje wzw
Procesor + PaO

System wieloprocesorowy z pamici wspln UMA

System wieloprocesorowy NUMA (z niejednorodnym dostpem do pamici)

MPP MPP

P P P P
M UMA M UMA
M M M M P P P P P P

MPP

NUMA NUMA

M UMA M UMA M UMA M UMA


P P P P P P P P P P P P

36
14.3 Topologia
Sieci czce wzy MPP.
Hiperszecian
Krata 2D, 3D
Torus 2D, 3D

Przecznica krzyowa (hierarchiczne przecznice krzyowe)


Sieci wielostopniowe (Omega, Butterfly, grube drzewo, Dragonfly i inne)
Sieci specjalizowane (proprietary / custom network )

14.4 Obsuga przesyu komunikatw


Obsuga przesyu komunikatw w wzach systemu wieloprocesorowego.
Programowa obsuga przesyu przez procesory wzw poredniczcych (systemy I generacji)

Sprztowa obsuga przesyu przez routery wzw poredniczcych, bez angaowania procesorw
(systemy II generacji)

14.5 Narzdzia programowe


Narzdzia programowe wspierajce budow programw z przesyem komunikatw:
PVM (Parallel Virtual Machine)
MPI (Message Passing Interface)
Inne (Cray SHMEM, PGAS )

14.6 Podsumowanie
Hierarchiczna architektura
Wze: procesor, system UMA, (system NUMA)

Bardzo dua skalowalno


Wolniejsza (na og) komunikacja przesy komunikatw
Dedykowane, bardzo szybkie, sieci czce

37
15 Klastry
Klaster (komputerowy) (ang. cluster ).

15.1 Definicja
Klaster to zestaw penych komputerw (wzw) poczonych razem, pracujcych jako jeden sys-
tem.

Wikipedia:
Klaster komputerowy -grupa poczonych jednostek komputerowych, ktre wsppracuj ze sob
w celu udostpnienia zintegrowanego rodowiska pracy

A computer cluster consists of a set of loosely connected computers that work together so that in
many respects they can be viewed as a single system.

15.2 Oglna struktura systemw typu klaster

rodowisko programowe i aplikacje

Infrastruktura scalajca

System System System


operacyjny
SO operacyjny operacyjny

Wze Wze Wze


Wze

Sie czca

15.3 Oglna charakterystyka klastrw


15.3.1 Wzy
Serwery SMP

Pene komputery: PC, stacje robocze

15.3.2 System operacyjny


Linux

Unix

Windows

15.3.3 Infrastruktura scalajca


MPI (Message Passing Interface)

PVM (Parallel Virtual Machine)

SSI (Single System Image)

15.3.4 Komunikacja midzy wzami


Przesy komunikatw

38
15.3.5 Sieci czce
Sieci specjalizowane starsze rozwizania

Sieci LAN (Local Area Network )

Sieci specjalizowane -nowsze rozwizania

15.3.6 Cele budowy klastrw


Wysoka wydajno (klastry wydajnociowe, klastry obliczeniowe) (High-performace clusters)

Wysoka niezawodno (klastry niezawodnociowe) (High-availability clusters)

Rwnowaenie obcienia (Load balancing clusters)

15.3.7 Inne
Zaleno moc obliczeniowa niezawodno

Korzystny wskanik wydajno -cena

15.4 Sieci czce klastrw


15.4.1 Sieci specjalizowane - starsze rozwizania
HiPPI (High Performance Parallel Interface) pierwszy standard sieci near-gigabit (0.8 Gbit/s)
- kabel 50-par (tylko superkomputery)

Memory Channel

15.4.2 Sieci LAN


Ethernet

Fast Ethernet

Gigabit Ethernet

15.4.3 Sieci specjalizowane - nowsze rozwizania


Systemowe SAN.

Myrinet

Quadrics (QsNet)

SCI (Scalable Coherent Interface)

InfiniBand

15.5 Fibre Channel


Technologia sieciowa o duej przepustowoci (16 Gb/s) stosowana zwykle do czenia komputera z
pamici zewntrzn

Standard magistrali szeregowej definiujcy wielowarstwow architektur

Powsta w 1988 jako uproszczona wersja HIPPI

cza wiatowodowe i miedziane

Gwnym stosowanym protokoem jest SCSI, ponadto ATM, TCP/IP

39
15.6 Sieci czce - rnice
Parametry przepustowo, czas opnienia

Topologia

Ethernet magistrala, gwiazda, struktury hierarchiczne


Sieci specjalizowane sie przecznikw (switched fabric) popularna topologia grubego
drzewa

15.7 Sieci specjalizowane (SAN)


Na przykadzie sieci InfiniBand:

15.7.1 Opis elementw

Adaptery wzw posiadaj sterowniki DMA dla szybkiego odczytu pamici oraz mikroprocesory
sterujce

Przecznikami s przecznice krzyowe

Posiadaj adapter kanaowy urzdzenia zewntrznego

15.7.2 Cechy transmisji

Kada transmisja w oddzielnym kanale przy realizacji poczenia punkt punkt

Komunikat dzielony na pakiety (4 KB)

Pakiet rozpoczyna 128-bitowy nagwek adresowy, dekodowany w kadym przeczniku

Przesy pakietu przez przecznik do kolejnego przecznika (punktu) bez kompletowania caego
pakietu w przeczniku (cut through routing, wormhole routing)

15.7.3 Rodzaje komunikatw

Operacja odczytu lub zapisu bloku danych w trybie RDMA (Remote DMA) pomidzy pamiciami
operacyjnymi dwch wzw

Kanaowa operacja send lub receive

Transmisja komunikatu w trybie rozgaszania (multicast)

Operacja oparta na modelu transakcji (z moliwoci wycofania)

15.7.4 Przepustowo czy

Obok tej pojedynczej (SDR single data rate) prdkoci InfiniBand umoliwia te przesy z podwjn
(double - DDR), poczwrn (quad - QDR) i wyszymi prdkociami.

15.7.5 Parametry

Opnienie przesyu midzy punktami rzdu 1 mikrosekundy

Struktura sieci czsto jest oparta o topologi grubego drzewa (fat tree)

40
15.8 Klastry o wysokiej niezawodnoci
15.8.1 Czynniki tworzce wysok niezawodno klastrw
1. Redundancja wzw (mocy obliczeniowej)

2. Dostp do wsplnych zasobw (pamici zewntrznych)

3. Mirroring dyskw

4. Mechanizmy kontrolujce funkcjonowanie wzw

5. Redundancja sieci czcych (dla 3 rodzajw sieci)

6. Redundancja zasilania

15.8.2 Redundancja wzw / mocy obliczeniowej


Tryby pracy wzw:

Model klastra aktywny - pasywny

Model klastra aktywny - aktywny

Aktywny Pasywany / Aktywny

Wze Wze

A B

Pami
zewntrzna

Modele mieszane

Wze
A Wze
pasywny

Wze Pami
Wze
Wzy D
aktywne B zewntrzna

Wze
C

15.8.3 Warianty modelu mieszanego


N + 1 jeden wze dodatkowy, o uniwersalnych moliwociach zastpienia kadego z pozostaych.

N + M zwikszenie liczby dodatkowych wzw do M w celu zwikszenia redundancji w przypadku


duej rnorodnoci usug wiadczonych przez wzy.

N to N kombinacja modeli aktywny -aktywny oraz N + M redystrybucja zada wza


uszkodzonego na kilka innych wzw aktywnych

41
15.9 Warianty dostpu do wsplnych zasobw
15.9.1 Zasada wspdziel wszystko

Wze Sie czca Wze


1 2

Pami
zewntrzna

Wszystkie wzy maj dostp do wsplnej pamici zewntrznej (kontrola dostpu przez mechanizmy
blokad).

15.9.2 Zasada nie wspdziel nic

Wze Sie czca Wze


1 2

1 2

Pami
zewntrzna

Wzy nie wspdziel tego samego obszaru dysku kady ma dostp do wasnej czci; po awarii czynny
wze otrzymuje prawo dostpu do caego dysku.

15.9.3 Mirroring

Wze Wze
sie czca

1 2

1 2
Pami
zewntrzna
2 1

Kady wze zapisuje dane na wasny dysk i automatycznie (pod kontrol odpowiedniego oprogramowa-
nia) jest tworzona kopia tego zapisu na dyskach innych wzw.

42
15.10 Mechanizmy kontrolujce funkcjonowanie wzw
Programy agentw + mechanizm heartbeat
Procedura redefiniowania klastra po awarii (fail-over )

15.10.1 Heartbeat

Regularne sygnay wysyane przez kady wze w sieci czcej wzy klastry, wiadczce o
poprawnej pracy wza
Mechanizm heartbeat jest wykorzystywany w procedurze fail-over
Heartbeat rwnie system (program) zarzdzania klastrami o wysokiej niezawodnoci, oparty
na Linux-HA (High-Availability Linux )

15.10.2 Fail-over

Zdolno do automatycznego przeczenia systemu, ktry uleg awarii (rwnie aplikacji, ser-
wera lub sieci) na system rezerwowy
Operacja przeczania jest podejmowana na podstawie ledzenia sygnau heartbeat
W niektrych rozwizaniach operacja fail-over wymaga czciowego nadzoru administratora
automated with manual approval
Fail-back powrt do stanu pocztkowego po usuniciu awarii

15.11 Problem rywalizacji o zasoby po awarii


Tzw. problem split-brain.

15.11.1 Mechanizm quorum


Quorum disk zawiera baz danych (plik) z opisem konfiguracji klastra i informacjami o wszystkich
obiektach zarzdzanych przez klaster.
W danej chwili quorum disk moe by w posiadaniu tylko jednego wza.

15.12 Podsumowanie
Wzy typowe serwery SMP z pki + pena instancja Systemu Operacyjnego
Sieci czce standardy: Gigabit Ethernet, Infiniband
Komunikacja midzy wzami (procesami) przesy komunikatw

Bardzo wysoka skalowalno


Cele budowy: wysoka wydajno lub/i wysoka niezawodno, rwnowaenie obcienia
Korzystny wskanik: cena/wydajno

43
Pytania zamknite

1. Cechy architektury CISC


Czy moe by wykonana w VLIW
Nie, architektura VLIW dotyczy mikroprocesorw i miaa na celu jak najwiksze zmniejszenie jed-
nostki centralnej i jej rozkazw (RISC).

Czy wystpuje model wymiany danych typu pami - pami


Tak, posiada rwnie niewielk ilo rejestrw.

Jest maa liczba rozkazw


Nie, w tej architekturze jest PENA (complex) lista rozkazw. Niektre z zaawansowanych plece
nawet nie byy wykorzystywane, i bum! tak powsta RISC.

2. Cechy architektury RISC


Czy wystpuje model wymiany danych typu rej-rej
Tak, a komunikacja z pamici operacyjn odbywa si wycznie za pomoc rozkazw LOAD i
STORE.

Jest maa liczba trybw adresowania


Tak, raptem 4 w procesorze RISC I podczas gdy CISCi mog mie ich kilkanacie, w tym takie
bardzo zoone.

Jest wykonywanych kilka rozkazw w jednym takcie


Fasz. Prawdziwe wykonywanie wielu rozkazw w jednym takcie wymaga superskalarnosci - wielu
jednostek potokowych. Cech architektury RISC jest potokowo, ale pojedyncza.

Jest wykonywanych kilka rozkazw w jednym takcie (w danej chwili czasu)


Chodzi o przetwarzanie potokowe. Tu jest haczyk - pierwszy procesor RISC I (1980) stawia sobie
za cel wykonanie jednego rozkazu w jednym takcie i dokadnie tak brzmiao jego zaoenie projek-
towe. Jednak jego fizyczna realizacja (1982) posiadaa dwustopniowy potok. Rwnie w wykadach
jako cecha tej architektury jest napisane Intensywne wykorzystanie przetwarzania potokowego, co
odnosi si do faktu, e obecnie nie ma procesora typu RISC, ktry go nie ma. Wg mnie prawda.

Jest wykonywanych kilka instrukcji procesora w jednym rozkazie asemblerowym


Nic mi na ten temat nie wiadomo. Brzmi jednak zbyt hardo i odlegle od tematu zmniejszania iloci
rozkazw.

Ukad sterowania w postaci logiki szytej


Tak.

44
3. Architektura RISC charakteryzuje si:
Niedu liczb trybw adresowania
Cech architektury RISC jest prostota. Wszystkie rozkazy posiadaj jednakowy rozmiar i wystarcza
minimalna liczba trybw adresowania.

Modelem oblicze pami - pami


Nie, ten model by stosowany w CISCach, ktre posiaday niewielk liczb rejestrw poniewa byy
drosze oraz obawiano si wzrostu czasu przeczania kontekstu.

Wykorzystaniem mikroprogramowalnych ukadw sterujcych


Takie ukady byy stosowane w CISCach. Jest to te rozwizanie bardzo stare (pocztki w latach
50-tych).

Niezbyt obszern list rozkazw


RISC dy do uproszenie listy rozkazw, ktre w CISCach byy ogromne i z wikszoci si nie
korzystao.

Intensywnym wykorzystaniem przetwarzania potokowego


By to jeden z kluczowych elementw sukcesu procesorw RISC.

45
4. Okna rejestrw
Chroni przez hazardem danych
Lolnope, od tego s mechanizmy skokw opnionych i przewidywania rozgazie. Okno rejestrw
zapewnia cige i optymalne wykonywanie procedur.

Minimalizuj liczb odwoa do pamici operacyjnej przy operacjach wywoania pro-


cedur
Tak, dokadnie do tego one su. Rejestr niski procedury A staje si rejestrem wysokim procedury
B itd. Innymi sowy, procedura A wywouje procedur B, i tak dalej. I po co w tym wszystkim s
rejestry globalne.

S charakterystyczne dla architektury CISC


Nie, zostay zaprojektowane specjalnie dla architektury RISC. Jako pierwszy posiada je procesor
RISC I.

S zamykane po bdnym przewidywaniu wykonania skokw warunkowych.


W mechanizmie prognozowania rozgazie jest moliwo bdnego przewidywania. Jednak bdna
prognoza powoduje tylko zmian strategii (przewidywanie wykonania lub niewykonania), a nie za-
mykanie okna.

S przesuwane przy operacjach wywoania procedur


Tak, z kad now wywoan procedur okno rejestrw przesuwane jest w d (ze 137 do 0)

S przesuwane przy wystpieniu rozkazw rozgazie.


W architekturze SPARC okno jest przesuwane rozkazami SAVE i RESTORE, na yczenie progra-
misty, a nie na wskutek rozkazw warunkowych.

S otwierane przy wystpowaniu rozkazw rozgazie.


S otwierane przy wywoaniu funkcji.

46
5. Przetwarzanie potokowe:
Nie jest realizowane dla operacji zmiennoprzecinkowych
Nie ma takiego ograniczenia. Przetwarzanie potokowe dotyczy optymalizacji czasu wykonywania
rozkazw - podziau realizacji rozkazu na fazy. Owszem, dla argumentw zmiennoprzecinkowych
mog wystpi problemy zwizane z czasem oblicze (uniemoliwienie wykonania rozkazu w jednym
takcie), co moe zablokowa napenianie potoku, jednak nie uniemoliwia to zastosowania potoku.

Nie jest realizowane w procesorach CISC


Przetwarzanie potokowe znalazo zastosowanie gwnie w architekturze RISC, jednak CISC te z
niej korzysta. Przykady: VAX 11/780 (CISC), Ultra SPARC III (RISC)

Daje przyspieszenie nie wiksze od liczby segmentw (stopni) jednostki potokowej


Tak, przyspieszenie jest stosunkiem czasu wykonywania n rozkazw dla procesora niepotokowego
oraz czasu dla procesora potokowego. W idealnym przypadku, gdy kady stopie dzieli okres rozkazu
po rwno, a liczba rozkazw dy do nieskoczonoci, stosunek ten jest rwny P - iloci stopni.

W przypadku wystpienia zalenoci midzy danymi wywouje bd i przerwanie wewntrzne.


Hm, dobre pytanie. Tak, zalenoci danych mog wystpi (zjawisko hazardu) i rozdupi program,
ale po to wanie istniej mechanizmy by temu zapobiega. Kada szanujca si architektura to
potrafi: albo sprztowo, albo na etapie kompilacji, ktra modyfikuje i optymalizuje program. A jeeli
po modyfikacji pewien rozkaz nie wykona si w jednym takcie, napenianie potoku jest przerywane
(ale bdu chyba nie wywala), patrz wyej.

Jest realizowane tylko dla operacji zmiennoprzecinkowych


Pfff, no chyba nie XD Jest realizowane dla kadego rodzaju rozkazu.

6. Mechanizmy potokowe stosowane s w celu:


Uszeregowania cigu wykonywanych rozkazw
Nie, zupenie nie o to chodzi. Cig moe zosta uszeregowany przez kompilator w celu optymalizacji.
Jednak celem tego mechanizmu jest zrwnoleglenie wykonywania rozkazw zmiana kolejnoci ich
realizacji nie jest zaoeniem.

Uzyskania rwnolegej realizacji rozkazw


No ty. Potoki umoliwiaj realizacj wielu rozkazw jednoczenie dzielc jednostk centraln na wg
stopni, jak np. pobranie rozkazu i wykonania rozkazu. Dziki temu dwa rozkazy mog wykonywa
si jednoczenie, oba w innych fazach (jednostkach czasu).

Przyspieszenia realizacji rozkazw


Tak, to gwny cel. Umoliwienie wykonania rozkazw umoliwia przyspieszenie, ktre oblicza
si jako stosunek czasu wykonywania rozkazw w procesorze niepotokowym do czasu realizacji w
procesorze potokowym. W idealnym przypadku jest ono rwne P - iloci podziaw / stopni / faz /
zwa jak zwa.

47
7. Hazard danych:
Czasami moe by usunity przez zmian kolejnoci wykonania rozkazw
Tak, suy do tego mechanizm skokw opnionych, ktry odbywa si na poziomie kompilacji pro-
gramu.

Nie wystpuje w architekturze superskalarnej


Wystpuje wszdzie tam gdzie jest potokowe przetwarzania rozkazw.

Jest eliminowany przez zastosowanie specjalnego bitu w kodzie program


Nic mi o tym nie wiadomo. Pewne dodatkowe bity s wykorzystywane w mechanizmie przewidywania
rozgazie, ktry suy do eliminacji hazardu, jednak on to odbywa si PRZED realizacj programu
i sprowadza si do zmiany kolejnosci wykonywania rozkazw przez kompilator. Nic nie dodaje do
treci programu.

Moe wymaga wyczyszczenia potoku i rozpoczcia nowej (...)


Nie wiem jak hazard danych moe czegokolwiek wymaga skoro jest zjawiskiem ubocznym i je
eliminujemy. Sprztowa i programowa eliminacja hazardu jedynie moe doprowadzi do wstrzy-
mania napeniania potoku.

8. Jak mona omin hazard danych:

Poprzez rozgazienia
Nie, rozgazienie to po prostu instrukcje typu IF, ktre tworz takie rozgazienia. Mechanizm
przewidywania rozgazie jest stosowany do usuwania hazardu sterowania zwizanego ze skokami
i rozgazieniami.

Poprzez uproszczenie adresowania - adresowanie bezporednie.


Bullshit. Nie wiem w czym miao by pomc uproszczenia adresowania, poza pjciem w stron
RISCu, ale na hazard to nie pomoe. Tym mona tylko skrci czas odwoania si do danych.

Przez zamian rozkazw


Tak, i na tym polega mechanizm skokw opnionych, ktre mog program zmodyfikowa (doda
rozkaz NOP) albo zoptymalizowa, wanie zamieniaj rozkazy kolejnoci.

48
9. Dla uniknicia hazardu danych mona:
Zastosowa uproszczone metody adresacji.
RISC nie eliminuje hazardu XD Skracaj tylko czas dostpu do pamici.

Wykorzysta szyn zwrotn.


Szyna zwrotna jest stosowana by zastosowa wyprzedzajce pobieranie argumentw, ktre elimi-
nuje prawdziw zaleno danych (RAW).

Zastosowa specjalny bit w kodzie rozkazu.


Jeden dodatkowy bicik nie sprawi, e argument bdzie odczytany poprawnie.

Zastosowa tablic historii rozgazie.


Ona eliminuje hazard sterowania.

Wstrzyma na 1 takt napenianie potoku.


Tak, to moe wyeliminowa antyzaleno (WAR).

10. Mechanizm skokw opnionych:

Polega na opnianiu wykonywania skoku do czasu wykonania rozkazu nastpnego za


skokiem
Tak, cay ten mechanizm sprowadza si do opnienia efektu skoku o jeden rozkaz. Zapewnia to, e
rozkaz nastpny po skoku zawsze bdzie wykonywany w caoci.

Wymaga wstrzymania potoku na jeden takt.


Nie, mechanizm potokw nie musi by wstrzymywany. Mechanizm ten zmienia posta programu w
trakcie kompilacji, ale na sam realizacj potoku nie ma wpywu (afaik, not sure).

Powoduje bd na kocu ptli


Pfff, jak programista ssie pa to tak, jednak w zaoeniu tak si nie dzieje.

Wymaga umieszczenia rozkazu NOP za rozkazem skoku lub reorganizacje programu


Tak, mechanizm sprowadza si do tego, i tylko do tego, patrz pierwsza odpowied.

49
11. Tablica historii rozgazie:
Zawiera m.in. adresy rozkazw rozgazie
Tak, tablica ta zawiera bit wanoci, adres rozkazu rozgazienia, bity historii oraz adres docelowy
rozgazienia.

Pozwala zminimalizowa liczb bdnych przewidywa rozgazie w zagniedonej


ptli
Tak, z tego co wiem jest strategi dynamiczn i najbardziej optymaln ze wszystkich - skoczony
automat przewidywania rozgazie oparty na tej tablicy (z dwoma bitami historii) moe by zre-
alizowany na dwch bitach.

Nie moe by stosowana w procesorach CISC


Ten mechanizm suy zabezpieczeniu przed hazardem, ktry wystpuje w przetwarzaniu potokowym,
a z tego korzystaj zarwno CISC jak i RISC.

Jest obsugiwana przez jdro systemu operacyjnego


Chyba nie, ten mechanizm znajduje si w sprzcie procesora.

Jest stosowana do statycznego przewidywania rozgazie.


Ona suy do dynamicznego przewidywania rozgazie. Pocztkowe strategie s statyczne, ale p-
niej zmieniaj si w dynamiczne.

Pozwala zapamita ca histori wykona kadego rozkazu rozgazienia.


Tablica powica dla kadego rozkazu pewn skoczon liczb bitw w celu przewidzenia rozgazie-
nia.

50
12. W tablicy historii rozgazie z 1 bitem historii mona zastosowa nastpujcy algorytm
przewidywania (najbardziej zoony):

Skok opniony
Nie, skoki opnione nie su do przewidywania rozgazie, s zupenie innym mechanizmem
eliminacji hazardu.

Przewidywanie, e rozgazienie (skok warunkowy) zawsze nastpi


Nie, to strategia statyczna, ktra moe by wykonywana gdy adres rozkazu rozgazienia NIE jest
w tablicy. Nie wykorzystuje bitu historii.

Przewidywanie, e rozgazienie nigdy nie nastpi


Nie, to strategia statyczna, ktra moe by wykonywana gdy adres rozkazu rozgazienia NIE jest
w tablicy. Nie wykorzystuje bitu historii.

Przewidywanie, e kolejne wykonanie rozkazu rozgazienia bdzie przebiegao tak


samo jak poprzednie
Tak, i to jest wszystko na co sta histori 1-bitow. Historia 2-bitowa umoliwia interpretacj:
- historii ostatniego wykonania skoku - tak lub nie;
- przewidywania nastpnego wykonania skoku - tak lub nie
A zamiana strategii nastpuje dopiero po drugim bdzie przewidywania.

Wstrzymanie napeniania potoku


Nie, wstrzymywanie potoku mog spowodowa algorytmy zajmujce si eliminacj hazardu danych
- zalenoci midzy argumentami.

51
13. Problemy z potokowym wykonywaniem rozkazw skokw (rozgazie) mog by wyelimi-
nowane lub ograniczone przy pomocy:
Zapewnienia spjnoci pamici podrcznej
Nie, to problem komputerw wieloprocesorowych.

Tablicy historii rozgazie


Tak, to najprawdopodobniej najlepszy sucy ku temu mechanizm. Stara si przewidywa czy skok
bdzie wykonany bd nie, wykorzystuje do tego kilka strategii.

Techniki wyprzedzajcego pobrania argumentu


Nie, ten mechanizm suy do eliminacji hazardu danych - zalenoci midzy argumentami.

Wystawienia do programu rozkazw typu nic nie rb


Tak, tym rozkazem jest NOP i jest wstawiany przez mechanizm skokw opnionych, ktry suy
do zabezpieczania potoku.

Protokou MESI
Nie, on jest od zapewnienia spjnoci pamici wsplnej czy jako tak.

Wykorzystania techniki skokw opniajcych


Tak, umoliwiaj ona modyfikacj programu (wstawienie rozkazu NOP), albo jego optymalizacj
(zamiana kolejnoci wykonywania rozkazw.) Mechanizm ten opnia efekt skoku o jeden rozkaz,
co zapewnia, e rozkaz po skoku bdzie w caoci wykonany.

Technologii MMX
Polega zupenie na czym innym.

52
14. Konsekwencj bdu przy przewidywaniu rozgazie moe by:
Wstrzymanie realizowanego wtku i przejcie do realizacji innego wtku
Przewidywanie rozgazie odbywa si lokalnie, osobno dla kadego wtku.

Konieczno wyczyszczenia kolejki rozkazw do potoku


W przypadku jeeli mechanizm przewidywania rozgazienia si pomyli i zacznie pobiera rozkazy z
bdnego rozgazienia, potok rozkazw musi zosta wyczyszczony. Czyli np. w IFie miao by true,
a okazao si, e false, to naley zbdne pobrane rozkazy wyczyci.

Konieczno wyczyszczenia tablicy historii rozgazie.


W przypadku bdu naley tablic aktualizowa, aby w przyszoci to rozgazienie byo przewidywane
z wiksz dokadnoci.

Przerwanie realizowanego procesu / wtku i sygnalizacja wyjtku


Nie, naley jedynie zmieni strategi / przej do innej gazi, a nie usuwa proces. Bd przewidy-
wania rozgazie nie jest czym na tyle zym, by przerywa program. To naturalna konsekwencja
potokowoci, z ktr naley si upora.

Konieczno przemianowania rejestrw w procesorach


Przemianowanie rejestrw wystpuje by procesorach skalarnych w celu rwnolegej realizacji zada
na potokach.

53
15. W procesorach superskalarnych:
Liczba rozkazw, ktre procesor moe wykona w 1 takcie zaley od liczby jednostek
potokowych w procesorze
Procesory superskalarne posiadaj wiele jednostek potokowych, ktre s konieczne by mc wykony-
wa wiele rozkazw w jednym takcie. Od ich liczby zaley owa liczba rozkazw.

Liczba rozkazw, ktre procesor moe wykona w jednym takcie, zaley od liczby stopni potoku.
Nie, liczba stopni potoku mwi, na ile czci dzieli si dany rozkaz w tej jednostce potokowej.
One umoliwiaj wykonanie wielu rozkazw w jednej jednostce czasu, jednak nie przekada si to
bezporednio na liczb rozkazw, ze wzgldu na zawikania czasowe, oraz nie jest to idea procesora
superskalarnego.

Liczba rozkazw pobieranych z pamici, w kadym takcie musi przekracza liczb jednostek poto-
kowych
Liczba pobranych rozkazw powinna by co najmniej rwna iloci jednostek potokowych.

Liczba rozkazw, ktre procesor moe wykona w taktach zaley od liczby jednostek
potokowych w procesorze
Tak, patrz pierwsza odpowied.

Jest moliwe rwnolege wykonywanie kilku rozkazw w jednym procesorze (rdzeniu)


Tak, wanie taka jest idea stworzenia procesorw superskalarnych, by mc w jednym takcie wykona
> 1 liczby instrukcji. Zapewnia to niepojedyncza liczba jednostek potokowych.

Rozszerzenia architektury wykorzystujce model SIMD umoliwiaj wykonanie roz-


kazw wektorowych
Tak, pojedyncza instrukcja - wiele urzdze. To rozszerzenie korzysta z moliwoci architektury
superskalarnej - moliwoci wykonywania wielu rozkazw w 1 takcie - i realizuje pojedynczy rozkaz
na wielu rejestrach jednoczenie.

Nie wystpuje prawdziwa zaleno danych


Niestety wystpuje, i prawd mwic, wystpuje tutaj kady rodzaj zalenoci midzy rozkazami:
prawdziwa zaleno danych, zaleno wyjciowa oraz antyzaleno.

Mog wystpi nowe formy hazardu danych: zalenoci wyjciowe midzy rozkazami
oraz antyzalenoci
Tak, patrz wyej.

Nie wystpuje hazard danych (problemy z potokowym wykonaniem rozkazw o zalenych argu-
mentach).
Nie, patrz wyej.

Hazard sterowania jest cakowicie eliminowany przez statyczne strategie przewidywania rozga-
zie.
Superskalarna architektura ma mechanizm dynamicznego przewidywania, a poza tym, ani statycz-
ne, ani dynamiczne strategie nie eliminuj cakowicie hazardu sterowania.

54
16. Architektura superskalarna:
Dotyczy systemw SMP
Zdecydowanie nie tylko. Architektura superskalarna wymaga mechanizmu potokowego, czyli dotyczy
gwnie architektury RISC.

Wymaga zastosowania protokou MESI


Nie, architektura superskalarna wymaga jedynie zastosowania co najmniej dwch jednostek potoko-
wych.

Umoliwia rwnolege wykonywanie kilku rozkazw w jednym procesorze


Tak, i taki jest cel jej istnienia. Umoliwia to mechanizm potokowy.

Wywodzi si z architektury VLIW


Wrcz odwrotnie, to VLIW wykorzystuje architektur superskalarn na ktrej opiera swj podzia
rozkazw na paczki.

Wykorzystuje wiele potokowych jednostek funkcjonalnych


Tak, wymagane s co najmniej dwie jednostki potokowe, poniewa architektura superskalarna w
zaoeniu moe wykonywa wiele rozkazw w jednym takcie.

Nie dopuszcza do wystpienia hazardu sterowania


Hazard sterowania jest problemem jednostek potokowych i musz one by rozwizane przez skoki
opnione lub tablic historii rozgazie. Sama architektura superskalarna nie gwarantuje rozwi-
zania tego problemu.

Umoliwia wykonanie wielu rozkazw w jednym takcie


Jest to idea architektury superskalarnej.

Wykorzystuje model oblicze pami - pami


Ta architektura nie jest ograniczona do jednego modelu oblicze.

Jest stosowana tylko w procesorach wielordzeniowych


Architektura superskalarna to nie wielordzeniowo! Jednostka superskalarna wykonuje wiele
instrukcji jednoczenie, ale w pojedynczym wtku. Z kolei procesor wielordzeniowy potrafi wykony-
wa wiele wtkw, czyli wiele cigw instrukcji jednoczenie. Jednostka superskalarna moe by
rdzeniem, ale ofc nie tylko w tym typie prockw jest stosowana.

55
17. Przetwarzanie wielowtkowe:
Zapewnia lepsze wykorzystanie potokw
Tak, ma na celu minimalizacj strat cykli w trakcie realizacji wtku, jakie mog powsta na wskutek:
- chybionych odwoa do pamici podrcznej;
- bdw w przewidywaniu rozgazie;
- zalenoci midzy argumentami

Minimalizuje straty wynikajce z chybionych odwoa do pamici podrcznej


Tak, patrz wyej.

Wymaga zwielokrotnienia zasobw procesora (rejestry, liczniki rozkazw, itp.)


Niestety tak, jest to warunek sprztowej realizacji wielowtkowoci.

Nie moe by stosowane w przypadku hazardu danych


Nie, hazard danych wynika z zalenoci midzy argumentami, ktre s naturalnym ryzykiem przy
stosowaniu mechanizmu potokowego. Nie powinny by blokowane z tego powodu, tym bardziej, e
wielowtkowo ma dodatkowo chroni liczb cykli przed zgubnym wpywem hazardu.

18. Pojcie rwnolegoci na poziomie rozkazw:

Dotyczy architektury MIMD


Nie, ten rodzaj rwnolegoci dotyczy mechanizmw potokowych (CISC i RISC), architektury su-
perskalarnej oraz VLIW.

Odnosi si m.in. do przetwarzania potokowego


Tak, ide mechanizmu potokw jest zrwnoleglenie rozkazw i moliwo wykonywania wielu z nich
w tej samej chwili czasu.

Dotyczy architektury MPP


Nie, patrz wyej.

Dotyczy m.in. architektury superskalarnej


Tak, patrz wyej.

56
19. Efektywne wykorzystanie rwnolegoci na poziomie danych umoliwiaj:
Komputery wektorowe

Komputery macierzowe

Klastry

Procesory graficzne

Rozszerzenia SIMD procesorw superskalarnych

Ogem zastosowanie tej rwnolegoci jest moliwe gdy mamy do czynienia z wieloma danymi,
ktre mog by przetwarzane w tym samym czasie. A grafika, wektory, macierze itp. do takich
nale.

20. Wielowtkowo wspbiena w procesorze wielopotokowym zapewnia:


Moliwo wprowadzenia rozkazw rnych wtkw do wielu potokw
Tak, jest to charakterystyczna cecha tego typu wielowtkowoci. Z kolei wielowtkowoci grubo- i
drobnoziarniste umoliwiaj wprowadzenie do wielu potokw wycznie jednego wtku (w jednym
takcie!)

Realizacj kadego z wtkw do momentu wstrzymania ktrego rozkazu z danego


wtku
Tak, wtek jest realizowany do momentu wstrzymania rozkazu. T sam cech posiada wielowtko-
wo gruboziarnista. Z kolei wielowtkowo drobnoziarnista w kolejnych taktach realizuje naprze-
miennie rozkazy kolejnych wtkw.

Przeczanie wtkw co takt


Nie, to umoliwia tylko wielowtkowo drobnoziarnista.

Automatyczne przemianowanie rejestrw


Gowy nie dam, ale chyba adna wielowtkowo nie zapewnia automatycznego przemianowania.

57
21. Metoda przemianowania rejestrw jest stosowana w celu eliminacji:
Bdnego przewidywania rozgazie
Nie, do tego suy m.in. tablica historii rozgazie.

Chybionego odwoania do pamici podrcznej


Nie, to jest problem architektury VLIW i eliminuje si do przez przesunicie rozkazw LOAD jak
najwyej, tak aby zminimalizowa czas ewentualnego oczekiwania

Prawdziwej zalenoci danych


Nie, od tego jest metoda wyprzedzajcego pobierania argumentu.

Zalenoci wyjciowej midzy rozkazami.


Tak, ta metoda eliminuje powyszy i poniszy problem. Polega na dynamicznym przypisywaniu
rejestrw do rozkazw.

Antyzalenoci midzy rozkazami


Patrz wyej.

22. Wyprzedzajce pobranie argumentu pozwala rozwiza konflikt wynikajcy z:

Zalenoci wyjciowej miedzy rozkazami


T zaleno musi kontrolowa ukad sterujcy.

Prawdziwej zalenoci danych


Tak, do tego suy, patrz: prawdziwa zaleno danych 5.3.1

Bdnego przewidywania rozgazie


Nie powoduje konfliktw, naley je tylko obsuy i ograniczy liczb wystpowa.

Antyzalenoci miedzy rozkazami


Rozkazowi, ktry odczytuje jak zmienn, od razu jest podrzucana jej zmieniona warto. zamiast
przechodzi przez rejestr poredni (zapis i ponowny odczyt).

23. Przepustowo (moc obliczeniowa) duych komputerw jest podawana w:

GFLOPS

Liczbie instrukcji wykonywanych na sekund

Liczbie operacji zmiennoprzecinkowych na sekund

Mb/sek
To jest do zapamitania na prostu - takie s standardy

58
24. Podstaw klasyfikacji Flynna jest:
Liczba jednostek przetwarzajcych i sterujcych w systemach komputerowych

Protok dostpu do pamici operacyjnej

Liczba moduw pamici operacyjnej w systemach komputerowych

Sposb poczenia jednostek przetwarzajcych z moduami pamici operacyjnej.

Liczba strumieni rozkazw i danych w systemach komputerowych


To po prostu naley zapamita. Kryterium klasyfikacji Flynna jest liczba strumieni
rozkazw oraz liczba strumieni danych w systemie komputerowym. NIC WICEJ,
NIC MNIEJ.
Albo inaczej: Liczba strumieni (rozkazow + danych)

25. Model SIMD:


By wykorzystywany tylko w procesorach macierzowych
Nie, o niego oparte s rwnie m.in. procesory wektorowe, GPU, technologie MMX oraz SSE. Nie,
by rwnie wykorzystywany w komputerach wektorowych, rozszerzeniach SIMD oraz GPU.

Jest wykorzystywany w multimedialnych rozszerzeniach wspczesnych procesorw


Tak, multimedialne rozszerzenie su do dziaania na wielu rejestrach jednoczenie, co umoliwiaj
m.in. technologie MMX i SSE.

Jest wykorzystywany w heterogenicznej architekturze PowerXCell


Tak jest https: // en. wikipedia. org/ wiki/ Cell_ ( microprocessor)

Zapewnia wykonanie tej samej operacji na wektorach argumentw


Znaczenie: Single Instruction Multiple Device. Wykonuje jedn instrukcj na wielu urzdzeniach.

Jest podstaw rozkazw wektorowych


Pod ten model s zaprojektowane rozkazy wektorowe - jedno instrukcja, wiele urzdze.

Jest podstaw architektury procesorw superskalarnych


Nie, jest wykorzystywany w rozszerzeniach wektorowych, ale nie jest podstaw.

59
26. Komputery wektorowe:
Posiadaj jednostki potokowe o budowie wektorowej
Nie, posiadaj potokowe jednostki arytmetyczne, ktre nie s wektorowe.

Posiadaj w licie rozkazw m.in. rozkazy operujce na wektorach danych


Jak najbardziej, nie mogyby si bez tego obej.

Wykorzystuj od kilku do kilkunastu potokowych jednostek arytmetycznych


Tak, tych jednostek moe by wiele, mona to zauway na przykadzie komputera Cray-1 (wykad
7-8, slajd 31)

Posiadaj list rozkazw operujcych wycznie na wektorach


Zdecydowanie nie. Owszem, te komputery posiadaj rejestry wektorowe i wektorowe jednostki
zmiennoprzecinkowe, ale nie jest to wszystko. Maj rwnie normalne rejestry, adresacj, jednostki
skalarne i moliwo wykonywania na nich operacji.

27. Moc obliczeniowa komputerw wektorowych:


Zaley od liczby stopni potoku.
Moc obliczeniowa nie jest zalena od liczby stopni potoku. Ta jedynie wpywa na ilos rozkazw
jakie mog by wykonane w chwili czasu w jednostce potokowej.

Jest odwrotnie proporcjonalna do dugoci taktu zegarowego


n
Tak, obliczamy j wzorem P rzep = limn tstart +(n1) = 1

Jest wprost proporcjonalna do dugoci taktu zegarowego


Nie, patrz wyej.

Zaley odwrotnie proporcjonalnie od liczby jednostek potokowych poczonych acuchowo.


Nie, idea operacji wektorowej na komputerze wektorowym zakada jedn jednostk potokow. Ich
zwikszenie nie powinno wpyn bezporednio na moc.

Zmierza asymptotycznie do wartoci maksymalnej wraz ze wzrostem dugoci wekto-


ra
Tak, istnieje pewna warto maksymalna do ktrej moc dy logarytmicznie wraz ze wzrostem du-
goci wektora.

Nie zaley od dugoci wektora


Bzdura, patrz wyej.

Zaley liniowo od dugoci wektora


Bzdura, patrz wyej.

60
28. Procesory wektorowe:
Mog by stosowane w systemach wieloprocesorowych
Domylnie procesory wektorowe mog pracowa pojedynczo, ale mog by czci takiego systemu.
Poza tym nie znalazem nic, co by temu przeczyo. Jest te np. CUDA - architektura wielordzenio-
wych procesorw graficznych. Sama architektura SIMD dziaa na wielu procesorach.

Maj list rozkazw operujc jedynie na wektorach


Nie, posiadaj te m.in. potokowe jednostki arytmetyczne oraz jednostki skalarne, do operowania
na zwykych liczbach.

Maj moc kilka razy wiksz od procesorw skalarnych


Tak, przyspieszenie jest ilorazem czasu wykonywania na procesorze niewektorowym do czasu
wykonywania na procesorze wektorowym. Np. dla rozkazu dodawania n wektorw przyspieszenie
wyliczane jest wg wzoru a = tstart15 n
+(n1) , gdzie przy n dcym do nieskoczonoci a jest rwne 15.

29. Komputery macierzowe:


Maj w licie rozkazw m.in. rozkazy operujce na wektorach danych
Tak, te komputery s rozwiniciem komputerw wektorowych i musz mie rozkazy wektorowe.
Komputery macierzowe posiadaj po n jednostek przetwarzajcych, ktre potrafi razem obliczy n
skadowych wektora.

Maj macierzowe potokowe ukady arytmetyczne


Nie, posiadaj natomiast jednostki przetwarzajce. Z kolei potokow jednostk arytmetyczn posia-
daj komputery wektorowe.

Maj w typowych rozwizaniach zestaw penych procesw poczonych sieci pocze


Nie, w typowym rozwizaniu jest jeden peny procesor z wieloma jednostkami potokowymi, ktre
s poczone sieci czc (statyczn lub dynamiczn). Sie pocze penych prockw posiadaj
superkomputery z top500 (Nie jestem pewien tej odpowiedzi).

Wykonuj synchroniczn operacj wektorow w sieci elementw przetwarzajcych


Tak wanie dziaaj.

61
30. Rozkazy wektorowe mog by realizowane przy wykorzystaniu:
Macierzy elementw przetwarzajcych
Tak, komputery macierzowe operuj na rozkazach wektorowych.

Zestawu procesorw superskalarnych


Procesory superskalarne w zaoeniu nie posiadaj rozkazw wektorowych.

Technologii MMX
Tak, jest to pochodna technologia modelu SIMD, wykonuje operacje na krtkich wektorach (64-bit)

Sieci pocze typu krata


Jest to sie pocze, ktra czy jednostki przetwarzajce w komputerze macierzowym. Raczej na
wektorach na czs komputera nie dziaa.

Potokowych jednostek arytmetycznych


Tak, takie znajduj si w komputerach wektorowych.

31. Rozkazy wektorowe:

Nie mog by wykonywane bez uycia potokowych jednostek arytmetycznych


Mog. Komputery macierzowe ich nie posiadaj i wykonuj rozkazy wektorowe sprawnie.

S charakterystyczne dla architektury SIMD


Tak, z niej si zrodziy, tak samo jak m.in. technologie MMX i SSE.

S rozkazami dwuargumentowymi i w wyniku zawsze daj wektor


Nie, mog operowa na 1 argumencie na przykad. Rozkaz moe by te 3 argumentowy, jak rozkaz
dodawania VADD. Pierwszym argumentem jest rejestr docelowy, zawarto pozostaych dwch jest
dodana.

W komputerach wektorowych ich czas wykonania jest wprost proporcjonalny do du-


goci wektora
Tak, na przykadzie rozkazu dodawania wektorw wida, e czas ronie rwnomiernie wraz z iloci
elementw wektora.
tw = tstart + (n 1)

W komputerach wektorowych ich czas wykonania jest liniowo zaleny od dugoci wektora
Tak, patrz wzr wyej. Wyranie wida, e wraz ze wzrostem dugoci wektora, rozkaz dodawania
wykonuje si duej o sta warto. Z kolei przepustowo (liczba operacji zmiennoprzecinkowych
na sekund) ronie logarytmicznie wraz z dugoci wektora.

W komputerach macierzowych ich czas wykonania jest wprost proporcjonalny do liczby elementw
przetwarzajcych
Przy odpowiedniej liczbie jednostek przetwarzajcych jest stay

Mog by wykonane na sieci elementw przetwarzajcych.


Czyli na komputerze macierzowym - owszem.

62
32. Architektura CUDA:
Umoliwia bardzo wydajne wykonywanie operacji graficznych
Tak, ta architektura jest rozwiniciem mechanizmw wektorowych oraz macierzowych i jest prze-
znaczona specjalnie dla przetwarzania grafiki.

Stanowi uniwersaln architektur obliczeniowa poczon z rwnolegym modelem


programistycznym
Tak, pomimo specjalizacji graficznej, architektura ta jest uniwersalna i zdolna do wszystkiego. Pro-
cesory posiadaj uniwersalne programy obliczeniowe, a CUDA posiada model programistyczny (oraz
podzia programu na 5 faz). Skada si on z:
- Kompilatora NVCC;
- Podzia programu na kod wykonywany przez procesor (host code) oraz kart graficzn (kernel);
- Realizacja oblicze rwnolegych wg modelu SIMT (Single Instruction Multiple Threading)

Realizuje model obliczeniowy SIMT


Tak, patrz wyej. Dziaanie: wiele niezalenych wtkw wykonuje t sam operacj. Architektura
posiada rwnie mechanizm synchronizacji wtkw ( barrir synchronization) dla komunikacji oraz
wspdzielona pami.

Jest podstaw budowy samodzielnych, bardzo wydajnych komputerw


Komputery CUDA nie s oglnego zastosowania, tylko do oglnych problemw numerycznych. Na
pewno nie s podstaw, bo np. komputer ... (dokoczy by trza)

33. Systemy SMP:


Wykorzystuj protok MESI do sterowania dostpem do wsplnej magistrali
Ten protok wykorzystuj systemy UMA (podkategoria systemw SMP) ze wspln magistral
w celu zapewnienia spjnoci pamici podrcznych ( snooping). Mog te uywa katalogw, ale
podkategoria NUMA wykorzystuje wycznie katalogi.

Posiadaj skalowalne procesory


SMP naley do systemw wieloprocesorowych, ale te nie musz by skalowalne.

Posiadaj pami fizycznie rozproszon, ale logicznie wspln


Nie, pami jest fizycznie wsplna. Fizycznie rozproszon pami posiadaj systemy MPP.

63
34. Systemy wieloprocesorowe z jednorodnym dostpem do pamici (UMA):
Zapewniaj spjno pamici podrcznych wszystkich procesorw
Czuwa nad tym protok MESI, kady uaktualnia stan pamici w kadym z procesorw.

Maj nisk skalowalno


Maj wrcz chujow skalowalno, poniewa przewanie s poczone takimi konstrukcjami jak
przecznica krzyowa czy wsplna magistrala, a sam mechanizm snoopingu jest kiepsko skalowalny.

Wykorzystuj katalog do utrzymania spjnoci pamici.


Tak, wg wykadw Kozielskiego UMA moe wykorzystywa do kontroli pamici spjnej zarwno
katalog, jak i protok MESI.

Wykorzystuj przesy komunikatw midzy procesorami.


To cecha MPP oraz klastrw.

Umoliwiaj dostp do pamici najczciej poprzez wspln magistral lub przecz-


nic krzyow.
S to jednego z moliwych konfiguracji UMA, s to najprostsze i najtasze rozwizania, wic
prawdopodobnie te najczciej stosowane (ale rwnie najmniej skalowalne).

35. Protok MESI:

Jest wykorzystywany do sterowania dostpem do magistrali w systemie SMP


Protok MESI wykorzystywany jest do zapewniania spjnoci pamici podrcznych cache w archi-
tekturze SMP ( snooping), a dokadniej w UMA. NUMA korzysta tylko z katalogw.

Zapewnia spjno pamici cache w systemie SMP


Do tego wanie suy.

Suy do wymiany komunikatw w systemie MPP


Patrz wyej.

Chroni przed hazardem w procesorach superskalarnych


Patrz wyej.

64
36. W architekturze NUMA
Dane s wymieniane midzy wzami w postaci linii pamici podrcznej (PaP)
Tak, kady procesor / wze posiada swoj wasn szybk pami podrczn. Pami ta jest publiczna
- inne procesory maj do niej dostp, ale wymiana informacji na linii moja pami - inny procesor
jest znacznie wolniejsza ni procesor - jego pami.

Spjno PaP wzw jest utrzymywana za pomoc protokou MESI


Protok MESI jest wykorzystywany w architekturze UMA do snoopingu - zapewnienia spjnoci
pamici podrcznych prockw.

Czas dostpu do pamici lokalnej w wle jest podobny do czasu dostpu do pamici nielokalnej
Odwoanie do nielokalnej pamici s znacznie wolniejsze ni do lokalnej, ok. 10-krotnie bardziej.
Dotyczy to gwnie architektury NC-NUMA, patrz: rodzaje systemw NUMA 12.1

Czas zapisu danych do pamici nielokalnej moe by znacznie duszy od czasu odczytu
z tej pamici
Patrz wyej.

Kady procesor ma dostp do pamici operacyjnej kadego wza


Patrz wyej.

Procesy komunikuj si poprzez przesy komunikatw


Przesy komunikatw wystpuje w systemach MPP, gdzie pami jest rozproszona fizycznie i logicz-
nie. W NUMA jest fizycznie rozproszona midzy wzami (do przesyu informacji wykorzystywana
jest sie czc wzy), ale stanowi logicznie jedn cao.

Pami operacyjna jest rozproszona fizycznie pomidzy wzami, ale wsplna logicz-
nie
Patrz wyej.

37. W architekturze CC-NUMA:


Kady procesor ma dostp do pamici operacyjnej kadego wza
Tak, poniewa architektura NUMA opiera si o niejednorodny dostp do pamici - kady procesor
ma peny dostp do pamici lokalnej oraz nielokalnej, czyli pamici podrcznych wszystkich innych
procesorw.

Spjno pamici pomidzy wzami jest utrzymywana za pomoc protokou MESI


Nie, nie jest potrzebna spjno pamici, poniewa kady procesor odczytuje potrzebne mu zmienne
itp. porednio przez katalog.

Dane s wymieniane midzy wzami w postaci linii pamici podrcznej


Kada linia posiada pewn liczb bajtw, ktre inne procesory mog pobiera. Moliwe, e i katalogi
korzystaj z wymiany danych poprzez linie.

Pami operacyjna jest fizycznie rozproszona pomidzy wzami, ale wsplna logicz-
nie
Dokadnie tak.

65
38. W systemach wieloprocesorowych o architekturze CC-NUMA:
Spjno pamici wszystkich wzw jest utrzymywana za pomoc katalogu
Tak, w NUMA do zachowania spjnoci danych mona stosowa wycznie katalogi (a np. protokou
MESI nie).

Pami operacyjna jest rozproszona fizycznie pomidzy wzami, ale wsplna logicznie
Dokadnie tak.

Kady procesor ma bezporedni dostp do pamici operacyjnej kadego wza


Nie, dostp jest poredni. Pami w CC-NUMA jest fizycznie rozproszona, wic co musi pored-
niczy w tej wymianie danych. Suy do tego mechanizm katalogw i wzw. Procesor zgasza
zapotrzebowanie na lini pamici do katalogu i j pniej otrzymuje.

Dane s wymieniane midzy wzami w postaci linii pamici podrcznej


Tak, poniewa w architekturze NUMA wymiana rekordw pamici nastpuje z uyciem caej linii.
Np. jeli procek chce pobra jednego floata 4-bajtowego, a linia ma 16 bajtw, to musimy pobra
ca lini (ale i tak odbywa si to bardzo szybko).

39. W architekturze CC-NUMA czas dostpu do pamici operacyjnej moe zalee od:

Rodzaju dostpu (odczyt - zapis)


Zapis jest znacznie wolniejszy, bo wymaga aktualizacji caej spjnej logicznie pamici.

Stanu linii (zapisanego w katalogu), do ktrej nastpuje odwoanie


Jak linia znajduje si ju w katalogu, to nastpuje odczyt tylko.

Pooenia komrki, do ktrej odwouje si rozkaz (lokalna pami wza pami


innego wza)
Dostp do pamici nielokalnej (innego procka) jest znacznie duszy (ok. 10-krotnie)

Odlegoci wzw, zaangaowanych w wykonanie rozkazu, w strukturze sieci czcej


Rnice s rzdu mikrosekund, nie jest to znaczcy czas, tylko margines bdu najwyej.

66
40. Katalog moe by stosowany do:
Utrzymania spjnoci pamici podrcznych poziomu L1 i L2 w procesorach wielordzeniowych.
Wiadomo, e katalog jest wykorzystywany do zachowania spjnoci tego rodzaju pamici, ktra jest
wsplna (L2). L1 jest pamici prywatn rdzenia, wic nie ma potrzebny zachowywa jej spjnoci.

Utrzymania spjnoci pamici wszystkich wzw w systemach CC-NUMA


Systemy NUMA wykorzystuj katalogi do zachowania spjnoci pamici, i tylko katalogi.

Do utrzymania spjnoci pamici wzw systemw wieloprocesorowych z pamici rozproszon


(MPP)
Jeli chodzi o zachowanie spjnoci pamici w obrbie wza, to tak, bo wzem moe by system
UMA lub NUMA. Ale, jeli chodzi o zachowanie spjnoci pamici midzy wzami, to nie, bo do
tego suy przesy komunikatw.

Sterowania realizacj wtkw w architekturze CUDA


Zdecydowanie bullshit, CUDA nie wykorzystuje katalogu. W CUDA wtkami steruje osobny
procesor wtkw.

41. Spjno pamici podrcznych w procesorze wielordzeniowym moe by m.in. zapewniona


za pomoc:

Przecznicy krzyowej
Nie, to rozwizanie sieci pocze w architekturze UMA. Mao wydajna.

Katalogu
To mechanizm do zachowania spjnoci jaki stosowany jest gwnie w architekturze NUMA, ale
UMA te moe.

Protokou MESI
Tak, i tylko to do tego suy. Wykorzystuje do wycznie architektura UMA.

Wsplnej magistrali
Nie, jest to jeden z rodzajw pocze w architekturze UMA, ale nie ma nic wsplnego ze spjnoci
pamici jej prockw.

67
42. Systemy wieloprocesorowe z pamici wspln:
Zapewniaj jednorodny dostp do pamici
Nie, bo NUMA nie zapewnia. Jednorodny dostp wystpuje wtedy, gdy procesor ma dostp wycznie
do swojej pamici podrcznej. Niejednorodny wtedy, gdy ma dostp rwnie do pamici nielokalnej
(pamici podrcznej innych procesorw.)

Mog wykorzystywa procesory CISC


Nie ma takiego ograniczenia.

S wykorzystywane w klastrach
Tak, wzy w postaci serwerw SMP.

Wykorzystuj przesy komunikatw midzy procesorami


Nie, wykorzystuj protok MESI do snoopingu oraz katalogi w celu zapewnienia spjnoci pamici
podrcznej.

Wykorzystuj katalog do utrzymania spjnoci pamici podrcznych


Patrz wyej.

43. W systemach wieloprocesorowych katalog suy do:


ledzenia adresw w protokole MESI
Nie no kurwa, szanujmy si, katalogi powstay po to by wyprze protok MESI.

Sterowania przesyem komunikatw


Nie, w UMA i NUMA nie ma przesyu komunikatw, to jest w MPP i klastrach.

Utrzymania spjnoci pamici w systemach o niejednorodnym dostpie do pamici


No tak, patrz poprzednie pytania. To jest problem z jakimi borykaj si UMA i NUMA. Katalog
mona stosowa do jego rozwizania w obu architekturach.

Realizacji dostpu do nielokalnych pamici w systemach NUMA


Katalogi i wzy stanowi mechanizm do wymiany informacji midzy prockami i ich pamiciami.

68
44. Charakterystyczne cechy architektury MPP:
Spjno pamici podrcznej wszystkich wzw
Spjno wrcz nie powinna by zapewniana, kady element s swoj wasn, odrbn pami.

Fizycznie rozproszona PaO


Tak, jest fizycznie i logicznie rozproszona.

Fizycznie rozproszona PaO, ale logicznie wsplna


Nie, taka jest cecha systemw NUMA.

Przesy komunikatw midzy procesorami


Tak, to metoda synchronizacji wykonywania zada.

Niska skalowalno
Nie, jest przeogromna.

Jednorodny dostp do pamici wszystkich wzw


Nie, pami jest rozproszona.

69
45. Systemy pamici rozproszon (MPP):
Wyrniaj si bardzo du skalowalnoci
Posiadaj ogromn skalowalno, tylko klastry maj lepsz.

S budowane z wzw, ktrymi s klastry


Wzami mog by tylko systemy UMA i NUMA oraz zwyke pojedyncze procesory.

Realizuj synchronicznie jeden wsplny program


Nie musz by synchronicznie wykonywane (s synchronizacje, ale jeden wze moe realizowa
szybciej pewne czci programu)

Wymagaj zapewnienia spjnoci pamici podrcznych pomidzy wzami


Wrcz nie powinny jej zapewnia, kady wze pracuje osobno.

Wymian danych i synchronizacj procesw w wzach realizuj poprzez przesy ko-


munikatw.
Tak, pami jest logicznie rozproszona, a wzy s fizycznie oddzielne, do komunikacji wystarcza
tylko przesy komunikatw.

W wikszoci przypadkw wykorzystuj nietypowe, firmowe rozwizania sieci czcych wzy sys-
temu.
Nie wiem czy w wikszoci przypadkw, ale na slajdach wikszo jest powicona typowym rozwi-
zaniom sieciowym (hiperszecian, krata, torus, przecznica krzyowa), a custom network to tylko
dodatek.

Wykorzystuj katalog do utrzymania spjnoci pamici wzw systemu.


Midzy wzami w MPP wykorzystuje si przesy komunikatw. Katalogi sa wykorzystywane przez
systemy UMA i NUMA, ktre mog by wzami w MPP. Jednak komunikacja midzy samymi
wzami ich nie wykorzystuje.

W roli wzw mog wykorzystywa systemy SMP.


Poznane podkategorie SMP, UMA i NUMA, mog by wzami.

70
46. Systemy MPP s zbudowane z wzw ktrymi mog by:
Systemy SMP
Wzami mog by zarwno systemy UMA, jak i NUMA. Ponadto dopuszcza si zwyke procesory
z pamici operacyjn. Patrz: organizacja MPP 14.2. S to jedyne moliwe rodzaje wzw.

Klastry
Patrz wyej.

Konstelacje
Patrz wyej.

Systemy NUMA
Patrz wyej.

Procesory
Patrz wyej.

47. Przesy komunikatw:

Ma miejsce w systemach MPP


Tak, w MPP oraz w klastrach.

W systemach MPP II-giej generacji angauje wszystkie procesory na drodze przesyu


Nie, bo w II generacji s routery wzw poredniczcych, ktre nie angauj procesorw. W I
generacji wszystkie komputery byy zaangaowane, poniewa rol routera peni sam procesor.

Ma miejsce w klastrach
Tak, patrz wyej.

48. Cechami wyrniajcymi klastry s:


Niezaleno programowa kadego wza
Tak, bo kady wze na swj osobny system operacyjny.

Fizycznie rozproszona, ale logicznie wsplna pami operacyjna


Jest fizycznie i logicznie rozproszona.

Niedua skalowalno
Kurwa, nie XD Klastry maj arcydupn skalowalno.

Na og dua niezawodno
Tak, po to si je buduje i na og j maj. Redundancja wzw, mirroring dyskw, kontrola
funkcjonowania wzw. Patrz: Niezawodno klastrw 15.8

71
49. Klastry:
Maj redni skalowalno
Maj najwiksz skalowalno ze wszystkich poznanych systemw. atwiej go rozszerza ni MPP,
poniewa jest jednym wielkim systemem komputerowym.

Wykorzystuj model wsplnej pamici


Nie, jest rozproszona fizycznie i logicznie.

W wzach mog wykorzystywa systemy SMP


Tak, serwery SMP s jednymi z dopuszczalnych wzw. Drugimi s pene komputery PC. Patrz:
wzy w klastrach 15.3.1

Do komunikacji midzy procesami wykorzystuj przesy komunikatw


Tak, bo jest efektownym rozwizaniem, i tylko go wykorzystuj.

Wykorzystuj przecznic krzyow jako sie czc wzy


Nie, ona jest wykorzystywana tylko w systemach UMA, gdzie pami wsplna jest fizycznie jedno-
rodna.

W kadym wle posiadaj pen instalacj systemu operacyjnego


Tak, wzem musi by albo serwer SMP, albo PC, ktre musz mie swoje systemy operacyjne.

50. Do czynnikw tworzcych wysok niezawodno klastrw nale:


Mechanizm mirroringu dyskw
Tak, bo system operacyjny moe.

Dostp kadego wza do wsplnych zasobw (pamici zewntrznych)


Tak, w razie czego mona podpi i korzysta z dodatkowej pamici.

Redundancja wzw
No tak, jest.

Mechanizm heartbeat
Tak, gdy ten mechanizm przestaje odbiera bicie serca jednego z wzw, wwczas moe wywoa
procedur obsugi - przenie zadania do innego wza, wczy powiadomienie itp.

Zastosowanie procesorw wielordzeniowych w wzach


Nie, nie chodzi o liczb rdzeni, ale o to, e kady wze jest osobnych systemem, serwerem lub
pecetem.

72
51. Dla sieci systemowych (SAN) s charakterystyczne
Przesy komunikatw w trybie zdalnego DMA
Tak, bo przesyamy dane midzy prockami, a DMA wykonuje to najszybciej.

Bardzo mae czasy opnie


Tak, rzdu pojedynczych mikrosekund.

Topologia typu hiperszecian


Bullshit, sie jest taka jak topologia systemu, nie buduje si osobnej topologii.

Niska przepustowo
Noelonie, do pamici potrzebna jest dua przepustowo, bo przechodzi przez ni duo danych.

52. Sieci systemowe (SAN)

Wymagaj protokou MESI


Sieci to tylko kabel, nie maj wymaga co do zarzdzania pamici XD

Wykorzystuj przeczniki czone wg topologii grubego drzewa


Topologi grubego drzewa wykorzystuje np. InfiniBand, ktra jest sieci czc w klastrach znaj-
dujcych si w komputerach top500.

Realizuj przesyy blokw danych bezporednio midzy pamiciami operacyjnymi w-


zw sieci
Sieci SAN posiadaj sterowniki DMA, czyli mog przesya dane bezporednio midzy pamiciami,
a same dane przesyane s w pakietach, czyli jakich blokach.

S stosowane w klastrach
Tak, cz wzy z systemami.

73
53. Czy ponisza lista jest rosnco uporzdkowana wedug skalowalnoci:
Systemy cile poczone, systemy ze wspln pamici, systemy SMP
Systemy SMP to caa kategoria systemw z pamici wspln, z kolei systemy cile poczone i
systemy ze wspln pamici s rwnoznaczne - s przeciwiestwem do systemw luno powi-
zanych (z pamici rozproszon).

Systemy ze wspln magistral, systemy wielomagistralowe, systemy z przecznic


krzyow
S to systemy wieloprocesorowe (UMA) z pamici wspln, patrz: Klasyfikacja 11.2.1
- Systemy ze wsplna magistral - najprostsze i najmniej skalowalne
- Systemy wielomagistralowe - szybsze i bardziej zoone, wci kiepsko skalowalne
- Systemy z przecznic krzyow - dua szybko i zoono obliczeniowa, trudne w rozbudowie
Ogem jest to dolna pka tych systemw.

Systemy SMP, systemy z pamici wieloportow, systemy z przecznic krzyow


SMP to rodzaj architektury, z kolei w systemach UMA systemy z przecznic krzyow s mniej
skalowalne ni systemy z pamici wieloportow, patrz: Klasyfikacja 11.2.1.

NUMA, MPP, SMP


MPP jest znacznie bardziej skalowalny ni SMP (pami rozproszona > pami wsplna). NUMA
to systemy SMP z niejednorodnym dostpem do pami - s bardziej skalowalne ni zwyke SMP
(dziki szybkiej pamici lokalnej cache), ale mniej ni MPP.

Systemy z pamici wspln, systemy o niejednorodnym dostpie do pamici, z pa-


mici rozproszon
Dwa pierwsze to rodzaje systemw SMP. Najmniej skalowalne s systemy z pamici wspln,
domylnie o jednorodnym dostpie do pamici (UMA). Niejednorodny dostp do pamici wsplnej
(NUMA) jest szybszy, poniewa wykorzystuje pami lokaln procesora, wzy i katalogi. Mechanizm
katalogw jest o wiele bardziej skalowalny ni mechanizm snoopingu, wykorzystywany w UMA.
Nastpnie system z pamici rozproszon to MPP - system masywnie rwnolegy. Jest najbardziej
skalowalny ze wszystkich.

SMP, NUMA, klastry, UMA


SMP jest najmniej skalowalny z wymienionych. UMA ma jednorodny dostp do pamici i jest mniej
skalowalna od NUMA. Klastry s najbardziej skalowalne (nie wiem czy mniej lub bardziej do MPP).

Systemy symetryczne, o niejednorodnym dostpie do pamici, systemy z przesyem


komunikatw
Systemy symetryczne to SMP z jednorodnym dostpem do pamici. Systemy SMP z niejednorodnym
dostpem s bardziej skalowalne. Z kolei systemy z przesyem komunikatw sugeruj system MPP,
z pamici rozproszon - jest on najbardziej skalowalny.

74
54. Sprztowe przeczenie wtkw moe by wynikiem:
Chybienia przy odwoaniu do pamici podrcznej.
Patrz: realizacja sprztowej wielowtkowoci 7.2

Upywu zadanego czasu (np. taktu)


Jest co takiego jak wielowtkowo drobnoziarnista, ktra przecza wtki co takt.

Wystpienia rozkazu rozgazienia


Dopiero jak nastpi bd przewidywania. Przy drabince IFw byby armageddon.

Bdnego przewidywania rozgazie


Patrz: realizacja sprztowej wielowtkowoci 7.2

Przesunicia okien rejestrw


To tylko zmiana rejestrw, niezwizana z wtkami.

55. Sprztowe sterowanie wielowtkowoci:


Zapewnia lepsze wykorzystanie potokw.
Tak, ma na celu minimalizacj problemw, jakie stwarza przetwarzanie potokowe, jak hazard ste-
rowania, zalenoci midzy rozkazami oraz chybione odwoania do pamici.

Wymaga zwielokrotnienia zasobw procesora (rejestry, liczniki rozkazw i inne)


Tak, aby mc wykona sterowa wtkami na poziomie sprztu potrzeba wicej sprztu.

Nie moe by stosowane w przypadku hazardu sterowania


To sterowanie suy wanie minimalizacji start powstaych m.in. z hazardu sterowania.

M.in. minimalizuj straty wynikajce z chybionych odwoa do pamici podrecznej


Patrz wyej.

56. Dostp kadego procesora do wsplnej pamici operacyjnej jest realizowany w systemach:
NUMA
W NUMA pami jest rozdzielona fizycznie, ale logicznie wsplna. Wszystkie procesory maj do
niej dostp.

SMP
Wszystkie modele SMP, jak UMA, NUMA czy CC-NUMA posiadaj pami logicznie wspln.

Klaster
Pami jest logicznie rozproszona, kady wze(czyli system) posiada swoj.

MPP
Pami jest logicznie rozproszona, kady wze (procesor albo system UMA / NUMA) posiada swoj.

75
57. Procesory wielordzeniowe:
S niezbdne do realizacji rozkazw wektorowych.
Nie, o ile wiele rdzeni moe umoliwi wykonywanie rozkazw wektorowych, to warunkiem ko-
niecznym do wykonywania rozkazw wektorowych jest istnieje wielu jednostek przetwarzajcych w
dowolnej postaci.

Tworz systemy wieloprocesorowe ze wspln pamici i jednorodnym dostpem do pamici.


Tak, mog one tworzy system wieloprocesorowy (z rdzeniami), ale pami CHYBA nie musi by
wsplna o jednorodnym dostpie (no bo chyba kady rdze moe mie wasn.)??

S niezbdne do wspbienego przetwarzania wtkowego.


Tak, jest to konieczne aby realizowa wspbienie wiele wtkW w obrbie jednego procesora.

Wymagaj kontroli spjnoci pamici podrcznych.


Kady rdze posiada pami podrczn L1, ktra jest prywatna oraz pami podrczn L2, ktra jest
publiczna. Do L2 inne rdzenie mog si odnosi poprzez magistral i wystpuje problem spjnoci
cacheu.

76
Pytania otwarte
1 2010, Termin I (odpowiedzi z forum)
1. Ktre cechy architektury CISC zostay zmienione i w jaki sposb w architekturze
RISC?
RISC:
niezbyt dua lista rozkazw, rozkazu wykonywane w zasadzie w 1 cyklu (zmiana)
niewielka liczba trybw adresowania (zmiana)
staa dugo i prosty format rozkazu (chyba te zmiana)
model oblicze rejestr-rejestr, wszystkie argumenty s w rejestrach (zmiana)
dostp do pamici jedynie dziki rozkazom STORE i LOAD
dua ilo rejestrw uniwersalnych (chyba te zmiana)
jednostka sterujca zbudowana jako ukad
intensywne wykorzystanie potokowoci
stosowanie kompilatorw o duych moliwociach optymalizacyjnych
Cechy:
dua liczba rozkazw
dua liczba trybw adresacji (5 20, Vax 20 )
model oblicze pami pami
komplikowana struktura sprztu, przy maym wykorzystaniu rozkazw zoonych
duy rozrzut cech rozkazw w zakresie: zoonoci, dugoci, czasu wykonania

2. Wymie najwaniejsze cechy architektury procesorw superskalarnych.


Kilka potokowych jednostek operacyjnych
Wykonywanie kilku rozkazw w 1 takcie
Honieczno pobrania z PaO kilku rozkazw jednym takcie

3. Wyjanij na czym polega problem zalenoci midzy danymi przy potokowej realizacji
rozkazw. Podaj przykady rozwizania tego problemu w jednopotokowych proceso-
rach RISC.
I1 : R3 R3opR5
I2 : R4 R3 + 1
I3 : R3 R5 + 1
I4 : R7 R3 op R4
prawdziwa zaleno danych (RAW) - rozkaz I2 musi czeka na wykonanie rozkazu I1,
podobnie I4 musi czeka na I3
zaleno wyjciowa (WAW) - gdyby rozkazy I1 oraz I3 byy realizowane rwnolegle (np.
w rnych jednostkach funkcjonalnych), to wykonanie I3 musi si zakoczy po I1.
antyzaleno (WAR) - w przypadku rwnolegej realizacji rozkazw I2 oraz I3 (lub zmiany
kolejnoci tych rozkazw), wykonanie rozkazu I3 nie moe by zakoczone, dopki nie
nastpi pobranie argumentu (odczyt) w rozkazie I2.

77
Rozwizania:
NOP
Proces przemianowania rejestrw (moe to pomc; nie jestem pewien)
Wstrzymanie napeniania potoku
Optymalizacja kodu na poziomie kompilacji / linkowania (odpowiedzialno zrzucona na
kompilator)

4. Omw budow systemw o niejednorodnym dostpie do pamici (ccNUMA)


Komputery w architekturze NUMA nale do systemw MIMD o niejednolitym dostpie do pa-
mici. Bierze to si std, i kady procesor ma wasn pami; jednak do tej pamici ma rwnie
dostp kady inny procesor, zt tylko rnic, e czas dostpu do takiej pamici jest duo wikszy
ni czas dostpu do pamici, ktr dany procesor posiada. Zaliczenie procesora z pamici i jed-
nostk zarzdzajc pamici nazywa si wzem. Zadaniem takiej jednostki zarzdzajcej pamici
jest odpowiednie kierowanie adresw i danych w zalenoci o ktr pami nam chodzi (lokaln dla
danego procesora czy te znajdujc si przy innym procesorze). We wspczesnych rozwizaniach
praktycznych duy nacisk kadzie si na zgodno (spjno) pamici podrcznej (s to systemy
typu CC-NUMA)
MIMD typu C.C.-NUMA (ze spjnoci pamici podrcznej).
5. Wymie i krtko scharakteryzuj rozwizania konstrukcyjne serwerw uywanych do
budowy klastrw.

Serwery wolnostojce
Serwery stelaowe
Zalety:
moliwo instalowania obok siebie serwerw rnych dostawcw
Wady:
kable zasilajce
kable sieciowe
chodzenie
Serwery kasetowy
Zalety:
jedna obudowa typu blade
wsplne zasilanie i chodzenie - jeden kabel zasilajcy
prostsze okablowanie sieciowe
proste zarzdzanie
mniejsze wymiary i dua gsto upakowania
Wady:
moliwo instalowania tylko identycznych serwerw

78
2 2013, Termin I (odpowiedzi z forum)
1. Wymie cechy architektury superskalarnej.
Patrz: 2

2. Uszereguj systemy wieloprocesorowe i klastry rosnco wg skalowalnoci.


Wedug mnie chocia nie jestem tego pewien to systemy wieloprocesorowe trzeba by uszeregowa
tak:

komputery macierzowe (jeeli traktowa elementy przetwarzajce jako osobne jednostki) -


ciko zwiksza elementy przetwarzajce lub ukady macierzowe jako peryferia komputera
UMA - cikie do rozbudowy ze wzgldu na pojedyncz magistral lub przecznic
NUMA - rednie w rozbudowie
MPP - atwe w rozbudowie; wystarczy dokada procesory i zadba o przepyw danych (wy-
miana komunikatw)
Klastry - wydajnociowe i niezawodnociowe; pracujce na wsplnych dyskach; kady z nich
ma osobny, niezalenie utrzymywany system operacyjny

3. Scharakteryzuj oglnie systemy typu klaster.

Sieci czce standardy: Gigabit Ethernet, Infiniband


Komunikacja midzy wzami (procesami) przesy komunikatw
Bardzo wysoka skalowalno
Cele budowy: wysoka wydajno lub/i wysoka niezawodno
Korzystny wskanik: cena/wydajno
Wedug mnie jeszcze oprogramowanie, ktre umoliwi prawidow prac tych wszystkich kom-
puterw

4. Wyjanij, na czym polega problem zalenoci midzy danymi przy potokowej realizacji
rozkazw. Podaj przykady rozwizania tego problemu w jednopotokowych proceso-
rach RISC i w procesorach superskalarnych.
Patrz: 3

5. Co jest celem sprztowego sterowania wspbien realizacj wielu wtkw w jednym


rdzeniu? Jakie s metody i jakie warunki sprztowej realizacji wielowtkowoci?
Celem wspbienej realizacji dwch (lub wicej) wtkw w jednym procesorze (rdzeniu) jest mi-
nimalizacja strat cykli powstaych w trakcie realizacji pojedynczego wtku w wyniku:

chybionych odwoa do pamici podrcznej,


bdw w przewidywaniu rozgazie,
zalenoci midzy argumentami kolejnych rozkazw.

Warunki sprztowej realizacji wielowtkowoci:

powielenie zestaww rejestrw uniwersalnych (lub powielenie tabel mapowania rejestrw)


powielenie licznikw rozkazw
powielenie ukadw dostpu do pamici podrcznej (tabel stron)
powielenie sterownikw przerwa

79
3 2014, termin I, NSI
1. Scharakteryzuj oglnie procesory o architekturze superskalarnej
Procesor superskalarny posiada potoki, ktre umoliwiaj wykonywanie wikszej ni 1 liczby
rozkazw w 1 takcie.
Potrafi zaadowa kilka rozkazw z pamici operacyjnej w jednym takcie procesora.
Z tych powodw wynika hazard sterowania oraz hazard danych.
Hazard sterowania wynika z potokowoci i polega na moliwoci bdnego przewidywania roz-
gazie i warunkw. Eliminuje si go stosuj ukady przewidywania rozgazie (sprztowo)
lub przez programist metod skokw opnionych (programowo).
Hazard danych rwnie wynika z potokowoci procesora, polega na przetwarzania danych
w taki sposb, e rwnolege wykonywania operacji, moe skutkowa bdnym wykonaniem
programu. Mona wyrni 3 rodzaje zalenoci:
Prawdziwa zaleno danych (RAW - Read After Write) - prba odczytania zmiennej
ktra jest jednoczenie zapisywana. Mona rozwiza przez szyn zwrotn (wyprzedzajce
pobieranie argumentu) lub metod przemianowania rejestrw.
Zaleno wyjciowa (WAW - Write After Write) - prba zapisania zmiennej ktra jest
jednoczenie zapisywana. Ten rodzaj zalenoci musi by wykrywany sprztowo.
Antyzaleno (WAR - Write After Read ) - prba zapisania zmiennej ktra jest jedno-
czenie odczytywana. Mona rozwiza przez wstrzymanie napeniania potoku na 1 takt
lub metod przemianowania rejestrw.
2. Wyjanij na czym polega rnica w wykonaniu rozkazw wektorowych w komputerach
wektorowych i macierzowych
W komputerach wektorowych czas wykonania rozkazu wektorowego jest wprost proporcjonal-
ny do dugoci wektora. Z kolei w komputerach macierzowych, jeli ten posiada wystarczajc
liczb jednostek (co najmniej dugo wektora x dugo wektora), czas ten jest stay.
3. Scharakteryzuj oglnie systemy typu klaster
Pami systemw klaster jest rozproszona fizycznie i logicznie.
Wzem klastra moe by albo komputer osobisty (PC), albo system SMP jako serwer.
Kady wze klastra musi posiada osobny system operacyjny.
Klaster moe by wzem systemu MPP.
Za komunikacj odpowiada przesy komunikatw.
Wzy s poczone za pomoc sieci specjalizowane SAN lub zwykej sieci LAN.
Klastry charakteryzuj si wysok niezawodnoci i wydajnoci za rozsdn cen.
Bardzo wysoka skalowalno.
4. Wyjanij na czym polega problem zalenoci midzy danymi przy potokowej realizacji
rozkazw. Podaj przykady rozwizania tego problemu w procesorach RISC.
przy potokowej realizacji rozkazw wystpuje hazard danych, czyli zalenoci midzy danymi.
Mona wyrni ich 3 rodzaje:
Prawdziwa zaleno danych (RAW - Read After Write) - prba odczytania zmiennej
ktra jest jednoczenie zapisywana. Mona rozwiza przez szyn zwrotn (wyprzedzajce
pobieranie argumentu) lub metod przemianowania rejestrw.
Zaleno wyjciowa (WAW - Write After Write) - prba zapisania zmiennej ktra jest
jednoczenie zapisywana. Ten rodzaj zalenoci musi by wykrywany sprztowo.
Antyzaleno (WAR - Write After Read ) - prba zapisania zmiennej ktra jest jedno-
czenie odczytywana. Mona rozwiza przez wstrzymanie napeniania potoku na 1 takt
lub metod przemianowania rejestrw.
5. Omw organizacj pamici podrcznych (PaP) oraz metody sprowadzania danych z
pamici operacyjnej do PaP? Dlaczego stosuje si pamici podrczne.

80
4 2015, Termin 0
1. Omw najwaniejsze cechy architektury CUDA w szczeglnoci model pamici.
Cechy architektury:
CUDA to architektura wielordzeniowych procesorw graficznych, to uniwersalna archi-
tektura obliczeniowa wraz z rwnolegym modelem programistycznym, wspiera C i C++.
Posiada uniwersalny procesor przetwarzajcy wierzchoki, piksele i geometri oraz uni-
wersalne programy obliczeniowe.
Posiada procesor wtkw, ktry eliminuje rczne zarzdzanie rejestrami wektorowymi.
Oparta jest o model SIMT (single-instruction multiple-thread ), gdzie wiele niezalenych
wtkw wykonuje rwnoczenie t sam instrukcj.
Model programistyczny dzieli kod na cz wykonywan przez procesor i cz wykony-
wan przez kart graficzn.
Wtki:
Kady wtek niezalenie wykonuj t sam operacj oraz ma swoj lokaln pami, do-
datkowo wtki maj wspln pami globaln i wspdzielon.
Za komunikacj midzy wtkami odpowiadaj mechanizmy synchronizacji (barrier syn-
chronization).
Wtki s automatycznie grupowane w bloki o geometrii 1, 2 lub 3-wymiarowej.
Bloki grupowane s w siatk (grid - krat) o geometrii 1, 2-wymiarowej.
Bloki wtkw tworzcych siatk musz si wykonywa niezalenie.
Model pamici:
Pami globalna - dua, o czasie ycia aplikacji, dostpna dla kadego wtku w dowol-
nym bloku, o dugim czasie dostpu. W pamici globalnej wyrnia si:
Pami staych - may fragment, ktry jest tylko do odczytu oraz jest cache-owany,
dziki czemu dostp do niego jest bardzo szybki. Czas ycia oraz jej dostpno taka
sama.
Pami lokalna - wykorzystywana do przechowywania danych lokalnych wtku, kt-
re nie mieszcz si w rejestrach
Pami tekstur - posiada specyficzne metody adresowania i cache-owanie dla zasto-
sowa graficznych
Pami wspdzielona - niewielka, o czasie ycia bloku, dostpna dla kadego wtku
w bloku dla ktrego jest dedykowana, o bardzo krtkim czasie dostpu.
Rejestry - niewielka, bardzo szybka, o czasie ycia wtku. Tylko jeden wtek moe w
danym momencie korzysta z danego rejestru.
2. Omw budow systemw o niejednorodnym dostpie do pamici (NUMA).
Systemy NUMA zbudowane s z wielu procesorw, gdzie kady procesor posiada wasn,
bardzo szybk pami lokaln.
Dodatkowo procesory posiadaj wspln, ogromn pami wspln.
Dostp do nielokalnej pamici jest znacznie wolniejszy ni do lokalnej (ok. 10 razy).
W celu zapewnienia spjnoci midzy pamiciami podrcznymi stosowane s wzy i katalogi,
i tylko katalogi, ktre s znacznie lepsze od protokou MESI.
Mona wyrni podkategorie systemw: NC-NUMA (non-cached) i CC-NUMA (cache cohe-
rent)
Systemy te posiadaj redniej jakoci skalowalno
Pami podrczna jest fizycznie rozproszona, ale logicznie wsplna.
Dostp do pamici nielokalnej odbywa si z uyciem katalogw oraz odczytywanie caych linii
pamici podrcznej.
Architektura NUMA jest bardzo efektywna dla aplikacji, ktre czciej odczytuj z nielokalnej
pamici i nieefektywna dla aplikacji, ktre czci zapisuj do niej.
Przy zapisie trzeba zaktualizowa stan tej linii we wszystkich wzach, ktre je pobray do
siebie.

81
3. Porwnaj realizacj rozkazw wektorowych w komputerach wektorowych i macierzo-
wych. 9.2

W komputerze wektorowym:
Szybko realizacji rozkazw jest liniowo proporcjonalna do dugoci wektora.
Moc obliczeniowa ronie logarytmicznie (nieliniowo) wraz ze zwikszeniem dugoci wek-
tora.
Przyspieszenie (stosunek czasu wykonywania na komputerze szeregowym do czasu na
wektorowym) jest w idealnym przypadku rwna dugoci wektora.
Efektywno wykonywania rozkazw dy do pewnej staej wartoci, ktra jest efektyw-
noci idealn.
Z kolei w komputerze macierzowym:
Rozkaz wektorowy moe by wykonywany w jednym kroku (jeli jest wystarczajca liczba
jednostek przetwarzajcych), czyli w staym czasie.
Dzieje si tak dziki sieci elementw przetwarzajcych.
4. Wymie rnice midzy systemami SMP a MPP.
SMP posiada pami logicznie wspln, ale moe ona by fizycznie jednorodna (UMA) lub
rozproszona (NUMA). Z kolei MPP posiada pami fizycznie i logicznie rozproszon.
MMP jest znacznie bardziej skalowalne ni SMP (UMA - sabo, NUMA - rednio).
W SMP wymagany jest mechanizm do zachowania spjnoci pamici podrcznych procesorw
- moe to by protok MESI (UMA) lub katalogi (UMA i NUMA).
W MPP do kontroli wystarcza przesy komunikatw. Jest on realizowany programowo (MPP
I generacji) lub sprztowo przez routery (MPP II generacji).
W SMP istnieje jedna wsplna pami, z kolei w MPP kady wze ma swoj pami lokaln
plus opcjonalnie wspln.
W MPP jest wolniejsza komunikacji midzy wzami sieci - potrzebna jest wymiana wikszej
liczby informacji.
SMP wzem jest zwyky procesor, w MPP jest to procesor lub system wieloprocesorowy
(wanie SMP).
5. Omw rozwizania stosowane w klastrach o wysokiej niezawodnoci.
Redundancja wzw (mocy obliczeniowej) - wiksza moc obliczeniowa, wicej mocy w zapasie,
rne tryby pracy klastrw (aktywny-pasywny, pasywny-pasywny, mieszane)
Dostp do wsplnych zasobw (pamici zewntrznych) - wicej pamici, wspdzielona lub nie
(wspdziel wszystko, nie wspdziel nic).
Mirroring dyskw - zabezpieczenie przed utrat danych, zapis na dwch dyskach jednoczenie
tych samych danych
Mechanizmy kontrolujce funkcjonowanie wzw - efektywniejsza praca caoci jako jednego
systemu
Redundancja sieci czcych (dla 3 rodzajw sieci) - przypadku bdu sieci klaster nie przestaje
dziaa, tylko inna sie przejmuje kontrol
Redundancja zasilania - wincyj mocy i prundu
Mechanizmy kontrolujce funkcjonowanie wzw - Heartbeat oraz Fail-over. Heartbeat
to regularne wysyanie sygnaw przez wze do sieci, ktre wiadcz o poprawnej pracy. Jeeli
bicie serca zostanie przerwane / zakcone, do akcji wkracza Fail-over - obsuga awarii. Ten
przecza system, ktry uleg awarii na system rezerwowy. Poprzez Fail-back okrela si powrt
do stanu sprzed awarii.

82
Zadania egzaminacyjne
1 Sparc
Uwagi:

W jzyku asemblera SPARC komentarze s oznaczane przez znak wykrzyknika (!), a nie rednika
(;). W listingach s redniki ze wzgldu na wbudowany listingu asemblera w latexie.

1.1 Laborka: min, max oraz max - min


Ocena nieznana.

1.1.1 Funkcja w jzyku C

#i n c l u d e <s t d i o . h>
e x t e r n i n t minmax ( i n t tab , i n t n , i n t max , i n t min ) ;

i n t main ( )
{
i n t i , N, tab ;
i n t max , min , span ;
s c a n f ( %i , &N) ;
i f (N < 0 ) {
p r i n t f ( N < 0 ! \ n ) ;
r e t u r n 1;
}
tab = m a l l o c (N s i z e o f ( tab ) ) ;
f o r ( i = 0 ; i < N; ++i )
s c a n f ( %i , tab + i ) ;
span = minmax ( tab , N, &max , &min ) ;
p r i n t f ( min = %i , max = %i , span = %i \n ,
min , max , span ) ;
f r e e ( tab ) ;
return 0;
}

83
1.1.2 Odpowiednik w SPARCu

. g l o b a l minmax
.proc 4
; rejestry :
; %i0 - adres do tablicy
; %i1 - ilosc liczb (N)
; %i2 - adres do max
; %i3 - adres do min
;
; %l6 - pomocnicza do przechowania przesuniecia w bajtach
; %l7 - pomocnicza do porownywania z min/max
; %l1 - max
; %l2 - min
minmax :
s a v e %sp , 96, %sp ; przesuniecie okienka
; zaladuj wartosci dla max i min , gdy n <= 0
mov 0 , %l 1
mov 0 , %l 2
; sprawdz czy n > 0
s u b c c %i 1 , 1 , %i 1
b l t end
nop
; zaladuj startowe max (% l1) i min (% l2) z pierwszej liczby
l d [% i 0 ] , %l 1
mov %l 1 , %l 2
petla :
; sprawdz koniec petli
b l t end
; wylicz adres i zaladuj kolejna liczbe
smul %i 1 , 4 , %l 6
l d [% i 0+%l 6 ] , %l 0 ; %l0 - obecna liczba

; update max
s u b c c %l 0 , %l 1 , %l 7 ; %l1 - max
b l t next
nop
mov %l 0 , %l 1
next :
; update min
s u b c c %l 0 , %l 2 , %l 7 ; %l2 - min
bgt next2
nop
mov %l 0 , %l 2

next2 :
ba p e t l a
s u b c c %i 1 , 1 , %i 1

end :
; zapisz wynik
s t %l 1 , [% i 2 ]
s t %l 2 , [% i 3 ]
sub %l 1 , %l 2 , %i 0
ret
r e s t o r e ; odtworzenie okienka

84
1.2 Laborka, szukanie min i max
Ocena nieznana.
.global start
; defajny :
d e f i n e ( i l o s c , 4)
d e f i n e ( delta , 3)
; rejestry :
d e f i n e ( adres , l 3 ) ; %l3 - przesuniecie tablicy
d e f i n e ( min , l 1 ) ; %l1 - min
d e f i n e (max , l 2 ) ; %l2 - max
d e f i n e ( indeks , l 4 ) ; %l4 - indeks
d e f i n e ( pobrane , l 5 ) ; %l5 - pobrana wartosc
d e f i n e ( tmp , l 6 ) ; %l6 - pomocniczy
d e f i n e ( r o z p i e t o s c , o0 ) ; %o1 - zwrocona rozpietosc
; kod:
start :
s a v e %sp , 96, %sp
mov 0 , %a d r e s
mov 0 , %i n d e k s
;zapis wartosci poczatkowych min i max
l d [% a d r e s ] , %min
l d [% a d r e s ] , %max
;dodajemy delte do pierwszej komorki
add %min , d e l t a , %tmp
s t %tmp , [% a d r e s ]
petla :
add %i n d e k s , 1 , %i n d e k s ;indeks ++
add %a d r e s , 4 , %a d r e s ;przesuniecie na kolejny element
cmp %i n d e k s , i l o s c
be end
nop
;zwiekszamy o delte
l d [% a d r e s ] , %pobrane
add %pobrane , d e l t a , %pobrane
s t %pobrane , [% a d r e s ]
;sprawdzamy czy pobranma wartosc jest mniejsza niz min
s u b c c %pobrane , %min , %tmp
bg d a l e j
nop
mov %pobrane , %min
ba p e t l a e n d
nop
dalej :
;sprawdzamy czy pobrana wartosc jest wieksza niz max
s u b c c %pobrane , %max , %tmp
bl petla end
nop
mov %pobrane , %max
petla end :
ba p e t l a
nop
end :
sub %max , %min , %r o z p i e t o s c ;zapisujemy rozpietosc
ret

85
1.3 2008, I termin, Jerzy Respondek
1.3.1 Tre
Napisz funkcj w asemblerze procesora SPARC obliczajc sum liczb naturalnych od 1 do danej n jako
argument funkcji. Zaoy, e n >= 1.
Przykad: f(5) = 1 + 2 + 3 + 4 + 5 = 15

1.3.2 Propozycja rozwizania 1

. g l o b a l funkcja
.proc 4
funkcja :
s a v e %sp , 96, %sp ; trzeba tutaj to robi ???
mov %i 0 , %l 0 ; a
mov 1 , %l 1 ; liczba naturalna
mov 0 , %l 2 ; wynik
p e t l a :
add %l 1 , %l 2 , %l 2 ; liczba + suma = suma
add %l 1 , 1 , %l 1 ; liczba ++
subbcc %l 0 , 1 , %l 0 ; a--
bl koneic
nop
ba pe t l a
nop
koniec :
mov %l 2 , %i 0 ; wynik
ret
restore

1.3.3 Propozycja rozwizania 2

. g l o b a l sumator
.proc 4
sumator :
s a v e %sp , 96, %sp ! p r z e s u n i e c i e okna
mov %i 0 , %l 1 ! a w l1
mov %l 1 , %l 0 ! suma = a
petla :
s u b c c %l 1 , 1 , %l 1 ! dekrementacja l i c z n i k a
bneg k o n i e c
add %l 0 , %l 1 , %l 0 ! suma += l i c z n i k
ba p e t l a
koniec :
mov %l 0 , %i 0 ! zwr c e n i e sumy
ret
restore ! przywr c e n i e s t a n u okna

86
1.4 2010, I termin, Jerzy Respondek
1.4.1 Tre
Napisz w asemblerze procesora SPARC funkcj obliczajc sum kwadratw wszystkich liczb cakowitych
z przedziau a do b. Zaoy a < b, np.
f(2, 5) = 2 * 2 + 3 * 3 + 4 * 4 + 5 * 5
Nagwek funkcji ma mie posta:
int f ( int a , int b)

1.4.2 Propozycja rozwizania

87
1.5 2012, I termin, Jerzy Respondek
1.5.1 Tre
Napisz w asemblerze procesora SPARC funkcj realizujc dokadnie t sam operacj co jej odpowiednik
w jzyku C:
i n t f ( i n t tab , i n t n )
{
i n t i , suma = 0 ;
f o r ( i = 0 ; i < n ; i ++)
{
suma = ( 2 i + 1 ) tab [ i ] ;
suma = suma ;
}
r e t u r n suma ;
}

1.5.2 Propozycja rozwizania 1

. g l o b a l func
.proc 4

funkcja :
s a v e %sp , 96, %sp
mov %i 0 , %l 0 ; wskanik tablicy , tak podano argument
l d [% i 0 ] , %l 1 ; warto tablicy spod wskanika odczytujemy
poprzez LD
mov %i 1 , %l 2 ; rozmiar
mov 1 , %l 3 ; i
mov 0 , %l 4 ; temp
mov 0 , %l 5 ; suma
p e t l a :
s u b c c %l 2 , 1 , %l 2 ; n--
bl koniec ; if n < 0 koniec
nop

smul %l 3 , 2 , %l 4 ; temp = 2*i


add %l 4 , 1 , %l 4 ; temp = temp +1 = 2*i+1
smul %l 1 , %l 4 , %l 4 ; temp = temp * tab[i] = (2*i+1)*tab[i]
s u b c c %l 5 , %l 4 , %l 5 ; suma = suma - temp = suma - (2*i+1)*tab[i]

smul %l 5 , %l 5 , %l 5 ; suma = suma * suma


add %l 0 , 4 , %l 0 ; *tab ++ przesuwamy sie o 4 na kolejny element
bo tyle ma int
l d [% l 0 ] , %l 1 ; pobieramy nowy element
ba pe t l a
nop

koniec :
mov %l 5 , %i 0 ; zwracamy wynik w i0 bo po restore zamienia si
input na output
e
ret ; ret bo byo save
restore

88
1.5.3 Propozycja rozwizania 2

. g l o b a l fun
.proc 4

; a(n) = a(n - 1) ^ k + n * k; a(0) = 1


fun :
s a v e %sp , 96, %sp
; %i0 == n
; %i1 == k

s u b c c %i 0 , 1 , %o0 ; %o0 == n - 1
bneg r e t u r n 1
nop

; trzeba obliczyc a(n - 1)


mov %i 1 , %o1
c a l l fun
nop

; %o0 == a(n - 1)
mov %i 1 , %l 1 ; %l1 == k
mov 1 , %l 2 ; %l2 == 1 (tu bedzie wynik potegowania )
power :
umul %l 2 , %o0 , %l 2
s u b c c %l 1 , 1 , %l 1 ; dekrementuj licznik petli
bg power ; skok , gdy licznik > 0
nop

; %l2 == a(n - 1) ^ k
umul %i 0 , %i 1 , %i 0
; %i0 == n * k
add %i 0 , %l 2 , %i 0
; %i0 == a(n - 1) ^ k + n * k == a(n)
ba r e t u r n
nop

return1 :
mov 1 , %i 0
return :
ret
restore

89
1.6 2013, I termin, Jerzy Respondek
1.6.1 Tre
Napisz w asemblerze procesora SPARC funkcj zwracajc a(n) wyliczon z poniszego wzoru rekuren-
cyjnego, a pobierajc dwa argumenty: n oraz k, obydwa typu unsigned int.

a(n) = a(n 1)k + n k, a(0) = 1, n = 1, 2, 3, ...

1.6.2 Rozwizanie nr 1 by Doxus

.global start

start :
MOV 0 x05 , %g1 ;! g1 - K
MOV 0x0A , %o7 ;! rej o7 i i7 -> N ( lokalne )
MOV %o7 , %g7 ;! N absolutne

petla :
SAVE %sp , 96, %sp ;! otworzenie okna

SUBcc %i 7 , 0 x00 , %g0 ;! sprawdzenie , czy to dno


BE nzero
NOP

SUB %i 7 , 0 x01 , %o7 ;! wykonanie rekurencji


BA petla
NOP

nzero :
MOV 0 x00 , %i 5
MOV 0 x00 , %g2 ;! g2 temp n
petlapowrot :
RESTORE ;! zamkni e
cie koa

MOV %i 5 , %l 0 ;! obliczenia
MOV 0 x01 , %l 1 ;! temp k
petlamnoz :
UMUL %i 5 , %l 0 , %l 0 ;! obliczenia zgodnie ze wzorem
ADD %l 1 , 0 x01 , %l 1
SUBcc %l 1 , %g1 , %g0
BNE petlamnoz

UMUL %g2 , %g1 , %l 2


ADD %l 1 , %l 2 , %o5

ADD %g2 , 0 x01 , %g2

SUBcc %g2 , %g7 , %g0 ;! czy koniec odkre


cania koa
BLE petlapowrot
NOP

MOV %i 5 , %g1 ;! g1 - wynik koncowy


NOP ;! kuniec

90
1.6.3 Rozwizanie nr 2 by Trimack

.global start
.proc 4
;! Rejestry :
;! %i0 - n. Numer elementu cia gu , ktry chcemy pobra
;! %i1 - k. Parametr r wnania cia gu
;!
;! %l0 - zmienna tymczasowa do porwna
;! %l1 - licznik pote gowania
;! %l2 - wynik pote gowania
;! %l3 - wynik mnoenia n * k
;!
;! Wzr: a(n) = a(n - 1) ^ k + n * k; a(0) = 1
;! Warto zwracana : a(n)

start :
save %sp , 96, %sp ;! Przesuniecie okienka

subcc %i 0 , 1, %o0 ;! %o0 -> n - 1. if (n == 0)


bneg zwroc1
nop

subcc %i 1 , 1, %l 0 ;! if (k == 0)
bneg zwroc1
nop

mov %i 1 , %o1 ;! %o1 -> k


call start
nop

;! %o0 -> a(n - 1)


mov %i 1 , %l 1 ;! %l1 -> k
mov %o0 , %l 2 ;! %l2 -> a(n - 1)

power :
;! dekrementacja licznika i sprawdzenie , czy sko czyli my pote
gowa: if
(% l1 - 1 = 0)
subcc %l 1 , 1, %l 1
be powerEnd
nop
umul %l 2 , %o0 , %l 2 ;! %l2 *= a(n - 1)
ba power
nop
powerEnd :
;! %l2 -> a(n - 1) ^ k
umul %i 0 , %i 1 , %l 3 ;! %l3 = n * k
add %l 2 , %l 3 , %i 0 ;! %i0 = wynik
ba end
nop
zwroc1 :
mov 1, %i 0
end :
ret
restore

91
1.6.4 Rozwizanie nr 3
Podobno otrzymano za to 5, cho rozwizanie NIE JEST w peni poprawne.
. g l o b a l fun
.proc 4

fun :
save %sp , 96, %sp

mov %i 0 , %l 0 ; l0 - n
mov %i 1 , %l 1 ; l1 - k
mov 0, %l 2 ; power
mov 1, %l 3 ; a(n) = 1

subcc %i 0 , 1, %i 0
bl theEnd ; if n = 0 then jump to theEnd
nop

mov %l 0 , %l 2 ; power =n
smul %l 2 , %l 1 , %l 2 ; power = power * k
add %l 2 , %l 1 , %l 2 ; power = power + k

call fun ; call recursion


mov %i 0 , %l 3 ; get score of recursion

expo :
smul %l 3 , %l 3 , %l 3
subcc %l 2 , 1, %l 2
bl theEnd
nop
ba expo
nop
theEnd :
mov %l 3 , %i 0 ; return score
ret
restore
.end

92
1.7 2015, 0 termin, Jerzy Respondek
1.7.1 Tre
Napisz w asemblerze procesora SPARC funkcj realizujc dokadnie t sam operacj, co jej odpowiednik
w jzyku C:
i n t f ( i n t tab , i n t n )
{
i n t i , suma = 0 ;
f o r ( i = 0 ; i < n ; i ++)
{
suma += i tab [ i ] ;
}
r e t u r n suma ;
}

1.7.2 Rozwizanie 1 by Doxus

.global start
start :
;! i1 wskaznik na pocz tablicy
;! i2 n
;! i0 - wyjsciowa suma ( RESTORE spowoduje ze bedzie to w rej.
;! wyjsciowych funkcji nadrz e dnej
;! l0 , l1 - wskaznik na el. tablicy , n
;! l2 - iterator
;! l3 - suma
mov %i 1 , %l 0
mov %i 2 , %l 1
mov 0 x00 , %l 2
mov 0 x00 , %l 3
loop :
;! if sprawdzaj a czy i < n
subcc %l 2 , %l 1 , %g0
bge koniec
nop

ld [% l 0 ] , %l 7
umul %l 7 , %l 2 , %l 7
add %l 7 , %l 3 , %l 3

add %l 2 , 0 x01 , %l 2

ba loop
add %l 0 , 0 x04 , %l 0
;!mona zamieni miejscami i da nop , ale tak optymalniej

koniec :
mov %l 3 , %i 0

93
1.7.3 Rozwizanie 2 by Trimack

.global f
.proc 4
;! Rejestry :
;! %i0 - adres tablicy wejsciowej
;! %i1 - rozmiar tablicy (n)
;!
;! %l0 - zmienna tymczasowa do porwna
;! %l1 - suma
;! %l2 - licznik (i)
;! %l3 - i * a[i]
;!
;! int f(int *tab , int n)

f:
save %sp , 96, %sp
mov 0 , %l 1 ;! suma = 0
mov 0 , %l 2 ;! i = 0

subcc %i 1 , 1, %l 0 ;! if (n == 0)
bneg koniec
nop

petlaFor :
subcc %l 2 , %i 1 , %l 0 ;! if (i >= n)
bge koniec
nop

ld [% i 0 ] , %l 3 ;! %l3 = a[i]
smul %l 3 , %l 2 , %l 3 ;! %l3 = i * a[i]

add %l 1 , %l 3 , %l 1 ;! suma += i * a[i]


add %i 0 , 4, %i 0 ;! %i0 wskazuje na kolejny e. tablicy

add %l 2 , 1, %l 2 ;! i++
ba petlaFor
nop

koniec :
mov %l 1 , %i 0 ;! zwr cenie wyniku
ret
restore

94
2 PVM
2.1 Wstp z laborek, szukanie min i max
2.1.1 Tre
Napisa program znajdujcy minimum i maksimum z macierzy.
Hello.c - program gwny, rodzic; Hello other.c - program podrzdny, potomek.

2.1.2 Rozwizanie
Program przekazuje kolejne wiersze macierzy do programw potomnych, ktre znajduj lokalne minimum
i maksimum. Program zbiera wszystkie minima i maksima do tablicy o rozmiarze wysokoci macierzy.
Pod koniec sam rcznie wylicza min i max z tych dwch tablic.
Naley pamita, e programy potomne musz fizycznie znajdowa si na dyskach innych komputerw
w sieci PVM.
Program dziaajcy, oceniony na 5.
/* - Autorzy :
-- Forczu Forczma ski
-- Wuda Wudecki
*/
#i n c l u d e <s t d i o . h>
#i n c l u d e < s t d l i b . h>
#i n c l u d e <math . h>
#i n c l u d e pvm3 . h
#d e f i n e WYSOKOSC 5 // liczba wierszy
#d e f i n e SZEROKOSC 5 // liczba kolumn
/// Program rodzica
main ( )
{
// dane potrzebne do oblicze
i n t matrix [WYSOKOSC] [ SZEROKOSC ] ;
i n t m i n r e s u l t [WYSOKOSC] , m a x r e s u l t [WYSOKOSC] ;
i n t minimum , maksimum ;
// wype nienie macierzy danymi
int i , j ;
f o r ( i = 0 ; i < WYSOKOSC; ++i )
f o r ( j = 0 ; j < SZEROKOSC; ++j )
matrix [ i ] [ j ] = rand ( ) % 3 0 ;
// wypisanie macierzy na konsoli
f o r ( i = 0 ; i < WYSOKOSC; ++i )
{
f o r ( j = 0 ; j < SZEROKOSC; ++j )
p r i n t f ( %d , matrix [ i ] [ j ] ) ;
p r i n t f ( \n\n ) ;
}
// pobranie informacji
int ilhost , ilarch ;
s t r u c t pvmhostinfo i n f o ;
p v m c o n f i g (& i l h o s t , &i l a r c h , &i n f o ) ;
p r i n t f ( L i c z b a hostow : %d\n , i l h o s t ) ;

int id1 = 0;
int tid ;

95
// Dla kadego hosta - inicjujemy go
f o r ( i = 0 ; i < i l h o s t ; i++ )
{
pvm spawn ( /home/pvm/pvm3/ s e k c j a 1 1 / b i n /LINUX/ h e l l o o t h e r , 0 ,
PvmTaskHost , i n f o [ i ] . hi name , 1 , &t i d ) ;
i f ( tid < 0 )
{
i l h o s t ;
continue ;
}
p r i n t f ( t i d : %d\n , t i d ) ;
p v m i n i t s e n d ( PvmDataDefault ) ;
// wysyamy:
// id wiersza
pvm pkint(& id1 , 1 , 1 ) ;
// elementy wiersza
pvm pkint(& matrix [ i d 1 ] [ 0 ] , SZEROKOSC, 1 ) ;
pvm send ( t i d , 1 0 0 ) ;
i d 1 ++;
}
// // Wykonywanie programu a do przedostatniej pe tli
i n t b u f i d , c h i l d t i d , c h i l d i d 1 , tmp ;
w h i l e ( i d 1 < WYSOKOSC )
{
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
p r i n t f ( r e c v : %d\n , c h i l d t i d ) ;
// pobranie id wiersza
pvm upkint(& c h i l d i d 1 , 1 , 1 ) ;
// pobranie nowych min / max
pvm upkint(& m i n r e s u l t [ c h i l d i d 1 ] , 1 , 1 ) ;
pvm upkint(& m a x r e s u l t [ c h i l d i d 1 ] , 1 , 1 ) ;
// wysanie nowych danych
p v m i n i t s e n d ( PvmDataDefault ) ;
// id kolejnego wiersza
pvm pkint(& id1 , 1 , 1 ) ;
// nowy wiersz
pvm pkint(& matrix [ i d 1 ] [ 0 ] , SZEROKOSC, 1 ) ;
pvm send ( c h i l d t i d , 1 0 0 ) ;
i d 1 ++;
}
// // Odebranie ostatnich danych
f o r ( i = 0 ; i < i d 1 i l h o s t + 1 ; i++ )
{
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
p r i n t f ( r e c v : %d\n , c h i l d t i d ) ;
// pobranie id wiersza
pvm upkint(& c h i l d i d 1 , 1 , 1 ) ;
// pobranie nowych min / max
pvm upkint(& m i n r e s u l t [ c h i l d i d 1 ] , 1 , 1 ) ;
pvm upkint(& m a x r e s u l t [ c h i l d i d 1 ] , 1 , 1 ) ;
}

96
// uzysaknie minimum z wiersza
minimum = m i n r e s u l t [ 0 ] ;
maksimum = m a x r e s u l t [ 0 ] ;
f o r ( j = 1 ; j < WYSOKOSC; j ++)
{
i f ( m a x r e s u l t [ j ] > maksimum )
maksimum = m a x r e s u l t [ j ] ;
i f ( m i n r e s u l t [ j ] < minimum )
minimum = m i n r e s u l t [ j ] ;
}
p r i n t f ( Uzyskane w a r t o s c i : \ nMIN : %d , MAX: %d\n , minimum , maksimum ) ;
pvm exit ( ) ;
return 0;
}

Program potomka

#i n c l u d e <s t d i o . h>
#i n c l u d e <math . h>
#i n c l u d e pvm3 . h
#d e f i n e WYSOKOSC 5 // liczba wierszy
#d e f i n e SZEROKOSC 5 // liczba kolumn
/// Program potomka
i n t main ( )
{
i n t m a s t e r i d , id1 , j , c u r r r o w [SZEROKOSC] , curr min , curr max ;
// pobierz id rodzica
m a s t e r i d = pvm parent ( ) ;
i f ( m a s t e r i d == 0 )
exit (1) ;
while (1)
{
pvm recv ( m a s t e r i d , 1 0 0 ) ;
// pobranie warto ci:
// id wiersza
pvm upkint(& id1 , 1 , 1 ) ;
pvm upkint(& c u r r r o w [ 0 ] , SZEROKOSC, 1 ) ;
// uzysaknie minimum z wiersza
c u r r m i n = curr max = c u r r r o w [ 0 ] ;
f o r ( j = 1 ; j < SZEROKOSC; j ++)
{
i f ( c u r r r o w [ j ] > curr max )
curr max = c u r r r o w [ j ] ;
i f ( curr row [ j ] < curr min )
curr min = curr row [ j ] ;
}
// wysanie nowych danych
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(& id1 , 1 , 1 ) ;
pvm pkint(& curr min , 1 , 1 ) ;
pvm pkint(&curr max , 1 , 1 ) ;
pvm send ( m a s t e r i d , 2 0 0 ) ;
}
pvm exit ( ) ;
return 0;
}

97
2.2 Laborki, odejmowanie macierzy
2.2.1 Tre
Odejmowanie macierzy.

2.2.2 Rozwizanie
Ocena nieznana.
/* AK Lab 2 - PVM
Anna Kusnierz
Tomasz Szoltysek
Temat : Odejmowanie dwoch macierzy
*/
#i n c l u d e <s t d i o . h>
#i n c l u d e <math . h>
#i n c l u d e pvm3 . h
#d e f i n e MATRIX SIZE 20
i n t main ( )
{
int i , j ;
i n t count = 0 ; // licznik wierszy macierzy
int rescount ;
i n t t i d m a s t e r , i l h o s t , i l a r c h , b u f i d , t i d , bytes , msgtag ;
s t r u c t pvmhostinfo i n f o ;

i n t a [ MATRIX SIZE ] [ MATRIX SIZE ] , b [ MATRIX SIZE ] [ MATRIX SIZE ] , r [


MATRIX SIZE ] [ MATRIX SIZE ] ;
FILE t x t = f o p e n ( r e s u l t . t x t , w ) ;

f o r ( i =0; i <MATRIX SIZE ; i ++)


{
f o r ( j =0; j <MATRIX SIZE ; j ++)
{
a [ i ] [ j ] = rand ( ) ;
b [ i ] [ j ] = rand ( ) ;
}
}
f p r i n t f ( txt , Macierz A: \ n
\n\n ) ;
f o r ( i =0; i <MATRIX SIZE ; i ++)
{
f o r ( j =0; j <MATRIX SIZE ; j ++)
f p r i n t f ( txt , %d\ t , a [ i ] [ j ] ) ;
f p r i n t f ( txt , \n ) ;
}
f p r i n t f ( txt , Macierz B: \ n
\n\n ) ;
f o r ( i =0; i <MATRIX SIZE ; i ++)
{
f o r ( j =0; j <MATRIX SIZE ; j ++)
f p r i n t f ( txt , %d\ t , b [ i ] [ j ] ) ;
f p r i n t f ( txt , \n ) ;
}

98
t i d m a s t e r = pvm mytid ( ) ;
p v m c o n f i g (& i l h o s t , &i l a r c h , &i n f o ) ;
p r i n t f ( %d , i l h o s t ) ;
f o r ( i =0; i < ( i l h o s t > MATRIX SIZE ? MATRIX SIZE : i l h o s t ) ; i ++)
{
pvm spawn ( /home/pvm3/pvm3/ s e k c j a 4 / h e l l o o t h e r , 0 , PvmTaskHost , i n f o [
i ] . hi name ,1 ,& t i d ) ;
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(&a [ count ] [ 0 ] , MATRIX SIZE , 1 ) ;
pvm pkint(&b [ count ] [ 0 ] , MATRIX SIZE , 1 ) ;
pvm pkint(&count , 1 , 1 ) ;
pvm send ( t i d , 1 0 0 ) ;
++count ;
}
w h i l e ( count<MATRIX SIZE)
{
b u f i d = pvm recv ( 1 ,200) ;
p v m b u f i n f o ( b u f i d ,& bytes ,& msgtag ,& t i d ) ;
pvm upkint(& r e s c o u n t , 1 , 1 ) ;
pvm upkint(& r [ r e s c o u n t ] [ 0 ] , MATRIX SIZE , 1 ) ;
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(&a [ count ] [ 0 ] , MATRIX SIZE , 1 ) ;
pvm pkint(&b [ count ] [ 0 ] , MATRIX SIZE , 1 ) ;
pvm pkint(&count , 1 , 1 ) ;
pvm send ( t i d , 1 0 0 ) ;
++count ;
}
f o r ( i = 0 ; i < ( i l h o s t > MATRIX SIZE ? MATRIX SIZE : i l h o s t ) ; i ++)
{
b u f i d = pvm recv ( 1 ,200) ;
p v m b u f i n f o ( b u f i d ,& bytes ,& msgtag ,& t i d ) ;
pvm upkint(& r e s c o u n t , 1 , 1 ) ;
pvm upkint(& r [ r e s c o u n t ] [ 0 ] , MATRIX SIZE , 1 ) ;
pvm kill ( t id ) ;
}
f p r i n t f ( txt , Macierz wynikowa : \ n
\n\n ) ;
f o r ( i =0; i <MATRIX SIZE ; i ++)
{
f o r ( j =0; j <MATRIX SIZE ; j ++)
f p r i n t f ( txt , %d\ t , r [ i ] [ j ] ) ;
f p r i n t f ( txt , \n ) ;
}
f c l o s e ( txt ) ;
exit (0) ;
}

99
Program potomny
#i n c l u d e <s t d i o . h>
#i n c l u d e pvm3 . h
#d e f i n e MATRIX SIZE 20
i n t main ( )
{
i n t m a s t e r i d , count , i ;
d o u b l e v e c t a [ MATRIX SIZE ] , v e c t b [ MATRIX SIZE ] , v e c t r [ MATRIX SIZE ] ;
m a s t e r i d = pvm parent ( ) ;
i f ( m a s t e r i d == 0 ) e x i t ( 1 ) ; // zabezpieczenie przed uruchomieniem z
poziomu rodzica
// OBSUGA OBLICZE i WYSYANIA WYNIK W
while (1)
{
pvm recv ( m a s t e r i d , 1 0 0 ) ;
pvm upkdouble(& v e c t a [ 0 ] , MATRIX SIZE , 1 ) ;
pvm upkdouble(& v e c t b [ 0 ] , MATRIX SIZE , 1 ) ;
pvm upkint(&count , 1 , 1 ) ;
f o r ( i = 0 ; i < MATRIX SIZE ; i ++)
vectr [ i ] = vecta [ i ] vectb [ i ] ;
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(&count , 1 , 1 ) ;
pvm pkdouble(& v e c t r [ 0 ] , MATRIX SIZE , 1 ) ;
pvm send ( m a s t e r i d , 2 0 0 ) ;
}
return (0) ;
}

100
2.3 Laborki, Szyfr Cezara
2.3.1 Tre
Szyfr Cezara

2.3.2 Rozwizanie
Podobno dziaa, ocena nieznana.
/// program gwny
main ( )
{
i f ( pvm parent ( ) == PvmNoParent )
rodzic () ;
else
potomek ( ) ;
return 0;
}

/// Potomek
v o i d potomek ( )
{
i n t masterid , dlugosc , pozycja ;
c h a r znak ;
m a s t e r i d = pvm parent ( ) ; /* kto mnie stworzyl */
while (1)
{
pvm recv ( 1 ,100) ;
pvm upkbyte(&znak , 1 , 1 ) ;
pvm upkint(& p o z y c j a , 1 , 1 ) ;
i f ( znak != )
{
i f ( ( ( znak >= A ) && ( znak <= Z ) ) | |
( ( znak >= a ) && ( znak <= z ) ) )
{
i f ( znak == x )
znak = a ;
i f ( znak == y )
znak = b ;
i f ( znak == z )
znak = c ;
i f ( znak == X )
znak = A ;
i f ( znak == Y )
znak = B ;
i f ( znak == Z )
znak = C ;
}
else
znak += 3 ;
}
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkbyte(&znak , 1 , 1 ) ;
pvm pkint(& p o z y c j a , 1 , 1 ) ;
pvm send ( m a s t e r i d , 2 0 0 ) ;
}
}

101
/// Rodzic
void r o d z i c ( )
{
c h a r t e x t = a l a ma kota ;
char text2 ;
int length = s t r l e n ( text ) ;
i n t t i d m a s t e r , i l h o s t , i l a r c h , t i d , i , p r o c e s y = 0 , b u d i f , temp id ,
zm1 , zm2 ;
s t r u c t pvmhostinfo i n f o ;
i f ( ( t i d m a s t e r = pvm mytid ( ) ) < 0 ) e x i t ( 1 ) ;
p v m c o n f i g (& i l h o s t , &i l a r c h , &i n f o ) ;
t i d = ( i n t ) c a l l o c ( i l h o s t , s i z e o f ( i n t ) ) ;
text2 = ( char ) c a l l o c ( length + 1 , 1) ;
t e x t 2 [ l e n g t h ] = \0 ;
f o r ( i = 0 ; i < i l h o s t ; ++i ) {
i f ( i >= l e n g t h ) break ;
pvm spawn ( /home/pvm/pvm3/ s e k c j a 1 5 / b i n /LINUX/ h e l l o , 0 , PvmTaskHost
, i n f o [ i ] . hi name , 1 , &t i d [ i ] ) ;
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkbyte ( ( t e x t + i ) , 1 , 1 ) ;
pvm pkint(& i , 1 , 1 ) ;
pvm send ( t i d [ i ] , 1 0 0 ) ;
++p r o c e s y ;
}
i = ilhost ;
while (1) {
b u d i f = pvm recv ( 1 , 2 0 0 ) ;
c h a r temp ;
int recIndex ;
pvm upkbyte(&temp , 1 , 1 ) ;
pvm upkint(& r e c I n d e x , 1 , 1 ) ;
t e x t 2 [ r e c I n d e x ] = temp ;
i f ( i >= l e n g t h ) break ;
else {
p v m b u f i n f o ( b u d i f , &zm1 , &zm2 , &temp id ) ;
p r i n t f ( Od : %d \n , temp id ) ;
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkbyte ( ( t e x t + i ) , 1 , 1 ) ;
pvm pkint(& i , 1 , 1 ) ;
pvm send ( temp id , 1 0 0 ) ;
++i ;
}
}
f o r ( i = 0 ; i < ( i l h o s t 1) ; ++i ) {
b u d i f = pvm recv ( 1 , 2 0 0 ) ;
c h a r temp ;
int recIndex ;
pvm upkbyte(&temp , 1 , 1 ) ;
pvm upkint(& r e c I n d e x , 1 , 1 ) ;
t e x t 2 [ r e c I n d e x ] = temp ;
p v m b u f i n f o ( b u d i f , &zm1 , &zm2 , &temp id ) ;
p r i n t f ( Od : %d \n , temp id ) ;
p v m k i l l ( temp id ) ;
}
p r i n t f ( Tekst : %s \n , t e x t 2 ) ; pvm exit ( ) ;
}

102
3 Egzamin 2012, T1, Hafed Zghidi
3.1 Tre
Naszym zadaniem jest przeszukiwanie fragmentu obrazu (wzorzec) o rozmiarze n n w obrazie Obraz o
rozmiarze m n(m >> n). Do tego celu suy nam odpowiednia funkcja

int find pattern (x , y , n)

gdzie x, y to wsprzdne w obrazie, a n rozmiar wzorca. Funkcja zwraca 1, jeli wzorzec znajduje si w
obrazie lub 0 jeli go nie ma. Wzorzec moe si powtarza w obrazie.
Napisa w oparciu o rodowisko PVM kod programu rodzica zliczajcego ile razy wzorzec znajduje si w
obrazie. Program powinien zapewni rwnolege rozwizanie tego zadania z zachowaniem dynamicznego
podziau zada. Dodatkowe punkty mona uzyska za zapewnienie lepsze granulacji podziau zada.

3.2 Propozycja rozwizania

#i n c l u d e <s t d i o . h>
#i n c l u d e pvm3 . h
#i n c l u d e <s t r i n g . h>

void parent ( ) ;
void c h i l d ( ) ;
/// program gwny
i n t main ( v o i d ) {
i f ( pvm parent ( ) == PvmNoParent )
parent () ;
else
child () ;
return 0;
}
/// rodzic
void parent ( )
{
// rozmiary obrazu
int n = 32;
int m = 1024;
// aktualna pozycja
int x = 0 , y = 0;

//pvm -owe zmienne


i n t tIdMaster = 0 , tId ;
int ilHost = 0 , ilArch = 0;
s t r u c t pvmhostinfo i n f o ;

// suma zliczen
i n t sum = 0 ;

// dane do przeslania , odpowiednio x y n


i n t dataToSend [ 3 ] ;

i f ( ( t I d M a s t e r = pvm mytid ( ) ) < 0 )


exit (0) ;

// pobranie konfiguracji
p v m c o n f i g (& i l H o s t , &i l A r c h , &i n f o ) ;

103
// stworzenie tablicy z id dzieci
tId = ( i n t ) c a l l o c ( ilHost , s i z e o f ( i n t ) ) ;

// wyslanie poczatkowych danych


f o r ( i n t i = 0 ; i < i l H o s t ; ++i )
{
pvm spawn ( /home/pvm / . . . , 0 , PvmTaskHost , i n f o [ i ] . hi name , 1 , &t I d
[ i ]) ;

// przygotowanie i wyslanie danych


p v m i n i t s e n d ( PvmDataDefault ) ;

dataToSend [ 0 ] = x ;
dataToSend [ 1 ] = y ;
dataToSend [ 2 ] = n ;

pvm pkint ( dataToSend , 3 , 1 ) ;


pvm send ( t I d [ i ] , 1 0 0 ) ;
// przesuniecie w obrazie o pixel w prawo
++x ;

// jesli wyjdzie poza prawa strone , zejscie w dol


i f ( x >= (m n ) ) {
x = 0;
++y ;
}
// sam koniec obrazu - zakoncz
i f ( y >= (m n ) )
break ;
}
// jesli zostalo cos jeszcze do wyslania ...
i f ( y >= (m n ) )
while ( true )
{
int childId = 0;

// odbieramy dowolna paczke wyslana przez dzieci


i n t b i = pvm recv ( 1 , 1 0 0 ) ;
i n t rcvdData = 0 ;

// pobieramy jego id
p v m b u f i n f o ( bi , &d l b u f , &msgtag , &c h i l d I d ) ;

// rozpakowujemy dane , dodajemy do sumu


pvm upkint(&rcvdData , 1 , 1 ) ;

suma += rcvdData ;

// inicjujemy dane
dataToSend [ 0 ] = x ;
dataToSend [ 1 ] = y ;
dataToSend [ 2 ] = n ;

p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint ( dataToSend , 3 , 1 ) ;

104
// wysylamy do dziecka , z ktorego aktualnie odebrano rezultat
pvm send ( c h i l d I d , 1 0 0 ) ;

// tak jak poprzednio , przesuniecie w obrazie


++x ;
i f ( x >= (m n ) ) {
x = 0;
++y ;
}
i f ( y >= (m n ) )
break ;
}

//w tym momencie wyslalismy juz wszystko


// odbieramy wiec ostatnia paczke od kazdego z dzieci
f o r ( i n t i = 0 ; i < i l H o s t ; ++i )
{
i n t tmp ;
pvm rcv ( masterId , 1 0 0 ) ;
pvm upkint(&tmp , 1 , 1 ) ;

suma += tmp ;
pvm kill ( tId [ i ] ) ;
}
}
/// Potomek
void c h i l d ( )
{
// id rodzica
i n t m a s t e r I d = pvm parent ( ) ;

// tablica do ktorej zapiszemy odebrane dane


int points [ 3 ] ;

// odbieramy paczke od rodzica


pvm rcv ( masterId , 1 0 0 ) ;
pvm upkint ( p o i n t s , 3 , 1 ) ;

// funkcja z zadania
int result = find pattern ( points [ 0 ] , points [ 1 ] , points [ 2 ] ) ;

// odsylamy dane
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint ( r e s u l t , 1 , 1 ) ;
pvm send ( masterId , 1 0 0 ) ;
}

105
4 Egzamin 2013, T1, Hafed Zghidi
4.1 Tre
Naszymi danymi wejciowymi s tabela A zawierajca 10000 acuchw znakowych i tabela B zawieraj-
ca 10000 wartoci typu integer bdcych wartociami skrtu acuchw tabeli A. Napisa kod programu
gwnego (rodzic) realizujcego w oparciu o rodowisko PVM rwnolege wykonanie porwnywania zgod-
noci acuchw z tabeli A ze skrtami z tabeli B. Program potomny ma otrzymywa acuch znakowy
z tabeli A oraz odpowiadajc mu warto typu integer z tabeli B. Program gwny ma zliczy ile par
jest poprawnych, a ile nie zgadza si. Program potomny ma zosta uruchomiony na wszystkich wzach
w maszynie PVM. Rozdzia zadania na podzadania dla procesw potomnych ma uwzgldnia aspekt
rwnowaenia obcienia poszczeglnych wzw maszyny PVM (napisa tylko program rodzica).

4.2 Rozwizanie

#i n c l u d e pvm3 . h
#i n c l u d e <s t d i o . h>
c o n s t i n t RECORD NUMBER = 10000
v o i d f i l l t a b l e s ( c h a r i n p u t [RECORD NUMBER] , i n t output [RECORD NUMBER] ) ;

i n t main pvm ( )
{
// dane wej ciowe
c h a r i n p u t [RECORD NUMBER ] ;
i n t output [RECORD NUMBER ] ;
// zakadamy , e ta funkcja wypenia tablice jak naley
f i l l t a b l e s ( input , output ) ;
// liczniki wysta pie
unsigned i n t true count = 0 ;
// pobranie informacji
int ilhost , ilarch ;
s t r u c t pvmhostinfo i n f o ;
p v m c o n f i g (& i l h o s t , &i l a r c h , &i n f o ) ;
p r i n t f ( L i c z b a hostow : %d\n , i l h o s t ) ;

i n t id , t i d ;
id = 0;
int i ;
// dla kadego hosta
f o r ( i = 0 ; i < i l h o s t ; i ++, i d++)
{
pvm spawn ( / egzamin / d z i e c k o , 0 , PvmTaskHost , i n f o [ i ] . hi name , 1 , &
tid ) ;
i f ( t i d < 0)
{
i l h o s t ;
continue ;
}
p v m i n i t s e n d ( PvmDataDefault ) ;
// wysyamy:
pvm pkint(& id , 1 , 1 ) ; // id wiersza
pvm pkstr ( i n p u t [ i d ] ) ; // acuch
pvm pkint(& output [ i d ] , 1 , 1 ) ; // suma kontrolna
pvm send ( t i d , 1 0 0 ) ;
}

106
{ // ...
i n t b u f i d , c h i l d t i d , c h i l d i d , tmp , r e s u l t ;
w h i l e ( i d < RECORD NUMBER)
{
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
// pobranie danych
pvm upkint(& c h i l d i d , 1 , 1 ) ; // id wiersza
pvm upkint(& r e s u l t , 1 , 1 ) ; // wynik
// dziecko zwraca 0, jeli suma nie bya poprawna
// lub 1, jeli bya poprawna
true count = true count + result ;
// wysanie nowych danych
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(& id , 1 , 1 ) ; // id kolejnego wiersza
pvm pkstr ( i n p u t [ i d ] ) ; // acuch
pvm pkint(& output [ i d ] , 1 , 1 ) ; // suma kontrolna
pvm send ( c h i l d t i d , 1 0 0 ) ;
i d ++;
}
// odbieranie ostatnich wynik w od potomk w
f o r ( i = 0 ; i < i l h o s t ; i ++)
{
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
pvm upkint(& c h i l d i d , 1 , 1 ) ; // pobranie id wiersza
pvm upkint(& r e s u l t , 1 , 1 ) ; // wynik
true count = true count + result ;
}
// wypisanie wyniku
p r i n t f ( L i c z b a poprawnych sum k o n t r o l n y c h = %d\n , t r u e c o u n t ) ;
p r i n t f ( L i c z b a niepoprawnych sum k o n t r o l n y c h = %d , RECORD NUMBER
true count ) ;
pvm exit ( ) ;

return 0;
}

107
4.3 Propozycja rozwizania z forum - dlaczego jest le i moesz ujeba bez-
mylnie przepisujc

#i n c l u d e <s t d i o . h>
#i n c l u d e pvm3 . h
#d e f i n e SIZE 10000
#d e f i n e STR SIZE 256
#d e f i n e PATH pvm child
i n t main ( )
{
i n t t i d m a s t e r , t i d , i l h o s t , i l a r c h , b u f i d , a , b , temp , wynik ;
s t r u c t pvmhostinfo i n f o ;
// idea jest taka , by porwna rozmiar stringi , zapisany w drugim
wymiarze , z warto cia w wartosci . Tre zadania mwi o dwch
tabelach w jednym wymierze , wie c rednie to.
// Por wnywanie string w na char* z liczbami boli bez gotowych funkcji ,
co? :P
// A nas to nawet nie interesuje , bo za to odpowiada potomek , zatem
mamy przyk ad popieprzenia z popla taniem XD
c h a r s t r i n g i [ SIZE ] [ STR SIZE ] ;
i n t w a r t o s c i [ SIZE ] ;
c o n s t i n t ROZMIAR = 1 0 ;
wynik = 0 ;
t i d m a s t e r = pvm mytid ( ) ; // zupenie zbe dne
p v m c o n f i g (& i l h o s t , &i l a r c h , &i n f o ) ;
// tid nie musi by tablic a , bo nigdy nie korzystamy z innego , ni
aktualnie wykorzystywany
t i d = ( i n t ) malloc ( i l h o s t , s i z e o f ( i n t ) ) ;
f o r ( a = 0 ; a < i l h o s t ; a++)
{
pvm spawn (PATH, 0 , PvmTaskHost , i n f o [ a ] . hi name , 1 , &t i d [ a ] ) ;
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(&ROZMIAR, 1 , 1 ) ;
temp = STR SIZE ; // chujowe konsekwencje trzymania staej
przez define - brak adresu , hehe
pvm pkint(&temp , 1 , 1 ) ;
f o r ( b = 0 ; b < ROZMIAR; b++)
{
// zabawa z dwoma wymiarami , kiedy wystarczy jeden
// dziwna idea , raczej nieintuicyjna
pvm pkint(& w a r t o s c i [ a ROZMIAR + b ] , 1 , 1 ) ;
pvm pkstr ( s t r i n g i [ a ROZMIAR + b ] ) ;
}
pvm send ( t i d [ a ] , 1 0 0 ) ; // tid jest wykorzystywany tylko w tej pe
tli , tabela nie sensu
}
a = ilhost ; // nikt nie zauwa y, e ma te warto po wyjciu z pe
tli?

108
{ // ...
w h i l e ( a < SIZE/ROZMIAR ) {
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
pvm upkint(&temp , 1 , 1 ) ;
wynik += temp ; // w ANSI C nie ma tego operatora
p v m b u f i n f o ( b u f i d , &temp , &b , &tmp id ) ;
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(&ROZMIAR, 1 , 1 ) ;
temp = STR SIZE ; // ZNOWU XD
pvm pkint(&temp , 1 , 1 ) ;
f o r ( b = 0 ; b < ROZMIAR; b++)
{
pvm pkint(& w a r t o s c i [ a ROZMIAR + b ] , 1 , 1 ) ;
pvm pkstr ( s t r i n g i [ a ROZMIAR + b ] ) ;
}
pvm send ( tmp id , 1 0 0 ) ;
a++;
}
f o r ( a = 0 ; a < i l h o s t ; a++)
{
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
pvm upkint(&temp , 1 , 1 ) ;
wynik += temp ; // co c
p v m b u f i n f o ( b u f i d , &temp , &b , &tmp id ) ;
p v m k i l l ( tmp id ) ;
}
p r i n t f ( wynik %d ,WYNIK) ;
return 0;
}

109
5 Egzamin 2014, T1, Hafed Zghidi
5.1 Tre
Korzystajc z pakietu PVM zorganizowa rwnolege przetwarzania polegajce na wyliczeniu silni ka-
dego elementu tablicy T skadajcej si z 1000 elementw typu INT. Wynik ma zosta zapisany w tej
samej tablicy T (silnia(T[i]) T[i] dla i = 0 ... 999). Napisa proces gwny realizujcy podzia zadania
na podzadania oraz koordynujcy rwnolege wykonanie w procesach potomnych (procesu potomnego
NIE naley pisa). Podzia podzada ma zosta zrealizowany zgodnie z zasad dynamicznego podziau
(rwnowaenia) zada.

5.2 Rozwizanie

#i n c l u d e pvm3 . h
#d e f i n e ELEMENT NUMBER 1000
i n t main ( )
{
// nasza tablica
i n t T [ELEMENT NUMBER ] ;
int i ;
f o r ( i = 0 ; i < ELEMENT NUMBER; i ++)
T[ i ] = i ;

int ilhost , ilarch ; // parametry z PVMa


s t r u c t pvmhostinfo i n f o ;
p v m c o n f i g (& i l h o s t , &i l a r c h , &i n f o ) ;

int id komorki = 0;
int tid ;
// Dla kadego hosta - inicjujemy go
f o r ( i = 0 ; i < i l h o s t ; i ++)
{
pvm spawn ( / potomek , 0 , PvmTaskHost , i n f o [ i ] . hi name , 1 , &t i d ) ;
// powoanie potomka
i f ( t i d < 0)
{
i l h o s t ;
continue ;
}
p v m i n i t s e n d ( PvmDataDefault ) ;
// wysyamy
pvm pkint(&T [ i d k o m o r k i ] , 1 , 1 ) ;
pvm send ( t i d , 1 0 0 ) ;
i d k o m o r k i ++;
}

110
{
// Wykonywanie programu a do przedostatniej pe tli
i n t b u f i d , c h i l d t i d , c h i l d i d k o m o r k i , c h i l d s i l n i a , tmp ;
w h i l e ( i d k o m o r k i < ELEMENT NUMBER)
{
// odebranie info o zako czeniu pracy
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
// pobranie obliczonej silni
pvm upkint(& c h i l d i d k o m o r k i , 1 , 1 ) ;
pvm upkint(& c h i l d s i l n i a , 1 , 1 ) ;
// napisanie warto ci w tablicy
T[ c h i l d i d k o m o r k i ] = c h i l d s i l n i a ;
// wysanie nowych danych
p v m i n i t s e n d ( PvmDataDefault ) ;
pvm pkint(&T [ i d k o m o r k i ] , 1 , 1 ) ;
pvm send ( c h i l d t i d , 1 0 0 ) ;
i d k o m o r k i ++;
}
// Odebranie ostatnich danych
f o r ( i = 0 ; i < i l h o s t ; i ++)
{
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
// pobranie obliczonej silni
pvm upkint(& c h i l d i d k o m o r k i , 1 , 1 ) ;
pvm upkint(& c h i l d s i l n i a , 1 , 1 ) ;
// napisanie warto ci w tablicy
T[ c h i l d i d k o m o r k i ] = c h i l d s i l n i a ;
}
pvm exit ( ) ;
return 0;
}

111
5.3 2015, 0 termin, Hafed Zighdi
5.3.1 Tre
Naszym zadaniem jest przeszukanie fragmentu obrazu (wzorzec) o rozmiarze nxn w obrazie Obraz o
rozmiarze mxm(m >> n). Do tego celu suy funkcja int find pattern(x, y, n), gdzie x, y to wsprzdne
w obrazie, a n rozmiar wzorca. Funkcja zwraca 1 jeli wzorzec znajduje si w obrazie lub 0 jeli go nie
ma. Wzorzec mone powtarza si w obrazie.
Napisa w oparciu o rodowisko PVM kod programu rodzica zliczajcego ile razy wzorzec znajduje si
w obrazie. Program powinien zapewni rwnolege rozwizywanie zadania z zachowaniem dynamicznego
podziau zada. Dodatkowe punkty mona uzyska za zapewnienie lepszej granulacji podziau zada.

5.3.2 Rozwizanie

#i n c l u d e pvm3 . h
e x t e r n i n t m; // wymiar obraz
extern int n ; // wymiar wzorca

i n t main ( )
{
int liczbaWystapien = 0;
// tablica pikseli , zakladamy ze tak reprezentowany jest obraz
i n t o b r a z [m] [m] ;
int ilhost , ilarch ; // parametry z PVMa
s t r u c t pvmhostinfo i n f o ;
p v m c o n f i g (& i l h o s t , &i l a r c h , &i n f o ) ;
p r i n t f ( L i c z b a hostow : %d\n , i l h o s t ) ;

int id wiersza = 0;
int tid ;
// Dla kadego hosta - inicjujemy go
f o r ( i = 0 ; i < i l h o s t ; i++ )
{
// powoanie potomka
pvm spawn ( / potomek , 0 , PvmTaskHost , i n f o [ i ] . hi name , 1 , &t i d ) ;
// jeli nie udao sie powoa potomka , zmniejszamy liczb e hostw i
kontynuujemy
i f ( tid < 0 )
{
i l h o s t ;
continue ;
}
p v m i n i t s e n d ( PvmDataDefault ) ;
// wysyamy:
// elementy obrazu
f o r ( i n t i = 0 ; i < n ; i ++)
{
// pakowanie caego wiersza
pvm pkint(& o b r a z [ i d w i e r s z a + i ] [ 0 ] , m, 1 ) ;
}
pvm send ( t i d , 1 0 0 ) ; // wysanie wiersza
i d w i e r s z a ++;
}

112
{ // ...
// Wykonywanie programu a do przedostatniej pe tli
i n t b u f i d , c h i l d t i d , c h i l d l i c z b a w y s t a p i e n , tmp ;
w h i l e ( i d w i e r s z a < (m n ) )
{
// odebranie info o zako czeniu pracy
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
// pobranie liczby wystapien
pvm upkint(& c h i l d l i c z b a w y s t a p i e n , 1 , 1 ) ;
// zwiekszenie wystapien wzorca
l i c z b a W y s t a p i e n += c h i l d l i c z b a w y s t a p i e n ;
// wysanie nowych danych
p v m i n i t s e n d ( PvmDataDefault ) ;
// nowa czesc obrazu
f o r ( i n t i = 0 ; i < n ; i ++)
{
pvm pkint(& o b r a z [ i d w i e r s z a + i ] [ 0 ] , m, 1 ) ;
}
pvm send ( c h i l d t i d , 1 0 0 ) ;
i d w i e r s z a ++;
}
// Odebranie ostatnich danych
f o r ( i = 0 ; i < i d w i e r s z a i l h o s t + 1 ; i++ )
{
b u f i d = pvm recv ( 1 , 2 0 0 ) ;
p v m b u f i n f o ( b u f i d , &tmp , &tmp , &c h i l d t i d ) ;
// pobranie liczby wystapien
pvm upkint(& c h i l d l i c z b a w y s t a p i e n , 1 , 1 ) ;
// zwiekszenie wystapien wzorca
l i c z b a W y s t a p i e n += c h i l d l i c z b a w y s t a p i e n ;
}
p r i n t f ( L i c z b a w y s t a p i e n wzorca : %d , l i c z b a W y s t a p i e n ) ;
pvm exit ( ) ;
return 0;
};

113
6 Java Spaces
6.1 Wstp z laborek
6.1.1 Tre
Napisa program zawierajcy jednego Nadzorc oraz wielu Pracownikw. Nadzorca przekazuje do Java-
Space 2 rwne tablice zawierajce obiekty typu Integer, a nastpnie otrzymuje wynikow tablic zawie-
rajc sumy odpowiadajcych sobie komrek. Operacj dodawania maj realizowa Pracownicy.

6.1.2 Rozwizanie
Zadanie obliczania sumy tabel dzielimy na dwie czci: Task oraz Result. Taski s generowane przez Nad-
zorc i przekazywane Pracownikom, ci za wykonuj zadanie i tworz obiekty klasy Result, a nastpnie
przekazuj je Nadzorcy. Nadzorca je odbiera, kompletuje i ew. co z nimi robi.

Nadzorca przydziela tyle zada, ile potrzebuje, z kolei Pracownicy dziaaj w nieskoczono. Aby zako-
czy ich prac, Nadzorca musi wysa zadania z tzw. zatrut piguk (ang. Poisoned Pill ), czyli obiekt
zadania z nietypowym parametrem, ktry sygnalizuje zakoczenie pracy. Moe to by np. Boolean o
wartoci false, Integer o wartoci -1, itp. Skadowymi klas implementujcych interfejs Entry nie mog
by typu prostego (int, double itp.), musz by opakowane (Integer, Double itp.). Najbezpieczniej dawa
je wszdzie.

/**
* @author Son Mati
* @waifu Itsuka Kotori
*/
p u b l i c c l a s s Task implements Entry {
p u b l i c I n t e g e r c e l l I D ; // ID komrki tabeli
p u b l i c I n t e g e r valueA ; // warto z tabeli A
p u b l i c I n t e g e r valueB ; // warto z tabeli B
p u b l i c Boolean i s P i l l ; // czy zadanie jest zatrut a
piguka

// Domylny konstruktor , musi sie znajdowa


p u b l i c Task ( ) {
t h i s . c e l l I D = t h i s . valueA = t h i s . valueB = n u l l ;
this . isPill = false ;
}

p u b l i c Task ( I n t e g e r entryID , I n t e g e r valueA , I n t e g e r valueB , Boolean


isPill ) {
t h i s . c e l l I D = entryID ;
t h i s . valueA = valueA ;
t h i s . valueB = valueB ;
this . isPill = isPill ;
}
}

114
/**
* @author Son Mati
* @waifu Itsuka Kotori
*/
p u b l i c c l a s s R e s u l t implements Entry {
public Integer cellID , value ;
public Result () {
t h i s . cellID = t h i s . value = null ;
}
p u b l i c R e s u l t ( f i n a l I n t e g e r EntryID , f i n a l I n t e g e r Value ) {
t h i s . c e l l I D = EntryID ;
t h i s . v a l u e = Value ;
}
}

public class Client {


protected Integer defaultLease = 100000;
p r o t e c t e d JavaSpace s p a c e ;
p r o t e c t e d Lookup lookup ;
public Client () {
lookup = new Lookup ( JavaSpace . c l a s s ) ;
}
}

/**
* @author Son Mati
* @waifu Itsuka Kotori
*/
p u b l i c c l a s s Worker e x t e n d s C l i e n t {
p u b l i c Worker ( ) {
}
public void startWorking ( ) {
while ( true ) {
try {
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
Task t a s k = new Task ( ) ;
t a s k = ( Task ) s p a c e . t a k e ( task , n u l l , d e f a u l t L e a s e ) ;
i f ( t a s k . i s P i l l == t r u e )
{
s p a c e . w r i t e ( task , n u l l , d e f a u l t L e a s e ) ;
System . out . p r i n t l n ( Koniec pracy workera . ) ;
return ;
}
I n t e g e r r e s = t a s k . valueA + t a s k . valueB ;
R e s u l t r e s u l t = new R e s u l t ( t a s k . c e l l I D , r e s ) ;
space . write ( re sul t , null , defaultLease ) ;
}
c a t c h ( E x c e p t i o n ex ) {}
}
}
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
Worker w = new Worker ( ) ; // utworzenie obiektu
w. startWorking ( ) ; // realizacja zadan
}
}

115
/**
* @author Son Mati
* @waifu Itsuka Kotori
*/
public c l a s s Supervisor extends Client {
s t a t i c f i n a l I n t e g e r INT NUMBER = 1 2 5 ;
p u b l i c I n t e g e r [ ] TableA = new I n t e g e r [INT NUMBER ] ;
p u b l i c I n t e g e r [ ] TableB = new I n t e g e r [INT NUMBER ] ;
p u b l i c I n t e g e r [ ] TableC = new I n t e g e r [INT NUMBER ] ;
// konstruktor
public Supervisor () {
}
// wygenerowanie zawarto ci tablic
public void generateData ( ) {
Random rand = new Random ( ) ;
f o r ( i n t i = 0 ; i < INT NUMBER; ++i ) {
TableA [ i ] = rand . n e x t I n t (INT NUMBER) ;
TableB [ i ] = rand . n e x t I n t (INT NUMBER) ;
TableC [ i ] = 0 ;
}
}
// rozpoczecie pracy
public void startProducing ( ) {
try {
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
// utworzenie zadania
f o r ( I n t e g e r i = 0 ; i < INT NUMBER; ++i ) {
Task t a s k = new Task ( i , t h i s . TableA [ i ] , t h i s . TableB [ i ] ,
false ) ;
s p a c e . w r i t e ( task , n u l l , d e f a u l t L e a s e ) ;
}
// pobranie wyniku zadania
System . out . p r i n t l n ( T a b l i c a C : ) ;
f o r ( I n t e g e r i = 0 ; i < INT NUMBER; ++i ) {
R e s u l t r e s u l t = new R e s u l t ( ) ;
r e s u l t = ( Result ) space . take ( r e s u l t , null , defaultLease ) ;
TableC [ r e s u l t . c e l l I D ] = r e s u l t . v a l u e ;
}
// utworzenie zatrutej pigulki na sam koniec
Task p o i s o n P i l l = new Task ( n u l l , n u l l , n u l l , t r u e ) ;
space . write ( poisonPill , null , defaultLease ) ;
}
c a t c h ( E x c e p t i o n ex ) {
}
}

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
// utworzenie obiektu
S u p e r v i s o r sv = new S u p e r v i s o r ( ) ;
// utworzenie zadan
sv . g e n e r a t e D a t a ( ) ;
sv . s t a r t P r o d u c i n g ( ) ;
}
}

116
6.2 Zadanie 1
6.2.1 Tre
Napisa program odbierajcy z przestrzeni JavaSpace kolejno 100 obiektw klasy Zadanie posiadajce
w atrybucie typ (typu cakowitego) warto 15 i dla kadego obiektu Zadanie wygenerowa i umieci w
przestrzeni JavaSpace obiekt klasy Silnia posiadajcy jako atrybut... (dalej nie pamitam dobrze) warto
bdc silni wartoci uzyskanej z liczba(typu cakowitego) z klasy Zadanie.

117
6.3 2010, I termin, Adam Duszeko
6.3.1 Tre
Napisa kod programu gwnego zarzdzajcego rwnolegym wykonywaniem zadania w maszynie Ja-
vaSpace polegajcym na wyznaczeniu zbioru klatek video zawierajcych ruch. Wykrywanie ruchu ma
odbywa si w procesorach wykonawczych na zasadzie porwnania rnicowego, czyli wymaga poddania
analizie dwch kolejnych klatek. W tym celu program gwny posugujc si byte[] GetImage() (przyj,
e jest zdefiniowana i zaimplementowana) ma pobiera kolejne klatki obrazu i umieszcza je w przestrzeni
JavaSpace, wraz z jej kolejnym numerem (numerowania ma odbywa si na poziomie programu gwne-
go). Program gwny koczy wysyania zada gdy funkcja GetImage zwrci warto NULL. Jako wynik
swojego dziaania programy wykonawcze zwracaj obiekt odpowiedzi zawierajcy numer pierwszego ob-
razu z analizowanej pary oraz warto logiczn czy para bya identyczna czy te zawieraa wykryty ruch.
Na zakoczenie dziaania program gwny po zebraniu wszystkich odpowiedzi powinien wypisa numery
obrazw dla ktrych wykryto ruch oraz zakoczy procesy wykonawcze rozsyajc zatrut piguk.
Zaproponowa struktur obiektu zadania i odpowiedzi.

6.3.2 Propozycja rozwizania 1


Nie jest do koca prawidowa, poniewa kod nie jest spjny i nie wiadomo czy analizuje pary klatek.
p u b l i c c l a s s Image implements Entry {
// naley pamie ta o tym aby kade pole byo publiczne !
p u b l i c byte [ ] frame ;
public Integer id ;
// wymagane konstruktory
p u b l i c Image ( ) {}
p u b l i c Image ( I n t e g e r id , byte [ ] frame ) {
t h i s . i d = new I n t e g e r ( i d ) ;
t h i s . frame = frame ;
}
}

// Dane przesy ane jako odpowied


p u b l i c c l a s s R e s u l t implements Entry {
public Integer id ;
p u b l i c Boolean move ;
p u b l i c R e s u l t ( ) {}
p u b l i c R e s u l t ( I n t e g e r id , Boolean move ) {
t h i s . i d = new I n t e g e r ( i d ) ;
t h i s . move = new Boolean ( move ) ;
}
}

118
p u b l i c c l a s s Program {
public int defaultLease = 100000;
public int id = 1;

public void producer ( ) {


byte [ ] img1 , img2 ;
img1 = getImage ( ) ;
try {
Lookup lookup = new Lookup ( JavaSpace . c l a s s ) ;
JavaSpace s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
img2 = getImage ( ) ;
while ( true ) {
img = getImage ( ) ; // dostarczone w zadaniu
i f ( img == n u l l | | img2 == n u l l ) break ; // null = koniec
Package data = new Data ( id , img1 , i d + 1 , img2 ) ;
s p a c e . w r i t e ( data , n u l l , d e f a u l t L e a s e ) ; // paczka do space
img1 = img2 ;
i d ++;
}
// bo breaku przea czamy sie w tryb odbierania
f o r ( i n t i = 1 ; i < i d ; i ++) {
R e s u l t r e s u l t = ( R e s u l t ) s p a c e . t a k e I f E x s i s t s ( new R e s u l t ( ) , n u l l
, defaultLease ) ;
i f ( r e s u l t . move )
System . out . p r i n t l n ( Ruch obrazk w : + r e s u l t . i d 1 + +
r e s u l t . id2 ) ;
}
s p a c e . w r i t e ( new Image ( ) , n u l l , d e f a u l t L e a s e ) ;
} c a t c h ( E x c e p t i o n e ) {}
}

p u b l i c v o i d consumer ( ) {
try {
Lookup lookup = new Lookup ( JavaSpace . c l a s s ) ;
JavaSpace s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
int i = 0;
while ( true ) {
Image img1 = new Image ( ) ; img1 . i d = i ++;
Image img2 = new Image ( ) ; img2 . i d = i ;
img1 = ( Image ) s p a c e . t a k e ( img1 , n u l l , d e f a u l t L e s e ) ;
img2 = ( Image ) s p a c e . r e a d ( img2 , n u l l , d e f a u l t L e s e ) ;
// czy wysano " zatrut a piguke "
i f ( img2 . frame == n u l l && img2 . i d == n u l l ) break ;
// czy wykonano ruch na obrazkach
i f ( img1 . frame . e q u a l s ( img2 . frame ) ) {
// tego chyba nie trzeba nawet wysya w tym zadaniu
r e s u l t = new R e s u l t ( img2 . id , f a l s e ) ;
} else {
r e s u l t = new R e s u l t ( img2 . id , t r u e ) ;
}
// wysyanie wyniku do space
space . write ( re sul t , null , defaultLease ) ;
}
} c a t c h ( E x c e p t i o n e ) {}
}
}

119
6.4 2011, I termin, Adam Duszeko
6.4.1 Tre
Napisa program umieszczajcy w przestrzeni JavaSpace 10 obiektw zada zawierajcych dwa pola
typu cakowitego oraz dwa pola typu acuch znakowy (zawarto nieistotna, rna od NULL), po-
da deklaracj klasy zada. Nastpnie odebra z przestrzeni kolejno 10 obiektw klasy Odpowied o
atrybutach id typu Integer oraz wynik typu Integer posiadajce w atrybucie id warto 15, a nastpnie
wszystkie z atrybutem id = 110. Przyj, e klasa Odpowied jest ju zdefiniowana zgodnie z powyszym
opisem.

6.5 2012, I termin, Adam Duszeko


6.5.1 Tre
Napisa program umieszczajcy w przestrzeni JavaSpace 1000 obiektw zada zawierajcych trzy pola
typu cakowitego oraz dwa pola typu acuch znakowy (zawarto nieistotna, rna od NULL), poda
deklaracj klasy zada. Nastpnie odebra z przestrzeni kolejno 1000 obiektw klasy Odpowied o atry-
butach id typu Integer oraz wynik typu Integer posiadajce w atrybucie id warto 35, a nastpnie
wszystkie z atrybutem id = 10. Przyj, e klasa Odpowied jest ju zdefiniowana zgodnie z powyszym
opisem.

120
6.6 2013, I termin
6.6.1 Tre
Napisa program umieszczajcy w przestrzeni JavaSpace 200 obiektw zada zawierajcych dwa pola
typu cakowitego oraz dwa pola typu acuch znakowy (zawarto nieistotna, rna od NULL), poda
deklaracj klasy zada. Nastpnie odebra z przestrzeni kolejno 100 obiektw klasy Odpowied o atry-
butach id typu Integer oraz wynik typu Integer posiadajce w atrybucie id warto 35, a nastpnie
wszystkie z atrybutem id = 10. Przyj, e klasa Odpowied jest ju zdefiniowana zgodnie z powyszym
opisem.

6.6.2 Rozwizanie
Klasa Zadanie
// deklaracja klasy , musza by widoczne :
// implementacja interfejsu Entry
p u b l i c c l a s s Zadanie implements Entry {
// publiczne skadowe , opakowuj a ce typy zmiennych
public Integer liczba ;
public String napis1 ;
public String napis2 ;
p u b l i c Boolean p o i s o n P i l l ;
// konstruktor domylny , obowi a zkowy
p u b l i c Zadanie ( ) {
Random rand = new Random ( ) ;
t h i s . l i c z b a = rand . n e x t I n t ( ) ;
t h i s . n a p i s 1 = I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( ) ) ;
t h i s . n a p i s 2 = I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( ) ) ;
this . poisonPill = false ;
}
p u b l i c Zadanie ( I n t e g e r l i c z b a , S t r i n g n a p i s 1 , S t r i n g n a p i s 2 , Boolean
poisonPill ) {
this . liczba = liczba ;
t h i s . napis1 = napis1 ;
t h i s . napis2 = napis2 ;
this . poisonPill = poisonPill ;
}
}

Nadrzdna klasa Klienta


/**
* @author Son Mati & Doxus
*/
public class Client {
protected Integer defaultLease = 100000;
p r o t e c t e d JavaSpace s p a c e ;
p r o t e c t e d Lookup lookup ;
public Client () {
lookup = new Lookup ( JavaSpace . c l a s s ) ;
}
}

121
Klasa Nadzorcy
/**
* @author Son Mati & Doxus
*/
p u b l i c c l a s s Boss e x t e n d s C l i e n t {
// domylne warto ci dla zadania
s t a t i c f i n a l i n t DEFAULT TASK NUMBER = 2 0 0 ;
s t a t i c f i n a l i n t DEFAULT MAX MISSES = 1 0 0 ;

I n t e g e r taskNumber ;
I n t e g e r maxMisses ;

p u b l i c I n t e g e r getTaskNumber ( ) {
r e t u r n taskNumber ;
}
p u b l i c I n t e g e r getMaxMisses ( ) {
r e t u r n maxMisses ;
}
// obowi a zkowy domylny konstruktor
p u b l i c Boss ( ) {
taskNumber = DEFAULT TASK NUMBER;
maxMisses = DEFAULT MAX MISSES ;
}
p u b l i c Boss ( I n t e g e r taskNumber , I n t e g e r maxMisses ) {
t h i s . taskNumber = taskNumber ;
t h i s . maxMisses = maxMisses ;
}
/**
* Wygenerowanie zadania z losowymi warto ciami
* @param id identyfikator
* @param poisonPill piguka , tak czy nie
*/
p u b l i c Zadanie g e n e r a t e T a s k ( i n t id , b o o l e a n p o i s o n P i l l ) {
Random rand = new Random ( ) ;
r e t u r n new Zadanie ( id , I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( 1 0 0 0 ) ) ,
I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( 1 0 0 0 ) ) , p o i s o n P i l l ) ;
}
/**
* Utworzenie zadani w
* @param count ilo zadani w
*/
p u b l i c v o i d c r e a t e T a s k s I n J a v a S p a c e ( i n t count ) {
try {
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
f o r ( i n t i = 0 ; i < count ; ++i ) {
Zadanie zad = t h i s . g e n e r a t e T a s k ( i , f a l s e ) ;
s p a c e . w r i t e ( zad , n u l l , d e f a u l t L e a s e ) ;
System . out . p r i n t l n ( Wygenerowa em zad + i + o s t r i n g a c h
+ zad . n a p i s 1 + i + zad . n a p i s 2 ) ;
}
}
c a t c h ( RemoteException | T r a n s a c t i o n E x c e p t i o n ex ) {
System . out . p r i n t l n ( Dupa XD ) ;
}
}

122
p u b l i c c l a s s Boss e x t e n d s C l i e n t {
/**
* Uzyskanie odpowiedzi
* @param id odpowiedzi , ktora nas interesuje
* @param costam interesuj a cy nas wynik
* @param count liczba odpowiedzi do odbioru
*/
p u b l i c I n t e g e r r e c e i v e D a t a ( I n t e g e r id , I n t e g e r costam , I n t e g e r count ) {
I n t e g e r found = 0 ;
try {
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
Odpowiedz wzor = new Odpowiedz ( id , costam ) ;
f o r ( i n t i = 0 ; i < count ; i ++) {
// odczyt blokuj a cy , zatrzymuje przep yw dopki odp sie nie
pojawi
Odpowiedz wynik = ( Odpowiedz ) s p a c e . t a k e I f E x i s t s ( wzor , n u l l
, defaultLease ) ;
i f ( wynik != n u l l ) {
System . out . p r i n t l n ( Odpowiedz : i d = + wynik . g e t I d ( ) +
, wynik = + wynik . getWynik ( ) ) ;
found++;
}
}
} c a t c h ( UnusableEntryException | T r a n s a c t i o n E x c e p t i o n |
I n t e r r u p t e d E x c e p t i o n | RemoteException ex ) {
}
r e t u r n found ;
}
/**
* ZATRUJ DZIECIACZKI XD
*/
public void poisonKids ( ) {
// utworzenie zatrutej pigulki
Zadanie p o i s o n P i l l = new Zadanie ( n u l l , n u l l , n u l l , t r u e ) ;
try {
space . write ( poisonPill , null , defaultLease ) ;
} c a t c h ( T r a n s a c t i o n E x c e p t i o n | RemoteException ex ) {
}
}

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
Integer misses = 0;
Boss b o s s = new Boss ( ) ;
b o s s . c r e a t e T a s k s I n J a v a S p a c e ( b o s s . getTaskNumber ( ) ) ;
boss . receiveData (35 , null , 100) ;
// boss odbiera pozosta e odpowiedzi , o id 10, dopki nie trafi na
pewna liczb e chybie
w h i l e ( m i s s e s < b o s s . getMaxMisses ( ) ) {
i f ( b o s s . r e c e i v e D a t a ( 1 0 , n u l l , 1 ) == 0 )
m i s s e s ++;
}
boss . poisonKids () ;
}
}

123
Klasa Pracownika
/**
* @author Son Mati & Doxus
*/
public c l a s s Sidekick extends Client {
// obowi a zkowy domylny konstruktor
public Sidekick () {
}
// praca
public void zacznijMurzynic ( ) {
while ( true ) {
try {
Random rand = new Random ( ) ;
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
Zadanie zad = new Zadanie ( n u l l , n u l l , n u l l , n u l l ) ;
zad = ( Zadanie ) s p a c e . t a k e I f E x i s t s ( zad , n u l l , d e f a u l t L e a s e )
;
i f ( zad != n u l l ) {
i f ( zad . p o i s o n P i l l == t r u e ) {
s p a c e . w r i t e ( zad , n u l l , d e f a u l t L e a s e ) ;
return ;
}
System . out . p r i n t l n ( Odebra em z a d a n i e o i d + zad .
liczba
+ i n a p i s a c h + zad . n a p i s 1 + i + zad . n a p i s 2 ) ;
}
Odpowiedz odp = new Odpowiedz ( rand . n e x t I n t ( 5 1 ) , rand .
nextInt (1000) ) ;
s p a c e . w r i t e ( odp , n u l l , d e f a u l t L e a s e ) ;
} c a t c h ( T r a n s a c t i o n E x c e p t i o n | RemoteException |
UnusableEntryException | I n t e r r u p t e d E x c e p t i o n ex ) {
Logger . g e t L o g g e r ( S i d e k i c k . c l a s s . getName ( ) ) . l o g ( L e v e l . SEVERE
, n u l l , ex ) ;
}
}
}
// obowi a zkowy Run
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S i d e k i c k murzyn = new S i d e k i c k ( ) ;
murzyn . z a c z n i j M u r z y n i c ( ) ;
}
}

124
6.7 2014, I termin, Adam Duszeko
6.7.1 Tre
Napisa kod programu gwnego wykonawczego do przetwarzania z wykorzystaniem maszyny JavaSpace
przetwarzajcego obiekty zada zawierajce dwie wartoci cakowite, oraz numer obiektu i flag logiczn
pocztkowo zawierajc warto FALSE. W momencie pobrania obiektu zadania program wykonawczy
ma podmieni w przestrzeni JavaSpace pobrany obiekt na ten sam, ale z flag ustawion na warto
TRUE. Przetwarzanie obiektu realizowane jest w funkcji int check(int, int) do ktrej naley przekaza
wartoci z obiektu zadania. Po skoczeniu przetwarzania zadania, przed zwrceniem wyniku, naley
usun z przestrzeni JavaSpace obiekt przetwarzanego zadania. Wynik funkcji check naley umieci w
obiekcie wynikowym ktrego struktur prosz zaproponowa. Obsuy koniec dziaania programu przez
skonsumowanie zatrutej piguki.

6.7.2 Propozycja rozwizania 1


Klasa Odpowiedzi (wynik Zadania):
/**
* @author Son Mati
* @waifu Itsuka Kotori
*/
p u b l i c c l a s s Odpowiedz implements Entry {
public Integer id ;
p u b l i c I n t e g e r wynik ;

p u b l i c Odpowiedz ( ) {
}

p u b l i c Odpowiedz ( I n t e g e r id , I n t e g e r wynik ) {
this . id = id ;
t h i s . wynik = wynik ;
}
}

125
Klasa Wykonawcy:
/**
* @author Son Mati
* @waifu Itsuka Kotori
*/
public class Sidekick {
protected Integer defaultLease = 100000;
p r o t e c t e d JavaSpace s p a c e ;
p r o t e c t e d Lookup lookup ;
// domylny konstruktor obowi a zakowy
public Sidekick () {
lookup = new Lookup ( JavaSpace . c l a s s ) ;
}
public void zacznijMurzynic ( ) {
while ( true ) {
try {
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
Zadanie zad = new Zadanie ( n u l l , n u l l , n u l l , f a l s e , n u l l ) ;
zad = ( Zadanie ) s p a c e . t a k e ( zad , n u l l , d e f a u l t L e a s e ) ;
i f ( zad . p o i s o n P i l l == t r u e ) {
s p a c e . w r i t e ( zad , n u l l , d e f a u l t L e a s e ) ;
return ;
}
zad . f l a g = t r u e ;
s p a c e . w r i t e ( zad , n u l l , d e f a u l t L e a s e ) ;
i n t r e s u l t = t h i s . check ( zad . l i c z b a 1 , zad . l i c z b a 2 ) ;
Odpowiedz odp = new Odpowiedz ( zad . id , r e s u l t ) ;
s p a c e . t a k e ( zad , n u l l , d e f a u l t L e a s e ) ; // peen wzorzec
s p a c e . w r i t e ( odp , n u l l , d e f a u l t L e a s e ) ;
} c a t c h ( T r a n s a c t i o n E x c e p t i o n | RemoteException |
UnusableEntryException | I n t e r r u p t e d E x c e p t i o n ex ) {
Logger . g e t L o g g e r ( S i d e k i c k . c l a s s . getName ( ) ) . l o g ( L e v e l . SEVERE
, n u l l , ex ) ;
}
}
}
// dla przyk adu
p u b l i c i n t check ( i n t a , i n t b ) {
return a + b ;
}
// obowi a zkowy Run
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S i d e k i c k murzyn = new S i d e k i c k ( ) ;
murzyn . z a c z n i j M u r z y n i c ( ) ;
}
}

126
6.8 2015, 0 termin, Adam Duszeko
6.8.1 Tre
Napisa program umieszczajcy w przestrzeni JavaSpace 1000 obiektw zada zawierajcych dwa pola
typu cakowitego oraz dwa pola typu acuch znakowy (zawarto nieistotna, rna od NULL), poda
deklaracj klasy zada. Nastpnie odebra z przestrzeni 20 obiektw klasy Odpowied o atrybutach id
typu Integer oraz wynik typu Integer posiadajce w atrybucie id warto 50 (przyj, e klasa Odpowied
jest ju zdefiniowana zgodnie z powyszym opisem).

6.8.2 Rozwizanie
Dziaajce i przetestowane w warunkach domowych na Jini.

Klasa Zadanie
/**
* @author Son Mati & Doxus
*/
// deklaracja klasy , musza by widoczne :
// implementacja interfejsu Entry
p u b l i c c l a s s Zadanie implements Entry {
// publiczne skadowe , musza by wielkich typw opakowuj a cych
public Integer liczba ;
public String napis1 ;
public String napis2 ;
p u b l i c Boolean p o i s o n P i l l ;
// konstruktor domylny , wymagany
p u b l i c Zadanie ( ) {
Random rand = new Random ( ) ;
t h i s . l i c z b a = rand . n e x t I n t ( ) ;
t h i s . n a p i s 1 = I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( ) ) ;
t h i s . n a p i s 2 = I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( ) ) ;
this . poisonPill = false ;
}
// konstruktor z parametrami
p u b l i c Zadanie ( I n t e g e r l i c z b a , S t r i n g n a p i s 1 , S t r i n g n a p i s 2 , Boolean
poisonPill ) {
this . liczba = liczba ;
t h i s . napis1 = napis1 ;
t h i s . napis2 = napis2 ;
this . poisonPill = poisonPill ;
}
}

127
Klasa nadzorcy
/**
* @author Son Mati & Doxus
*/
p u b l i c c l a s s Boss e x t e n d s C l i e n t {
// liczba zada do wykonania
s t a t i c f i n a l i n t TASK NUMBER = 1 0 0 0 ;
// obowi a zkowy domylny konstruktor
p u b l i c Boss ( ) {
}
/**
* Wygenerowanie zadania z losowymi warto ciami
* @param count ilo zadani w
*/
p u b l i c Zadanie g e n e r a t e T a s k ( i n t id , b o o l e a n p o i s o n P i l l ) {
Random rand = new Random ( ) ;
r e t u r n new Zadanie ( id , I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( 1 0 0 0 ) ) ,
I n t e g e r . t o S t r i n g ( rand . n e x t I n t ( 1 0 0 0 ) ) , p o i s o n P i l l ) ;
}
/**
* Utworzenie zadani w
* @param count ilo zadani w
*/
p u b l i c v o i d c r e a t e T a s k s I n J a v a S p a c e ( i n t count ) {
try {
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
f o r ( i n t i = 0 ; i < count ; ++i ) {
Zadanie zad = t h i s . g e n e r a t e T a s k ( i , f a l s e ) ;
s p a c e . w r i t e ( zad , n u l l , d e f a u l t L e a s e ) ;
System . out . p r i n t l n ( Wtgenerowa em zad + i + o s t r i n g a c h
+ zad . n a p i s 1 + i + zad . n a p i s 2 ) ;
}
}
c a t c h ( RemoteException | T r a n s a c t i o n E x c e p t i o n ex ) {
System . out . p r i n t l n ( Dupa XD ) ;
}
}

128
p u b l i c c l a s s Boss e x t e n d s C l i e n t {
/**
* Uzyskanie odpowiedzi
* @param id odpowiedzi , ktora nas interesuje
* @param costam interesuj a cy nas wynik
* @param count liczba odpowiedzi do odbioru
*/
p u b l i c v o i d r e c e i v e D a t a ( I n t e g e r id , I n t e g e r costam , I n t e g e r count ) {
try {
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
Odpowiedz wzor = new Odpowiedz ( id , costam ) ;
f o r ( i n t i = 0 ; i < count ; i ++) {
// odczyt blokuj a cy , zatrzymuje przep yw dopki odp sie nie
pojawi
Odpowiedz wynik = ( Odpowiedz ) s p a c e . t a k e ( wzor , n u l l ,
defaultLease ) ;
System . out . p r i n t l n ( Odpowiedz : i d = + wynik . g e t I d ( ) + ,
wynik = + wynik . getWynik ( ) ) ;
}
} c a t c h ( UnusableEntryException | T r a n s a c t i o n E x c e p t i o n |
I n t e r r u p t e d E x c e p t i o n | RemoteException ex ) {
Logger . g e t L o g g e r ( Boss . c l a s s . getName ( ) ) . l o g ( L e v e l . SEVERE, n u l l ,
ex ) ;
}
}
/**
* ZATRUJ DZIECIACZKI XD
*/
public void poisonKids ( ) {
// utworzenie zatrutej pigulki
Zadanie p o i s o n P i l l = new Zadanie ( n u l l , n u l l , n u l l , t r u e ) ;
try {
space . write ( poisonPill , null , defaultLease ) ;
} c a t c h ( T r a n s a c t i o n E x c e p t i o n | RemoteException ex ) {
Logger . g e t L o g g e r ( Boss . c l a s s . getName ( ) ) . l o g ( L e v e l . SEVERE, n u l l ,
ex ) ;
}
}
/**
* Obowi a zkowy Run dla nadzorcy
*/
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
Boss b o s s = new Boss ( ) ;
b o s s . c r e a t e T a s k s I n J a v a S p a c e (TASK NUMBER) ;
boss . receiveData (50 , null , 20) ;
boss . poisonKids () ;
}
}

129
Klasa Pracownika
/**
* @author Son Mati & Doxus
*/
public c l a s s Sidekick extends Client {
// obowi a zkowy domylny konstruktor
public Sidekick () {
}
// rozpocz e cie pracy
public void zacznijMurzynic ( ) {
while ( true ) {
try {
Random rand = new Random ( ) ;
t h i s . s p a c e = ( JavaSpace ) lookup . g e t S e r v i c e ( ) ;
Zadanie zad = new Zadanie ( n u l l , n u l l , n u l l , n u l l ) ;
zad = ( Zadanie ) s p a c e . t a k e I f E x i s t s ( zad , n u l l , d e f a u l t L e a s e )
;
i f ( zad != n u l l ) {
i f ( zad . p o i s o n P i l l == t r u e ) {
s p a c e . w r i t e ( zad , n u l l , d e f a u l t L e a s e ) ;
return ;
}
System . out . p r i n t l n ( Odebra em z a d a n i e o i d + zad .
liczba
+ i n a p i s a c h + zad . n a p i s 1 + i + zad . n a p i s 2 ) ;
}
Odpowiedz odp = new Odpowiedz ( rand . n e x t I n t ( 5 1 ) , rand .
nextInt (1000) ) ;
s p a c e . w r i t e ( odp , n u l l , d e f a u l t L e a s e ) ;
} c a t c h ( T r a n s a c t i o n E x c e p t i o n | RemoteException |
UnusableEntryException | I n t e r r u p t e d E x c e p t i o n ex ) {
Logger . g e t L o g g e r ( S i d e k i c k . c l a s s . getName ( ) ) . l o g ( L e v e l . SEVERE
, n u l l , ex ) ;
}
}
}
// obowi a zkowy punkt wejcia
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
S i d e k i c k murzyn = new S i d e k i c k ( ) ;
murzyn . z a c z n i j M u r z y n i c ( ) ;
}
}

130
7 CUDA
7.1 2013, 1 termin, Hafed Zighdi
7.1.1 Tre
W oparciu o rodowisko CUDA napisa rwnolegy program zapewniajcy wyszukiwanie minimum i
maksimum elementw macierzy A i B. Mona zakada, e macierze wejciowe s kwadratowe. Program
powinien zwraca 2 macierze zawierajce min oraz max elementw macierzy wejciowych:
minMatrix[i, j] = min(A[i, j], B[i, j])
maxMatrix[i, j] = max(A[i, j], B[i, j])

naley zaproponowa kod kernela oraz jego wywoanie z kodem odpowiedzialnym za przydzia pamici z
podziaem na bloki w dwch wymiarach.

7.1.2 Rozwizanie

#i n c l u d e < s t d l i b . h>
#i n c l u d e <s t d i o . h>
#i n c l u d e <math . h>
#d e f i n e MATRIX SIZE 10

global v o i d t r a n s p o s e K e r n e l ( i n t matrixA , i n t matrixB , i n t


matrixMin , i n t matrixMax )
{
i n t i = b l o c k I d x . x blockDim . x + t h r e a d I d x . x ;
i n t j = b l o c k I d x . y blockDim . y + t h r e a d I d x . y ;
i f ( i < MATRIX SIZE && j < MATRIX SIZE)
{
i n t i n d e x = i MATRIX SIZE + j ;
matrixMin [ i n d e x ] = matrixA [ i n d e x ] > matrixB [ i n d e x ] ? matrixB [ i n d e x ]
: matrixA [ i n d e x ] ;
matrixMax [ i n d e x ] = matrixA [ i n d e x ] < matrixB [ i n d e x ] ? matrixB [ i n d e x ]
: matrixA [ i n d e x ] ;
}
}

c u d a E r r o r t calculateMinMaxWithCuda ( i n t matrixA , i n t matrixB , i n t


matrixMin , i n t matrixMax )
{
// zdefiniowanie macierzy , ktra jest w pamie ci karty
i n t dev a ;
i n t dev b ;
i n t dev max , dev min ;
s i z e t s i z e = MATRIX SIZE MATRIX SIZE ;
// cudne dynksy
cudaError t cudaStatus ;
cudaStatus = cudaSetDevice (0) ;
// alokacja pamie ci po 100 element w
c u d a S t a t u s = cudaMalloc ( ( v o i d )&dev a , s i z e s i z e o f ( i n t ) ) ;
c u d a S t a t u s = cudaMalloc ( ( v o i d )&dev b , s i z e s i z e o f ( i n t ) ) ;
c u d a S t a t u s = cudaMalloc ( ( v o i d )&dev min , s i z e s i z e o f ( i n t ) ) ;
c u d a S t a t u s = cudaMalloc ( ( v o i d )&dev max , s i z e s i z e o f ( i n t ) ) ;

131
{ // Sp aszczamy macierze do jednego wymiaru
// Kopiujemy po wierszu , 10 x 10
f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++)
{
cudaMemcpy ( ( d e v a + i MATRIX SIZE) , matrixA [ i ] , MATRIX SIZE
s i z e o f ( i n t ) , cudaMemcpyHostToDevice ) ;
cudaMemcpy ( ( dev b + i MATRIX SIZE) , matrixB [ i ] , MATRIX SIZE
s i z e o f ( i n t ) , cudaMemcpyHostToDevice ) ;
}
// bloczek z wa tkami 3x3
dim3 b l o c k s i z e ( 3 , 3 ) ;
// liczba potrzebnych blokw, tak eby size = liczba wa tkw
i n t b l o c k c o u n t = MATRIX SIZE / b l o c k s i z e . x + (MATRIX SIZE %
b l o c k s i z e . x == 0 ? 0 : 1 ) ;

minMaxKernel << < g r i d s i z e , b l o c k s i z e >> >(dev a , dev b , dev min ,


dev max ) ;
// przywr cenie dwch wymiar w i przepisanie wynik w
f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++)
{
cudaMemcpy ( matrixMin [ i ] , ( dev min + i MATRIX SIZE) , MATRIX SIZE
s i z e o f ( i n t ) , cudaMemcpyDeviceToHost ) ;
cudaMemcpy ( matrixMax [ i ] , ( dev max + i MATRIX SIZE) , MATRIX SIZE
s i z e o f ( i n t ) , cudaMemcpyDeviceToHost ) ;
}
return 1;
}

i n t main ( )
{
i n t matrixA , matrixB ;
i n t matrixMin , matrixMax ;
matrixA = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixB = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixMin = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixMax = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++)
{
matrixA [ i ] = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixB [ i ] = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixMin [ i ] = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixMax [ i ] = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
}
f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++)
{
f o r ( i n t j = 0 ; j < MATRIX SIZE ; j ++)
{
matrixA [ i ] [ j ] = rand ( ) % 2 0 ;
matrixB [ i ] [ j ] = rand ( ) % 2 0 ;
matrixMin [ i ] = matrixMax [ i ] = 0 ;
}
}
c u d a E r r o r t c u d a S t a t u s = calculateMinMaxWithCuda ( matrixA , matrixB ,
matrixMin , matrixMax ) ;
return 0;
}

132
7.2 2015, 0 termin, Hafed Zighdi
7.2.1 Tre
W oparciu o rodowisko CUDA napisa rwnolegy program zapewniajcy transpozycj macierzy kwa-
dratowej (ao ut[i, j] = ai n[j, i]). Naley zaproponowa kod kernela oraz jego wywoanie z kodem odpo-
wiedzialnym za przydzia pamici z podziaem na bloki w dwch wymiarach.

7.2.2 Rozwizanie

#i n c l u d e <s t d i o . h>
#i n c l u d e < s t d l i b . h>
c o n s t u n s i g n e d i n t MATRIX SIZE = 5 ;

c u d a E r r o r t transposeWithCuda ( i n t matrix , i n t matrixOut )


{
i n t dev a , dev b ;
s i z e t s i z e = MATRIX SIZE MATRIX SIZE ;
// bloczek z wa tkami 2x2 , zgodnie z trecia zadania
dim3 b l o c k s i z e ( 2 , 2 ) ;
// liczba potrzebnych blokw, tak eby size = liczba wa tkw
int block count ;
b l o c k c o u n t = MATRIX SIZE / b l o c k s i z e . x + (MATRIX SIZE % b l o c k s i z e . x
== 0 ? 0 : 1 ) ;
// rozmiar gridu w blokach
// bloczek jest nasza podstawow a jednostk a (ma 4 wa tki)
// grid ma mie tyle bloczk w ile potrzebujemy
dim3 g r i d s i z e ( b l o c k c o u n t , b l o c k c o u n t ) ;
// jakie dynksy do cudy
cudaError t cudaStatus ;
cudaStatus = cudaSetDevice (0) ;
// allokacja tablic w pamie ci karty graficznej
c u d a S t a t u s = cudaMalloc ( ( v o i d ) &dev a , s i z e s i z e o f ( i n t ) ) ;
c u d a S t a t u s = cudaMalloc ( ( v o i d ) &dev b , s i z e s i z e o f ( i n t ) ) ;
// Sp aszczamy macierze do jednego wymiaru
// przekopiowanie matrixa do dev_a
f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++)
{
c u d a S t a t u s = cudaMemcpy ( ( d e v a + i MATRIX SIZE) , matrix [ i ] ,
MATRIX SIZE s i z e o f ( i n t ) , cudaMemcpyHostToDevice ) ;
}
t r a n s p o s e K e r n e l <<<g r i d s i z e , b l o c k s i z e >>>(dev a , dev b ) ;
// Konwersja z wektora 1D na macierz 2D
// przekopiowanie dev_b do matrixOut
f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++) {
c u d a S t a t u s = cudaMemcpy ( matrixOut [ i ] , ( dev b + i MATRIX SIZE) ,
MATRIX SIZE s i z e o f ( i n t ) , cudaMemcpyDeviceToHost ) ;
}
return 1;
}

133
global v o i d t r a n s p o s e K e r n e l ( i n t a , i n t out )
{
i n t i = b l o c k I d x . x blockDim . x + t h r e a d I d x . x ;
i n t j = b l o c k I d x . y blockDim . y + t h r e a d I d x . y ;
i f ( i < MATRIX SIZE && j < MATRIX SIZE)
{
out [ i MATRIX SIZE + j ] = a [ j MATRIX SIZE + i ] ;
}
}

i n t main ( )
{
i n t matrix ;
i n t matrixOut ;
matrix = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixOut = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;

f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++)


{
matrix [ i ] = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
matrixOut [ i ] = ( i n t ) m a l l o c ( s i z e o f ( i n t ) MATRIX SIZE) ;
}
f o r ( i n t i = 0 ; i < MATRIX SIZE ; i ++)
{
f o r ( i n t j = 0 ; j < MATRIX SIZE ; j ++)
{
matrix [ i ] [ j ] = rand ( ) % 2 0 ;
p r i n t f ( %d\ t , matrix [ i ] [ j ] ) ;
}
p r i n t f ( \n ) ;
}
// Add vectors in parallel .
c u d a E r r o r t c u d a S t a t u s = transposeWithCuda ( matrix , matrixOut ) ;

return 0;
}

134
8 MOSIX
8.1 2013, 1 termin, Daniel Kostrzewa
8.1.1 Tre
Wykorzystujc n wzw klastra napisa funkcj, ktra obliczy warto F(x, y). Nagwek funkcji ma
wyglda nastpujco:
d o u b l e fun ( d o u b l e x , d o u b l e y , i n t k )

gdzie wartoci zwracan jest obliczona warto funkcji; k - liczba elementw iloczynu; x, y - argumenty
funkcji. Zaoy, e k jest podzielne przez n bez reszty.

8.1.2 Rozwizanie

#i n c l u d e <s t d i o . h>
#i n c l u d e < s t d l i b . h>
#i n c l u d e <math . h>

double c a l c u l a t e P r o d u c t ( double x , double y , double a ) {


r e t u r n a s q r t ( x y ) / ( 2 pow ( x , 3 ) + 5 y ) ;
}

i n t main ( i n t argc , c h a r argv [ ] ) {


i n t n = a t o i ( argv [ 1 ] ) ; // liczba we zw klastra
i n t k = a t o i ( argv [ 2 ] ) ; // liczba element w iloczynu
d o u b l e x = a t o f ( argv [ 3 ] ) ; // pierwszy argument
d o u b l e y = a t o f ( argv [ 4 ] ) ; // drugi argument
int final product = 1; // iloczyn wynikowy
i n t process number = k / n ;
int response stream [ 2 ] ; // strumie dla danych
double p a r t r e s u l t = 1 ; // jebni e cie potok w
pipe ( response stream ) ;
// utworzenie proces w potomnych
int i , j ;
f o r ( i = 0 ; i < p r o c e s s n u m b e r ; i ++)
{
i f ( f o r k ( ) == 0 )
{
f o r ( j = i p r o c e s s n u m b e r ; j < ( i + 1 ) p r o c e s s n u m b e r ; j ++)
{
part result = part result calculateProduct (x , y , j ) ;
w r i t e ( r e s p o n s e s t r e a m [ 1 ] , &p a r t r e s u l t , s i z e o f ( d o u b l e ) ) ;
}
exit (0) ;
}
}
// odczytanie danych cze ciowych
f o r ( i = 0 ; i < p r o c e s s n u m b e r ; i ++)
{
r e a d ( r e s p o n s e s t r e a m [ 0 ] , &p a r t r e s u l t , s i z e o f ( d o u b l e ) ) ;
final product = final product part result ;
}
p r i n t f ( Tw j s z c z e l i w y i l o c z y n t o %g , f i n a l p r o d u c t ) ;
return 0;
}

135
8.2 2014, 1 termin, Daniel Kostrzewa
8.2.1 Tre
Maj do dyspozycji n wzw klastra napisa funkcj, ktra obliczy cak metod trapezw z funkcji
zapisanej poniej. Nagwek funkcji wyglda nastpujco:
d o u b l e c a l k a ( d o u b l e xl , d o u b l e xp , d o u b l e krok )

gdzie wartoci zwracan jest obliczona warto caki; xl - pocztek przedziau cakowania, xp - koniec
przedziau cakowania, krok - warto kroku cakowania.

y = 15x3 7x2 + sin(2x4 ) 8

8.2.2 Rozwizanie

#i n c l u d e <s t d i o . h>
#i n c l u d e < s t d l i b . h>
#d e f i n e N 4

double func ( double x )


{
r e t u r n 15 pow ( x , 3 ) 7 xx + s i n ( 2 pow ( x , 4 ) ) 8 ;
}
// x1: wspolrzedna x poczatku przedzialu calkowania
// xk: wspolrzedna x konca przedzialu calkowania
// krok: wysokosc trapezu (x2 - x1)
d o u b l e l i c z C a l k e ( d o u b l e x1 , d o u b l e xk , d o u b l e krok )
{
d o u b l e x2 = x1 + krok ; // Wspolrzedna x drugiej
podstawy trapezu
double a , b ; // Wartosci funkcji w x1 , x2
d o u b l e wynik = 0 ;

w h i l e ( x2 < xk )
{
a = f u n c ( x1 ) ;
b = f u n c ( x2 ) ;
wynik += ( a + b ) krok / 2 ;

x1 += krok ;
x2 += krok ;
}
r e t u r n wynik ;
}
d o u b l e c a l k a ( d o u b l e xl , d o u b l e xp , d o u b l e krok )
{
int i , forkResult ;
// Wartosc calki oznaczonej w calym przedziale / przedziale dziecka
d o u b l e mainResult = 0 , c h i l d R e s u l t = 0 ;
// Szeroko przedzia u, w jakim dziecko liczy cake
d o u b l e d e l t a = ( xp x l ) / N;
// Potok do zapisu i odczytu
i n t potok [ 2 ] ;
p i p e ( potok ) ;

136
{
// Kindermachen
f o r ( i = 0 ; i < N; i ++)
{
forkResult = fork () ;
i f ( f o r k R e s u l t == 0 )
{
c h i l d R e s u l t = l i c z C a l k e ( xl , x l + d e l t a , krok ) ;
w r i t e ( potok [ 1 ] , &c h i l d R e s u l t , s i z e o f ( c h i l d R e s u l t ) ) ;
exit (0) ;
}
e l s e i f ( forkResult < 0)
{
p r i n t f ( Wystapil b l a d p o d c z a s t w o r z e n i a d z i e c k a ) ;
r e t u r n 1;
}
x l += d e l t a ;
}
// Odczytanie i zsumowanie wynik w przez rodzica
f o r ( i = 0 ; i < N; i ++)
{
r e a d ( potok [ 0 ] , &c h i l d R e s u l t , s i z e o f ( c h i l d R e s u l t ) ) ;
mainResult += c h i l d R e s u l t ;
}
p r i n t f ( \ nCalka o b l i c z o n a metoda trapezow j e s t rowna : %f \n , mainResult
);
r e t u r n mainResult ;
}

137
8.3 2015, 0 termin, Daniel Kostrzewa
8.3.1 Tre
Napisa program, ktry utworzy n procesw potomnych. Proces zarzdzajcy ma wysya zestaw liczb do
procesw potomnych (zaoy, e liczba przesyanych danych wynosi k ). Procesy potomne maj w ptli
wykonywa nastpujce czynnoci: czeka na liczb wysan przez proces zarzdzajcy, na podstawie
odebranej liczby obliczy pole koa (odebrana liczba jest promieniem koa), odesa wynik do procesu
zarzdzajcego. Proces zarzdzajcy po wysaniu wszystkich liczb przechodzi w stan odbierania danych
i sumuje pola k. Kocowa warto ma zosta wywietlona na ekranie.

8.3.2 Rozwizanie

#i n c l u d e <s t d i o . h>
#i n c l u d e < s t d l i b . h>
#i n c l u d e <math . h>
#d e f i n e PI 3 . 1 4 1 5 9

flo at c a l c u l a t e c i r c l e a r e a ( int radius )


{
r e t u r n PI pow ( ( f l o a t ) r a d i u s , 2 ) ;
}

i n t main ( i n t argc , c h a r argv [ ] )


{
i n t n = a t o i ( argv [ 1 ] ) ;
i n t k = a t o i ( argv [ 2 ] ) ;
// promien -1 oznacza ze jest to trujaca pigulka zabijajaca proces
potomny
i n t p o i s o n = 1;
// allokacja tablicy k liczb ( promieni )
i n t tab = ( i n t ) m a l l o c ( s i z e o f ( i n t ) k ) ;
int i ;
f o r ( i = 0 ; i < k ; i ++)
{
tab [ i ] = rand ( ) % 2 0 ;
}
i n t process number = n / k ;
// 2 strumienie , jeden do wysyania danych , drugi do odbioru odpowiedzi
int data stream [ 2 ] , response stream [ 2 ] ;
// wyniki
int part ;
i n t sum = 0 ;
// jebni e cie potok w
// odpowiedzi z proces w potomnych
pipe ( response stream ) ;
// in - promienie k
// out - otrzymane wyniki - pola k
pipe ( data stream ) ;

138
// utworzenie proces w potomnych
f o r ( i = 0 ; i < n ; i ++)
{
i f ( f o r k ( ) == 0 )
{
int radius ;
// wykonywanie oblicze dopki nie zostanie OTRUTY (!)
while ( true )
{
i f ( r e a d ( d a t a s t r e a m [ 0 ] , &r a d i u s , s i z e o f ( i n t ) ) != s i z e o f ( i n t ) )
continue ;
i f ( r a d i u s == 1) // wya cza sie tylko jak otrzymamy piguke
exit (0) ;
fl oat result = c a l c u l a t e c i r c l e a r e a ( radius ) ;
w r i t e ( r e s p o n s e s t r e a m [ 1 ] , &r e s u l t , s i z e o f ( f l o a t ) ) ;
}
}
}
// wysanie danych do proces w potomnych
f o r ( i = 0 ; i < k ; i ++)
{
w r i t e ( d a t a s t r e a m [ 1 ] , &tab [ i ] , s i z e o f ( i n t ) ) ;
}
// Halo odbjoor danych
f o r ( i = 0 ; i < n ; i ++)
{
r e a d ( r e s p o n s e s t r e a m [ 0 ] , &part , s i z e o f ( i n t ) ) ;
sum = sum + p a r t ;
}
// ZABIJANIE DZIECI
f o r ( i = 0 ; i < k ; i ++)
{
w r i t e ( d a t a s t r e a m [ 1 ] , &p o i s o n , s i z e o f ( i n t ) ) ;
}
// wypisanie odpowiedzi
p r i n t f ( Suma p l k : %d , sum ) ;
return 0;

139
8.4 Termin nieznany, Daniel Kostrzewa
8.4.1 Tre
Znale warto wielomianu k -tego stopnia w punkcie x wyraonego poniszym wzorem. Liczby k oraz x
s podawane jako parametry wywoania programu. W Zadaniu naley stworzy potok oraz dwa procesy
potomne. Jeden z procesw potomnych wyznacza warto wielomianu dla k-1 stopnia, natomiast drugi
dla k-2 stopnia. Zadanie rozwiza metod rekurencyjn.
! !
3 x2
Pk (x) = 15Pk1 x Pk2 P0 (x) = 1 P1 (x) = x
8 2

8.4.2 Rozwizanie

#i n c l u d e <s t d i o . h>
#i n c l u d e < s t d l i b . h>
// Main
i n t main ( i n t argc , c h a r argv [ ] )
{
d o u b l e wynik = 0 ; // Ostateczny wynik programu
double x ;
int k ;
i f ( a r g c == 3 )
{
k = a t o i ( argv [ 1 ] ) ;
x = a t o f ( argv [ 2 ] ) ;
wynik = l i c z W i e l o m i a n ( k , x ) ;
p r i n t f ( Wielomian j e s t rowny : %f \n , wynik ) ;
}
else
p r i n t f ( Podano n i e p r a w i d l o w e parametry ! \ n ) ;
return 0;
}
// Metoda do liczenia wartosci wielomianu
double l i c z 2 ( i n t k , double x )
{
d o u b l e r e s u l t , Pk1 , Pk2 ;
i f ( k == 0 )
return 1;
i f ( k == 1 )
return x ;
Pk1 = l i c z 2 ( k 1 , 0 . 3 7 5 x ) ;
Pk2 = l i c z 2 ( k 2 , xx / 2 . 0 ) ;
r e s u l t = 15 Pk1 Pk2 ;
return r e s u l t ;
}

140
// Obliczenie caoci wielomianu
double liczWielomian ( i n t k , double x )
{
d o u b l e mainResult = 0 , c h i l d R e s u l t 1 , c h i l d R e s u l t 2 ;
i n t potok [ 2 ] ;
i f ( k == 0 )
return 1;
i f ( k == 1 )
return x ;
p i p e ( potok ) ;
// Pierwsze dziecko - wielomian k -1 stopnia
i f ( f o r k ( ) == 0 )
{
c h i l d R e s u l t 1 = 15 l i c z 2 ( k 1 , 0 . 3 7 5 x ) ;
w r i t e ( potok [ 1 ] , &c h i l d R e s u l t 1 , s i z e o f ( c h i l d R e s u l t 1 ) ) ;
exit (0) ;
}
// Drugie dziecko - wielomian k -2 stopnia
i f ( f o r k ( ) == 0 )
{
c h i l d R e s u l t 2 = l i c z 2 ( k 2 , xx / 2 . 0 ) ;
w r i t e ( potok [ 1 ] , &c h i l d R e s u l t 2 , s i z e o f ( c h i l d R e s u l t 2 ) ) ;
exit (0) ;
}
r e a d ( potok [ 0 ] , &c h i l d R e s u l t 1 , s i z e o f ( c h i l d R e s u l t 1 ) ) ;
r e a d ( potok [ 0 ] , &c h i l d R e s u l t 2 , s i z e o f ( c h i l d R e s u l t 2 ) ) ;
mainResult = c h i l d R e s u l t 1 c h i l d R e s u l t 2 ;
r e t u r n mainResult ;
}

141