====== Harmonogram cvičení ====== ^ ^Datum ^Téma cvičení ^ | 1. | 6. 10. Čtvrtek | Úvod - požadavky, bodové hodnocení, semestrální projekty. | | :::| | Programování pomocí MMX a SSE instrukcí | | 2. | 13. 10. Čtvrtek | Vícevláknové programování pomocí pthreads. | |:::| | Vlákna - řešení jednoduché úlohy. | |:::| | Zadání domácí úlohy I - vlákna. | | 3. | 20. 10. Čtvrtek | CUDA - překlad programu, ladění, jednoduché příklady. | |:::| | Výběr zadání samostatného semestrálního projektu. | | 4. | 27. 10. Čtvrtek | CUDA - řešení jednoduchých příkladů. | | 5. | 3. 11. Čtvrtek | CUDA - řešení jednoduché úlohy I (doplňování kódu do předpřipravené kostry aplikace). | |:::| | Odevzdání domácí úlohy I. | |:::| | Zadání domácí úlohy II - CUDA. | | 6. | 10. 11. Čtvrtek | CUDA - řešení jednoduché úlohy II (doplňování kódu do předpřipravené kostry aplikace). | | 7. | 17. 11. Čtvrtek | Státní svátek | | 8. | 24. 11. Čtvrtek| Samostatná práce na projektu - konzultace I. | |:::| | Průběžná kontrola první části projektu. | |:::| | Odevzdání domácí úlohy II. | |:::| | Zadání domácí úlohy III - CUDA. | | 9. | 1. 12. Čtvrtek | OpenCL - překlad programu, řešení jednoduché úlohy. | | 10. | 8. 12. Čtvrtek | OpenCL - řešení jednoduché úlohy III (doplňování kódu do předpřipravené kostry aplikace). | | 11. | 15. 12. Čtvrtek | Samostatná práce na projektu - konzultace II. | |:::| | Odevzdání domácí úlohy III. | | 12. | 22. 12. Čtvrtek | Samostatná práce na projektu - konzultace II. | | 13. | 5. 1. Čtvrtek | Odezvdáváni projektu + dokumentace. |:::| | Prezentace semestrálních projektů I. | | 14. | 12. 11. Čtvrtek | Zápočty. | |:::| | Prezentace semestrálních projektů II. | ====== Organizace cvičení ====== Účast na cvičeních je povinná. Cvičení jsou různého typu: * Výkladová cvičení (1. – 4. a 9. týden), kde se studenti prostřednictvím příkladů seznamují s problematikou, kterou budou řešit na následujících cvičeních a zejména v rámci semestrálního projektu. * Programovací cvičení. Po seznámení s problémem řeší studenti jednoduché úlohy na počítači. Za úspěšně vyřešené úlohy dostávají body (až 12 bodů za semestr). * Konzultační cvičení během kterých jsou studenti povinni konzultovat své projekty s cvičícím. * Blok Konzultace I (8.týden) - 1x povinné konzultování návrhu sekvečního řešení na CPU (využívající vláken a SSE instrukcí). * Blok Konzultace II (11. – 12.týden) - 1x povinné konzultování návrhu paralelního řešení (výběr částí pro paralelizaci, způsob paralelizace, návrh implementace v CUDA). * Kontrolní cvičení (8. a 13.týden), při nichž se odevzdávají a předvádí jednotlivé části projektu: * První kontrolní cvičení je v 8. týdnu, kdy studenti předvedou hotovou implementaci projektu na CPU. * Odevzdání finální verze projektu (implementace CPU i GPU) proběhne v 13. týdnu. * Nesplnění podmínek každé z kontrol má za následek zisk nižšího počtu bodů. * Podmínkou k zápočtu je splnění povinných požadavků. * Ve 13. týdnu a na zápočtovém cvičení v 14. týdnu všichni studenti prezentují své semestrální projekty (kratičká prezentace na 5-7 minut). Teprve po předvedení práce dostane student zápočet (splnil-li všechny požadavky). * Domácí úlohy. Během semestru jsou studentům zadány celkem 3 úlohy, které budou řešit samostaně doma. Za úspěšně vyřešené a včas odevzdané úlohy dostávají body (až 18 bodů za semestr). Veškeré získané body se započítávají při výsledné klasifikaci. ====== Podrobné požadavky k vypracování projektu ====== Každý student/studentka dostane na třetím/čtvrtém cvičení přidělené téma projektu, na kterém bude po celý semestr pracovat samostatně. Studenti si mohou téma projektu navhrnout sami (podléhá schválení cvičícímu) nebo jim bude nějaké přiděleno cvičícím (seznam úloh). Každý projekt lze rozdělit zhruba do pěti částí (implementace na CPU, implementace na GPU, testování a měření, dokumentace, prezentace), podrobnější požadavky najdete v tabulce uvedené níže. Úspěšné vypracování a včasné odevzdání projektu (včetně webové stránky, dokumentace a prezentace) je nutnou podmínkou pro získání zápočtu. Za semestrální projekt může cvičící přidělit až 70 bodů. Konkrétní požadavky a jejich bodové hodnocení najdete v níže uvedené tabulce. Předpokládá se, že studenti pracují na projektu průběžně během semestru. Projekt se odevzdává po částech, ve dvou kontrolních cvičeních. Za nedodržení termínů odevzdávání jednotlivých částí projektu bude student(ka) penalizován(a) −5 body za každý týden zpoždění. Projekty pište v C/C++, CUDA a OpenGL. Dbejte na kulturu programování, dodržujte klasické konvence C/C++ (tj. rozumné členění programu; rozumně dlouhé procedury; komentáře ve stylu doxygen; vhodná volba jmen proměnných, funkcí a konstant; odsazování kódu; …). Pište konfigurovatelnou aplikaci (GUI nebo textový konfigurační soubor, který bude načítán při spuštění aplikace) a vstupní data načítejte z externích souborů. Inspirujte se projekty, které najdete jinde na internetu, ale nekopírujte cizí kód! Když najdeme stejný kód, nedostanete zápočet a v extrémním případě skončíte před disciplinární komisí FEL (viz. akademická pravidla). Vyžadujeme, abyste vlastnímu kódu rozuměli a byli schopni na vyžádání provádět drobně změny. ^Požadavky / hodnotící kriteria ^Body ^Povinný ^Týden kontroly^ | Projekt - implementace | 40 bodů | | | | Implementace na CPU s případným využitím vláken a SSE instrukcí. | | • | 8. | | Paralelní implementace na GPU s využitím CUDA. | | • | 13. | | Ověření korektnosti řešení. | | • | 13. | | Kvalita implementace (CPU i GPU). | | • |13. | | Funkčnost implementovaného řešení. | | • | 13. | | Vygenerovaná programátorská dokumentace. | | • | 13. | | Testovací sady dat (alespoň 3 různé datové sady). | | • | 13. | | Dokumentace / report | 20 bodů | | 13. | | Popis řešeného problému. | | • | 13. | | Popis efektivního řesení problému na CPU (vlákna, SSE). | |• | 13. | | Návrh a popis paralelního řesení problému na GPU. | | • | 13. | | Popis implementačních detailů (CUDA). | | • |13. | | Návrh a popis provedeného testování. | | • |13. | | Výsledky měření vynesené do grafu a popsané v tabulkách. | |• |13. | | Zhodnocení výsledků a závěr. | | • | 13. | | Vytvoření webové stránky (šablona stránky) | |• |13. | | Prezentace | 10 bodů | |14. | | Příprava prezentace projektu (ppt nebo pdf). | | • | 14. | | Ústní prezentace projektu. | | • | 14. | | Další podmínkou k získání zápočtu je dodržení „rozumného“ stylu psaní programu, tzv. coding style. Nesplnění tohoto požadavku vede k vrácení úlohy!!! | | Čitelnost zdrojových kódů (jednoduchost, členění kódu, vhodné pojmenování funkcí, atd.) | —| • | 13. | | Modularita (rozdělení na více hlavičkových a zdrojových souborů) | — | • | 13. | | Komentáře v angličtině ve stylu doxygen (hlavičky funkcí, parametry funkcí, globální proměnné, struktury, hlavičkové soubory, atd.) | — | • | 13. | ====== Vybavení počítačové učebny ====== | Device | GeForce GTX 750 Ti | |CUDA Capability | 5.0 (Maxwell) | |Total amount of global memory | 2048 MBytes (2147483648 bytes) | |Multiprocessors | 5 | |CUDA Cores per Multiprocessor | 128 | |Total amount of CUDA Cores | 640 CUDA Cores | |GPU Clock rate | 1255 MHz (1.25 GHz) | |Memory Clock rate | 2700 Mhz | |Memory Bus Width | 128-bit | |L2 Cache Size | 2097152 bytes | |Total amount of constant memory | 65536 bytes | |Total amount of shared memory per block | 49152 bytes | |Total number of registers available per block | 65536 | |Warp size | 32 | |Maximum number of threads per multiprocessor | 2048 | |Maximum number of threads per block | 1024 | |Max dimension size of a thread block (x,y,z) | (1024, 1024, 64) | |Max dimension size of a grid size (x,y,z)|(2147483647, 65535, 65535) | |Concurrent copy and kernel execution | Yes with 1 copy engine(s) |