| 
        Vyučující
     | 
    
        
            
                - 
                    Předota Milan, doc. RNDr. Ph.D.
                
 
            
                - 
                    Musil Patrik, Mgr.
                
 
            
         
     | 
    | 
        Obsah předmětu
     | 
    
        Obsah přednášek:  1. Úvod do paralelního počítání. Co je to paralelní počítání? Proč potřebujeme paralelní počítače? Strategie paralelizace. Seznámení s jednoduchým paralelním programem (MPI_Init, MPI_Comm_size, MPI_Comm_rank, MPI_Finalize). 2. - 3. Paralelizace v MPI, základní příkazy (MPI_Bcast, MPI_Reduce, MPI_Allreduce). Paralelizace cyklů různými způsoby. 4. Komunikace polních proměnných (MPI_Scatter, MPI_Gather) 5. Příkazy jazyka C pro práci se soubory, vstup a výstup v paralelních programech, srovnání jednotlivých metod. 6. Časování běhu programu, komunikace vs. výpočetní čas - optimalizace počtu vláken, efektivita. 7. Point to point paralelizace v MPI (MPI_Send, MPI_Recv). 8. Příkazy pro vytvoření a správu MPI paralelního prostředí, spouštění úloh na více počítačích, frontové systémy. 9. Rozdělení paralelních úloh z hlediska jejich spolupráce během výpočtu. Sdílená vs. distribuovaná paměť, MPI vs. OpenMP paralelní prostředí, sdílená vs. soukromá proměnná. 10. Paralelizace v OpenMP, základní příkazy (pragma, paralelizace cyklů, redukce). 11. Paralelizace v OpenMP, pokročilé příkazy (pragma single/master, critical/atomic/ordered, paralelizace sekcí). 12. - 13. Programování na grafických kartách (GPU) v OpenCL, host + kernel, předávání argumentů, možnosti nastavení počtu GPU vláken.  Obsah cvičení sleduje obsah přednášek. Po úvodním nastavení přístupu na paralelní klastr jsou řešeny úlohy pomocí MPI (výpočet součtu čísel a faktoriálu, výpočet určitého integrálu, výpočet energie konfigurace molekul včetně spouštění na více strojích a určování efektivity), následně pomocí OpenMP. Další úlohy procvičují probírané příkazy a funkce. V OpenCL jsou řešeny úlohy s rozměrnými maticemi a výpočet energie. Cílem naučit studenty řešit úlohy od jednoduchých, kde jednotlivá vlákna mohou nezávisle pracovat s daty, až po složitější, jako je paralelizace třídění souboru dat.
         
         
     | 
    | 
        Studijní aktivity a metody výuky
     | 
    
        
        Monologická (výklad, přednáška, instruktáž), Dialogická (diskuze, rozhovor, brainstorming), Práce s textem (učebnicí, knihou), Demonstrace, Laboratorní práce
        
            
                    
                
                    
                    - Účast na výuce
                        - 39 hodin za semestr
                    
 
                
                    
                    - Domácí příprava na výuku
                        - 26 hodin za semestr
                    
 
                
                    
                    - Příprava na zápočet
                        - 23 hodin za semestr
                    
 
                
                    
                    - Příprava na zkoušku
                        - 24 hodin za semestr
                    
 
                
             
        
        
     | 
    
    
        
        
            | 
                Výstupy z učení
             | 
        
        
            
                
                Seznámení se způsoby paralelizace programů, jejich HW a SW implementací pomocí MPI a OpenMP. Stručné seznámení s paralelizací na GPU - grafických kartách. Řešení vzorových praktických úloh, práce v paralelním prostředí.
                 
                Zvládnutí MPI a OpenMP paralelizace, seznámení s principy GPU paralelizace. Schopnost napsat paralelní program a/nebo zparalelizovat sériový program.
                 
                
             | 
        
        
            | 
                Předpoklady
             | 
        
        
            
                
                
                Znalost programování v některém programovacím jazyku (ideálně C, ve kterém probíhá výuka), základy práce v linuxu (na příkazové řádce, možno rychle doplnit).
                
                
                    
                        
                    
                    
                
                
  
             | 
        
        
            | 
                Hodnoticí metody a kritéria
             | 
        
        
            
                
                    
                        Ústní zkouška, Test
                        
                        
                         
                        
                    
                    
                
                 Podmínka získání zápočtu: Vyřešení zápočtové úlohy v závěrečném praktickém testu. Podmínka složení zkoušky: Alespoň 50% znalost látky obsažené ve dvou vylosovaných zkušebních otázkách.
                 
             | 
        
    
    | 
        Doporučená literatura
     | 
    
        
            
                
                - 
                    " RUUD VAN DER PAS, ERIC STOTZER, CHRISTIAN TERBOVEN. Using OpenMP-The Next Step: Affinity, Accelerators, Tasking, and SIMD, MIT Press; 1st edition 2017, ISBN: 978-0262534789. 
                
 
            
                
                - 
                    BARBARA CHAPMAN, GABRIELE JOST, RUUD VAN DER PAS. Using OpenMP: Portable Shared Memory Parallel Programming, The MIT Press, 2007.. 
                
 
            
                
                - 
                    GERASSIMOS BARLAS. Multicore and GPU Programming: An Integrated Approach, Morgan Kaufmann 2014, ISBN: 978-0124171374. 
                
 
            
                
                - 
                    Chandra, R., Dagum, L., Kohr, D., Dor Maydan. Parallel Programming in OpenMP. Morgan Kaufmann, 2000. 
                
 
            
                
                - 
                    MICHAEL J. QUINN. Parallel Programming in C with MPI and OpenMP, McGraw Hill Higher Education, 2003.. 
                
 
            
                
                - 
                    WILLIAM GROPP, EWING LUSK, AND ANTHONY SKJELLUM. Using MPI - 3rd Edition: Portable Parallel Programming with the Message Passing Interface (Scientific and Engineering Computation), The MIT Press, 2014.. 
                
 
            
         
         
         
     |