Paralelné programovanie - práca počas semestra

Všeobecné informácie

V priebehu semestra je potrebné vypracovť a odprezentovať 3 úlohy a jeden projekt.

Úlohy a projekt

Prvá úloha bude zadaná až na cvičení a bude ju potrebné vypracovať v priebehu cvičenia. Bližšie informácie, že čo si precvičiť na 1. úlohu je tu.

Ostatné úlohy budú zadané v predstihu, bude možné ich vypracovať mimo cvičení a na cvičeniach ich prísť odprezentovať. Za každý týždeň oneskoreného odprezentovania bude úloha penalizovaná 2 bodmi. Bližšie informácie o môžných témach sú tu.

Projekt

Za vypracovanie a odprezentovanie projektu je možné získať 20 bodov. Za každý týždeň oneskoreného odprezentovania bude projekt penalizovaný 4 bodmi. Prezentuje sa produkt a odovzdáva sa krátka správa spolu s produktom. Projekt môžu vypracovať študenti v dvojiciach. Bližšie informácie o môžných témach sú tu.

Distribúcia pre Win

Distribúciu obsahujúcu kompletné vývojové prostredie spolu s príkladmi pre úlohy je možné si stiahnúť pomocou downloadera: stiahnite si tento zip subor, rozzipujte a spustite "download.bat". Vo vašom adresári sa vytvoria podadresáre git a PaPP. Ďalší update na aktuálnu verziu distribúcie robte spustením PaPP/update.bat. Aktualizáciu robte vždy pred prácou, postupne budeme pridávať ďalšie príkaldy a budeme opravovať chyby.

Repozitár distribúcie:
Projekt: http://github.com/drahosp/PaPP
Git Access (read only): git://github.com/drahosp/PaPP.git
Git Access (read/write): git@github.com:drahosp/PaPP.git
Svn Access: http://svn.github.com/drahosp/PaPP.git

Aplikacie:
TortoiseGIT: http://code.google.com/p/tortoisegit/
alternativa je: http://tortoisesvn.tigris.org/

Pthreads

Príklady, ktoré je vhodné si preriešiť (z cvičení a prednášok):

Príklady na riešenie
Príklady uloha č. 1
  1. Jednoduché konštrukcie
  2. Jednoduché synchronizačné konštrukcie
  3. Synchronizačné problémy

OpenMP, MPI, CUDA

Zvoľte si výpočtovo náročnú úlohu a preverte možnosti aplikovania paralelného spracovania na jej riešenie. Využite paralelné programátorské modely OpenMP, MPI a CUDA a dosiahnuté zrýchlenia porovnajte a komentujte. Diskutujte témy s cvičiacimi.

Možné témy:

Generator Fraktalov

Implementujte generator fraktalu[1] ktory je schopny realizovat jeho vypocet paralelne za pomoci OpenMP, MPI, Cuda/OpenCL alebo ich kombinacie. V implementacii pouzite pripravenu vizualizacnu kostru v distribuovanom prostredi pouzivanom na cviceniach a doplnte jej funkciu GenerateImage. Cielom ulohy je generovat fraktal za co najmensi cas pricom mnozstvo iteracii pri generovani bodu vo fraktale je variabilne. Do kostry implementujte i funkcionaltu merajucu rychlost vypoctu. Za plus sa povazuju interaktivne riesenia umoznujuce zoom a posun vo farebnom fraktale. Riesenie a pripadne otazky ohladom zadania prekonzultujte s Petrom Drahosom na cviceniach.

Filter Obrazu

Implementujte filter obrazu vyuzivajuci konvolucnu maticu[2] za pomoci OpenMP, MPI, Cuda/OpenCL alebo ich kombinacie. Na implementaciu vyuzite pripravenu vizualizacnu kostru v distribuovanom prostredi pouzivanom na cviceniach a doplnte jej funkciu GenerateImage. Ako zdrojovy obraz mozete pouzit sum nahodne generovanych hodnot a pre dalsie iteracie filtra pouzite ako vstup jeho predosli vystup. Do kostry implementujte i funkcionaltu merajucu rychlost vypoctu. Za plus sa povazuje nacitanie obrazu zo suboru alebo interaktivbe "kreslenie" do obrazu. Riesenie a pripadne otazky ohladom zadania prekonzultujte s Petrom Drahosom na cviceniach.

Zhluková analýza rozsiahlých dát pomocou algoritmu k-means

Implementujte algoritmus k-means [3] a využite paralelné programátorské modely OpenMP, MPI, Cuda/OpenCL alebo ich kombinácie. Implementácia musí byť schopná načítať textový súbor s reálnymi číslami, kde každý riadok zodpovedá jednému pozorovaniu (jednému vektoru v množine). Počet pozorovaní, rozmer vektora pozorovania a tiež počet zhlukov nech je možné zadať v príkazovom riadku. Inicializujte centrá zhlukov nahodým výberom prvkov z množiny a zastavte trénovanie, keď už nedochádza k zmenám centier zhlukov. Počas trénovania počítajte mieru WCSS (Within cluster sum of squares) a tiež meranie času výpočtu. Riešenie a prípadné otázky ohľadom zadania prekonzultujte s Michalom Čerňanským na cvičeniach.

Dopredné šírenie v neurónových sieťach

Implementujte algoritmus dopredného šírenia v doprednej viacvrstvovej perceptrónovej sieti [4] a využite paralelné programátorské modely OpenMP, MPI, Cuda/OpenCL alebo ich kombinácie. Implementácia musí byť schopná načítať textový súbor s reálnymi číslami, kde každý riadok zodpovedá jednému vstupnému vektoru. Počet krokov dopredného šírenia, počet vstupných, skrytých a výstupných neurónov nech je možné zadať v príkazovom riadku. Na konci simulácie nech aplikácia zapíše výstupy siete do textového súboru. Riešenie a prípadné otázky ohľadom zadania prekonzultujte s Michalom Čerňanským na cvičeniach.

[1] http://en.wikipedia.org/wiki/Mandelbrot_set
[2] http://www.gamedev.net/reference/programming/features/imageproc/page2.asp
[3] http://en.wikipedia.org/wiki/K-means_clustering
[4] http://www2.fiit.stuba.sk/~cernans/nn/nn_download/UNS.zip

Projekt

Možné témy: