Cilji in kompetence
Cilj predmeta je, da bodo študenti sposobni razumeti osnovne principe porazdeljenega in paralelnega računanja.
Vsebina
• Uvod: paralelni računalniški sistemi, porazdeljeni računalniški sistemi, heterogeno procesiranje.
• Pohitritev (Amdahlov zakon), zmogljivost, skalabilnost paralelnih algoritmov in porazdeljenih sistemov.
• Zasnova paralelnih računalniških sistemov: pomnilnik, omrežja, operacijski sistemi, večjederni procesorji, vhod in izhod. Paralelni arhitekturi SIMD in MIMD.
• Principi paralelnega računanja: programski jeziki, prevajalniki, podatkovni in krmilnini paralelizem, dekompozicija podatkov, pošiljanje sporočil in deljeni pomnilnik.
• Programiranje s pošiljanjem sporočil. Uvod v standard MPI in aplikacijski programski vmesnik OpenMP ter paralelnost v standardih C++.
• Arhitektura grafičnih procesnih enot (GPE), paralelno računanje s pomočjo GPE. Splošno namensko računanje z GPE, spoznavanje tehnologij CUDA in OpenCL.
• Omejitve in cena pri paralelnem programiranju.
• Porazdeljeni sistemi: modeli porazdeljenega procesiranja, komunikacija in sinhronizacija v porazdeljenih sistemih, porazdeljeni podatkovni sistemi (GoogleFS, HDFS, HFS). Visokozmogljivo in visokoprepustno računanje s porazdeljenimi gručami in t.i. superračunalniki. Spoznavanje programskega modela MapReduce.
• Podatkovno vodeno paralelno računanje.
• Transakcije: lastnosti transakcij, metode zaklepanja, porazdeljene transakcije, smrtni objem.
Metode poučevanja in učenja
• Predavanja: pri predavanjih študentje spoznajo teoretične vsebine predmeta. Predavanja se izvajajo kot klasična predavanja v frontalni obliki z diskusijo ob primerih uporabe konceptov paralelnega in porazdeljenega programiranja.
• Seminarske vaje: pri seminarskih vajah se študentje seznanijo s potekom računalniških vaj.
• Računalniške vaje: pri računalniških vajah študentje uporabljajo usvojeno znanje na konkretnih programskih problemih.
Predvideni študijski rezultati - znanje in razumevanje
Po zaključku tega predmeta bo študent sposoben:
• izkazati znanje in uporabiti porazdeljene računalniške sisteme in paralelne računalniške sisteme,
• izkazati razumevanje paralelnih programov in načrtovati paralelni program,
• identificirati, opisati in analizirati situacije, kjer so potrebne aktivnosti paralelnega in/ali porazdeljenega računanja.
Predvideni študijski rezultati - Prenosljive/ključne spretnosti in drugi atributi
• Spretnosti komuniciranja: ustni zagovor laboratorijskih vaj, pisno izražanje pri pisnem izpitu.
• Uporaba informacijske tehnologije: iskanje informacij na svetovnem spletu in uporaba programskih orodij za potrebe heterogenega procesiranja.
• Reševanje problemov: načrtovanje in implementacija paralelnih programov.
Temeljni literatura in viri
• G. Coulouris, J. Dollimore, T. Kindberg: Distributed Systems: Concepts and Design, Fifth Edition, Addison Wesley Publishing Company, USA, England, 2011.
• A. Grama, A. Gupta, G. Karypis, V. Kumar: Introduction to Parallel Computing: Design and Analysis of Algorithms, Second Edition, Addison Wesley, New York, 2003.
• Anthony Williams: C++ Concurrency in Action, Practical Multithreading, Manning Publications, 2012.
• A. S. Tanenbaum, M. van Steen: Distributed Systems: Principles and Paradigms, Second Edition, Pearson Prentice Hall, Upper Saddle River, NJ, USA, 2006.
• Michael J. Quinn: Parallel programming in C with MPI and OpenMP, McGraw-Hill Education Group, 2003.
• B. Schmidt, J. Gonzalez-Dominguez, C. Hundt in M. Schlarb: Parallel programming: concepts and practice. Morgan Kaufmann, USA, 2017.
Pogoji za vključitev v delo oz. za opravljanje študijskih obveznosti
Kolokvija se lahko nadomestita s pinim izpitom v deležu 50 %.
Podrobnosti o izvedbi in ocenjevanju Pisni izpit se lahko nadomesti s kolokviji v enakem deležu 50 %.