Professional Documents
Culture Documents
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
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
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
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
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
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
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
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
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
11. ENIAC
17. od 1971 komputery IV generacji - z ukadami scalonymi wielkiej skali inegracji VLSI
2 Architektura CISC
2.1 Znaczenie
Complex Instruction Set Computers
8
2.3 Cechy architektury CISC
Dua liczba rozkazw (z czego te najbardziej zaawansowane i tak nie byy uywane)
zoonoci
dugoci (szczeglnie to - nawet kilkanacie bajtw)
czasw wykonania
Niewiele rejestrw - byy drosze ni komrki pamici i przy przeczaniu kontekstu obawiano si
wzrostu czasu przeczania kontekstu (chowanie rejestrw na stos i odwrotnie)
3 Architektura RISC
3.1 Znaczenie
Reduced Instruction Set Computers.
Model oblicze rejestr rejestr: komunikacja z pamici operacyjn tylko za pomoc rozkazw
LOAD i STORE.
44 420 tranzystorw (wczesne procesory CISC zawieray ok. 100 000 tranzystorw)
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
7 1 5 5 1 13
OPCODE SCC DEST SRC1 IMM SRC2
OPCODEkod rozkazu
SCC ustawianie (lub nie) kodw warunkw
10
3.7 Logiczna organizacja rejestrw procesora RISC I
Tabela 1: Rejestry
R31
6 Wysokie
10 Lokalne
6 Niskie
R9
10 Globalne
R0
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
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
r1
r2
r3
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
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
Przewidywanie rozgazie
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.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.
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.
Wykrywanie zalenoci na etapie kompilacji i modyfikacja programu (np. dodanie rozkazu NOP)
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.3.3 Antyzaleno
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
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.
17
6 Architektura VLIW
6.1 Co to jest?
VLIW - Very Long Instruction Word.
6.2 Cechy
Wsplna pami operacyjna
Szeregowanie rozkazw
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)
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
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
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
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.
Komputery wektorowe
Komputery macierzowe
Systemy wieloprocesorowe
Klastry (systemy wielokomputerowe)
21
8.4 Klasyfikacja Flynna
M. Flynn, 1966
Gdzie:
JS Jednostka sterujca
JP Jednostka przetwarzajca
22
8.4.2 Klasyfikacja opisowa
23
9 Architektura SIMD
9.1 Co to jest?
Tumaczenie Single Instruction Multiple Device
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.6 Podsumowanie
1. Hardware
rozkazy wektorowe
dua liczba potokowych jednostek arytmetycznych (specjalizowanych)
dua liczba rejestrw (nawet kilkaset tysicy)
2. Software
9.2.7 Zastosowanie
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:
3. Sie czca - czy elementy przetwarzajce midzy sob lub z moduami pamici operacyjnej;
warianty:
9.3.3 Podsumowanie
Architektura SIMD
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 - obsugiwana przez karty graficzne GeForce i GeForce Mobile od serii 8 (GeForce 8800),
nowsze ukady z rodzin Tesla i Quadro, Fermi, obecnie Kepler
16 384 rejestry,
dwie jednostki arytmetyczne przeznaczone do obliczania funkcji specjalnych (ang. special function
unit),
pami globalna
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.
3. Zainicjowanie przez CPU oblicze wykonywanych przez GPU, tj. wywoanie kernela.
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).
Wymaga si, aby bloki wtkw tworzcych siatk mogy si wykonywa niezalenie: musi by
moliwe ich wykonanie w dowolnym porzdku, rwnolegle lub szeregowo.
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:
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.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.
29
11 Systemy wieloprocesorowe (UMA)
11.1 Rodzaje
Systemy z pamici wspln
11.2.1 Klasyfikacja
Systemy ze wspln magistral
Systemy wielomagistralowe
11.3 Skalowalno
System skalowalny - System, w ktrym dodanie pewnej liczby procesorw prowadzi do proporcjonal-
nego przyrostu mocy obliczeniowej.
Niski koszt
Niska skalowalno
I - invalid
S - shared
E - exclusive
M - modified
30
11.5 Systemy wielomagistralowe
M M M M
P P P IO IO
Rozwizania kosztowne
P1
P2
Pn
Dua przepustowo
Wysoki koszt
Przykady:
31
11.8 Systemy z pamici wieloportow
M1 M2 Mm
P1
P2
Pn
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
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
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)
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
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
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)
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.
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.6 Podsumowanie
PaO fizycznie rozproszona, ale logicznie wsplna
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)
14 Systemy MMP
Systemy wieloprocesorowe z pamici rozproszon.
MPP Massively Parallel Processors.
P1 P2 Pn
M1 M2 Mn
MPP MPP
P P P P
M UMA M UMA
M M M M P P P P P P
MPP
NUMA NUMA
36
14.3 Topologia
Sieci czce wzy MPP.
Hiperszecian
Krata 2D, 3D
Torus 2D, 3D
Sprztowa obsuga przesyu przez routery wzw poredniczcych, bez angaowania procesorw
(systemy II generacji)
14.6 Podsumowanie
Hierarchiczna architektura
Wze: procesor, system UMA, (system NUMA)
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.
Infrastruktura scalajca
Sie czca
Unix
Windows
38
15.3.5 Sieci czce
Sieci specjalizowane starsze rozwizania
15.3.7 Inne
Zaleno moc obliczeniowa niezawodno
Memory Channel
Fast Ethernet
Gigabit Ethernet
Myrinet
Quadrics (QsNet)
InfiniBand
39
15.6 Sieci czce - rnice
Parametry przepustowo, czas opnienia
Topologia
Adaptery wzw posiadaj sterowniki DMA dla szybkiego odczytu pamici oraz mikroprocesory
sterujce
Przesy pakietu przez przecznik do kolejnego przecznika (punktu) bez kompletowania caego
pakietu w przeczniku (cut through routing, wormhole routing)
Operacja odczytu lub zapisu bloku danych w trybie RDMA (Remote DMA) pomidzy pamiciami
operacyjnymi dwch wzw
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
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)
3. Mirroring dyskw
6. Redundancja zasilania
Wze Wze
A B
Pami
zewntrzna
Modele mieszane
Wze
A Wze
pasywny
Wze Pami
Wze
Wzy D
aktywne B zewntrzna
Wze
C
41
15.9 Warianty dostpu do wsplnych zasobw
15.9.1 Zasada wspdziel wszystko
Pami
zewntrzna
Wszystkie wzy maj dostp do wsplnej pamici zewntrznej (kontrola dostpu przez mechanizmy
blokad).
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.12 Podsumowanie
Wzy typowe serwery SMP z pki + pena instancja Systemu Operacyjnego
Sieci czce standardy: Gigabit Ethernet, Infiniband
Komunikacja midzy wzami (procesami) przesy komunikatw
43
Pytania zamknite
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.
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.
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.
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.
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.
48
9. Dla uniknicia hazardu danych mona:
Zastosowa uproszczone metody adresacji.
RISC nie eliminuje hazardu XD Skracaj tylko czas dostpu do pamici.
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.
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.
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.
Protokou MESI
Nie, on jest od zapewnienia spjnoci pamici wsplnej czy jako tak.
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.
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.
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.
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
56
19. Efektywne wykorzystanie rwnolegoci na poziomie danych umoliwiaj:
Komputery wektorowe
Komputery macierzowe
Klastry
Procesory graficzne
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.
57
21. Metoda przemianowania rejestrw jest stosowana w celu eliminacji:
Bdnego przewidywania rozgazie
Nie, do tego suy m.in. tablica historii rozgazie.
GFLOPS
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
59
26. Komputery wektorowe:
Posiadaj jednostki potokowe o budowie wektorowej
Nie, posiadaj potokowe jednostki arytmetyczne, ktre nie s wektorowe.
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.
61
30. Rozkazy wektorowe mog by realizowane przy wykorzystaniu:
Macierzy elementw przetwarzajcych
Tak, komputery macierzowe operuj na rozkazach wektorowych.
Technologii MMX
Tak, jest to pochodna technologia modelu SIMD, wykonuje operacje na krtkich wektorach (64-bit)
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
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.
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.
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.
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.
Pami operacyjna jest rozproszona fizycznie pomidzy wzami, ale wsplna logicz-
nie
Patrz wyej.
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.
39. W architekturze CC-NUMA czas dostpu do pamici operacyjnej moe zalee od:
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.
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.)
S wykorzystywane w klastrach
Tak, wzy w postaci serwerw SMP.
68
44. Charakterystyczne cechy architektury MPP:
Spjno pamici podrcznej wszystkich wzw
Spjno wrcz nie powinna by zapewniana, kady element s swoj wasn, odrbn pami.
Niska skalowalno
Nie, jest przeogromna.
69
45. Systemy pamici rozproszon (MPP):
Wyrniaj si bardzo du skalowalnoci
Posiadaj ogromn skalowalno, tylko klastry maj lepsz.
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.
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.
Ma miejsce w klastrach
Tak, patrz wyej.
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.
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.
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.
Niska przepustowo
Noelonie, do pamici potrzebna jest dua przepustowo, bo przechodzi przez ni duo danych.
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).
74
54. Sprztowe przeczenie wtkw moe by wynikiem:
Chybienia przy odwoaniu do pamici podrcznej.
Patrz: realizacja sprztowej wielowtkowoci 7.2
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.
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
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)
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
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
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.
#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
. 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
. 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)
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 ;
}
. 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
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
s u b c c %i 0 , 1 , %o0 ; %o0 == n - 1
bneg r e t u r n 1
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.
.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
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
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 1 , 1, %l 0 ;! if (k == 0)
bneg zwroc1
nop
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
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 ;
}
.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 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 ;
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
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.
#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;
// suma zliczen
i n t sum = 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 ) ) ;
dataToSend [ 0 ] = x ;
dataToSend [ 1 ] = y ;
dataToSend [ 2 ] = n ;
// 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 ) ;
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 ) ;
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 ( ) ;
// 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 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
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 ;
}
}
/**
* @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.
118
p u b l i c c l a s s Program {
public int defaultLease = 100000;
public int id = 1;
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.
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 ;
}
}
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.
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
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 ) ;
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 ;
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) ;
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>
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.
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
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
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