|
Konkurentne a distribuovane programovanie systemy 2015/2016
Skusky
15.1.2016 M.IV (resp. v M262)
Stvrtok 14:00-17:10 XII
Hodnoti sa priebezna praca pocas semestra (vypracovanie niekolkych
projektov), ktora ma rovnaku vahu ako skuska v skuskovom obdobi. Pre uspesne
absolvovanie kurzu je nutne obe tieto ciastocne hodnotenia splnit aspon na
40%.
-
Motivacia. Oddelenie algoritmickych a konkurentnych aspektov v jazyku C.
Pamatova a casova zlozitost programov s I/O operaciami a dynamickou
alokaciou pamate. Polling a jeho dosledky.
-
Meranie casu. Zdroje casu v PC, Real-Time Clock (RTC), Programmable Interval
Timer (PIT). Meranie casu a budiky v operacnom systeme. Presnost zdrojov
casu a budikov v operacnom systeme:
Tutorial on PC timers
Linux
man clock_gettime(CLOCK_MONOTONIC_RAW, ...)
Linux Device Drivers (Chapter
7)
Linux Kernel Development
(Chapter 10)
-
Ucel a spracovanie preruseni, Programmable Interrupt Controller (PIC).
Signaly v operacnom systeme a ich spracovanie. select():
Operating
Systems Development: 8259A PIC Microcontroller
Linux Device Drivers (Chapter
10)
Linux Kernel Development
(Chapter 6)
man kill(),
man
signal()
man
select()
- Thready, stavovy diagram threadu. Zdielane premenne, atomicita pristupu
k pamati, kriticke regiony. Petersenov algoritmus, predpoklady na atomicitu
operacii, dokaz spravnosti. Deadlock, livelock. Ine prostriedky
synchronizacie threadov. Posix threads (pthreads), mutexy, podmienkove
premenne:
Slajdy k prednaske
Doporucenie
z minulosti (kedy pouzit thready a kedy nie, 1996)
- Thready v Jave. Vytvorenie threadu. Synchronizovane metody,
synchronizovane bloky. Zabudovane reentrantne mutexy. Metody join(),
wait(), signal(). Problem s priamociarym pouzitim synchronized metod.
Kniha
SCJP Sun Certified Programmer for Java (Chapter 9)
- Viacurovnovy pamatovy model. Ukazky neintuitivneho spravania programov.
Prostriedky synchronizacie pamate a ich pouzitie v Jave a C. Volatile
premenne, implicitna synchronizacia pamate:
Java memory model
(JSR133)
Memory
models
Java memory model
Java
"double-checked locking" (v skutocnosti bez explicitnych zamkov)
- OpenMP. Filozofia OpenMP. Fork-join paralelizmus. Architektura
OpenMP:
Specifikacia OpenMP
GOMP (GNU OpenMP)
Introduction
to OpenMP (RWTH Aachen University)
Introduction
to OpenMP (University of Oregon)
- Paralelizacia cyklov. Pravdepodobnostny model. Deterministicky model.
Parametre modelov a ucel optimalizacie. Metody optimalizacie:
Chunking,
factoring
Work stealing
Sablona pre projekty v C/POSIX
Sablona pre vsetky projekty v C/POSIX: ctemplate.zip
Po make "clean; make" ma byt 0 warnings, 0 errors.
Projekt 1
Implementujte v ANSI C/POSIX program, ktory robi sucasne
nasledujuce tri veci:
-
Ponuka interaktivny riadkovy user-interface, ktory pozna prikazy
"a hh:mm:ss" (add alarm), "l" (list alarms), "d alarm_nr" (delete alarm),
"q" (quit). Alarmy su cislovane od 0, moze byt sucasne nastavenych viacero
alarmov.
-
Vypisuje riadok s realnym casom "hh:mm" raz za minutu.
-
Vypise riadok "ALARM alarm_nr hh:mm:ss", ked nastane alarm cislo alarm_nr.
Alarmy sa nastavuju a detekuju s presnostou na sekundy.
"q" (quit) ma ukoncit program prirodzenym ukoncenim funkcie main(), bez
explicitneho volania napr. exit().
Projekt 2
Dokazte (na papieri), ze Petersenov algoritmus pre vzajomne vylucenie 2 threadov funguje.
Projekt 3
Uvazujte kniznicu, ktora implementuje standardne n-arne semafory. V sem.h
ponuka typ Semaphore_t a nasledujuce funkcie:
- void sem_init(Semaphore *s, int v);
- void sem_wait(Semaphore *s);
- void sem_signal(Semaphore *s);
Implementujte nasledujuce typy a funkcie (zakladne funkcie z pthreads)
pomocou makier resp. funkcii, ktore vyuzivaju sem.h (a zakladne typy v C):
- pthread_mutex_t
- pthread_cond_t
- pthread_attr_t
- int pthread_mutex_init(m, a);
- int pthread_mutex_lock(m);
- int pthread_mutex_unlock(m);
- int pthread_mutex_destroy(m);
- int pthread_cond_init(c, a);
- int pthread_cond_wait(c, m);
- int pthread_cond_signal(c);
- int pthread_cond_destroy(c);
Projekt 4
Odsimulujte pomocou funkcii resp. makier typy a funkcie z pthreads z
projektu 3 pomocou semaforovych funkcii. (Opacna simulacia ako v projekte
3.)
Projekt 5
Napiste sekvencny program, ktory vypocita objem gule (v 3D) Monte-Carlo
integraciou pologulovej funkcie nad kruhovou domenou. Pocet vzoriek je
parametrom programu, ktory sa specifikuje pri spustani na command-line.
Paralelizujte tento program pomocou OpenMP, pricom explicitne specifikujte
metodu rozdelenia prace (schedule). Ak mate k dispozicii pocitac s aspon 4
procesormi, najdite "empiricky najlepsiu" metodu a jej parametre.
Namerajte a uvedte graf efektivity (efficiency) pre 1, 2, 4 thready (ak mate
aspon 8 procesorov, tak aj pre 8 resp. 16). Ak taky pocitac nemate, tak
vyber metody a jej parametrov zdovodnite analyzou nameranych casov
rozdelovanych uloh. Sucastou projektu je report s nameranymi datami a
zdovodnenim vyberu metody a jej parametrov.
Evidencia odovzdanych projektov:
BJ: 1, 2, 3, 4, 5
KR: 1, 2, 3, 4, 5
MJ: 1, 2, 3, 4, 5
PA: 1, 2, 3, 4, 5
SS: 1, 2, 3, 4, 5
TJ: 1, 2, 3, 5
Updated by
Tomas Plachetka,
Dec/24/2015
|