|  | Konkurentne a distribuovane programovanie systemy 2015/2016Skusky15.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/POSIXSablona pre vsetky projekty v C/POSIX: ctemplate.zipPo make "clean; make" ma byt 0 warnings, 0 errors.
 Projekt 1Implementujte v ANSI C/POSIX program, ktory robi sucasne 
nasledujuce tri veci:
"q" (quit) ma ukoncit program prirodzenym ukoncenim funkcie main(), bez 
explicitneho volania napr. exit().
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.
 
 Projekt 2Dokazte (na papieri), ze Petersenov algoritmus pre vzajomne vylucenie 2 threadov funguje.Projekt 3Uvazujte kniznicu, ktora implementuje standardne n-arne semafory. V sem.h 
ponuka typ Semaphore_t a nasledujuce funkcie:
Implementujte nasledujuce typy a funkcie (zakladne funkcie z pthreads) 
pomocou makier resp. funkcii, ktore vyuzivaju sem.h (a zakladne typy v C):void sem_init(Semaphore *s, int v);void sem_wait(Semaphore *s);void sem_signal(Semaphore *s); 
pthread_mutex_tpthread_cond_tpthread_attr_tint 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 4Odsimulujte pomocou funkcii resp. makier typy a funkcie z pthreads z
projektu 3 pomocou semaforovych funkcii. (Opacna simulacia ako v projekte
3.)Projekt 5Napiste 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
 |