Cvičení předmětu MI-PAR P. Tvrdík, I. Šimeček, M. Šoch
|
|
- Šimon Šimek
- před 6 lety
- Počet zobrazení:
Transkript
1 Cvičení předmětu MI-PAR P. Tvrdík, I. Šimeček, M. Šoch Katedra počítačových systémů FIT České vysoké učení technické v Praze 2011 MI-PAR, ZS2011/12, Cv.1-6 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti
2 1 of :10 Jak na sekvenční část Úlohy obecně vedou na prohledávání stavového prostoru do hloubku. Tento postup se nejlépe implementuje pomocí rekurzivního algoritmu. Není nic jednodušího, než napsat rekurzivní funkci, která svým vlastním voláním dokáže kompletně projít stavový prostor a najít požadované řešení. Při volání rekurzivní funkce se vždy všechny požadované proměnné ukládají na zásobník (na systemový zásobník, který obsluhuje operační systém na základě vygenerovaných instrukcí). Toto je z hlediska následné paralelizace zasadní nevýhoda implementace pomocí rekurzivní funkce. Pro úspěšnou paralelní implementaci rekurzivního proledávání musíme zvolit jinou metodu než pomocí rekurzivní funkce. Rekurzivní prohledávání můžeme zapsat pomocí iterativního cyklu (pravděpodobně while) v kombinaci s použitím vlastního zásobníku (tento zasobník naimplementujte sami nebo použijte standardní implementaci z dostupných knihoven, např. STL). Následující slides ukazují příklad implementace prohledávání stavového prostoru jak pomoci rekurzivní fukce, tak i iterativním cyklem. Všimněte si možnosti ořezávání neperspektivních větví. Je-li tento test jednoduchý, nezapomeňte ho také ve své úloze naimplementovat. Paměťová versus časová složitost Je těžké napsat algoritmus, který bude současně časově i paměťově efektivní. Oba dva požadavky jdou často proti sobě. Je potřeba se rozhodnout, kterému parametru při implementaci dáme přednost. Protože fyzická paměť pracovních stanic je omezená a není zrovna velká, bylo by vhodné si při implementaci vašich úloh dávat pozor na paměťove nároky. Paměťová složitost se nejvíce projeví při implementaci zásobníku. Ne ale tím jak zvolit samotnou reprezentaci zásobníku - statické pole, dynamicky alokované struktury - ale paměťová složitost je daná tím, co a v jakém množství budeme do zásobníku ukládat. Množství a velikost položek určí z velké části celkovou paměťovou složitost vaší implementace. Implementace zásobníku Zásobník lze implementovat několika různými způsoby. Je třeba si uvědomit, že prohledávaný stavový prostor je velký a tudíž paměťové nároky na implmentaci zásobníku mohou být velké. Tomu je třeba implementaci zásobníku uzpůsobit, aby fyzická paměť pracovních stanic vůbec pro výpočet stačila. Podívejme se na tento problém blíže. Pro demostraci použijme problém Magického čtverce pro n=3 (stejně jako u diskuze o nevhodnosti rekurze). - Při expanzi do zásobníku vložíte vždy celá pole, která odpovídají celým konfiguracím rozpracovaného magického čtverce. Nebo-li pro první vkládané číslo i=9 vložíte do vrchního patra zásobníku 9 kopií pole 3 3 s různě rozmístěnými devítkami. Z hlediska paměťového vložíme na zásobník 9*3*3=81 prvků. Budeme-li předpokládat že jeden prvek je integer o 4 bytech, vložíme do zásobníku tedy 324 bytů. 1. Při expanzi do zásobníku vložíte vždy pouze indexy, na které pozice dané číslo umísťujete. Pole s čísly máte pouze jedno globální a v připadě potřeby pracujete vždy pouze s ním, nebo-li při expanzi na danou pozici vložíte požadované číslo a při návratu z dané pozice číslo vyjmete a pozici v globálním poli uvolníte. Za předpokladu, že index budeme reprezentovat dvojicí čísel (x a y), tak z hlediska paměťového vložíme na zásobník 9*2=18 prvků. Budeme-li předpokládat že jeden prvek je integer o 4 bytech, vložíme do zásobníku tedy 72 bytů. Je evidentní, že z uvedených metod je výhodnější a k paměti šetrnější metoda 2). Vždy se snažte mít jedno globální pole, které bude reprezentovat hrací plán, graf či jinou strukturu, která definuje váš problém, a do zásobníku ukládejte minimum informací, z kterých budete vždy schopni zrestaurovat změny v globálním poli. Volbu, zda implementaci provedete staticky (pole) či dynamicky, zvolte na základě odhadu velikosti zásobníku. Jak na paralelní část
3 2 of :10 Při paralelním řešení je stejná aplikace (míněno přeložený binární soubor) spuštěna na více pracovních stanicích. Procesy mezi sebou nesdílejí žádná data - neexistuje sdílená paměť. Jediné, co mají procesy společné, je komunikační síť, která stanice spojuje, a procesy ji mohou využívat pro výměnu dat. Jedná se tedy o model paralelního počítače s distribuovanou pamětí. Při realizaci paralelní implementace se vychází ze sekvenčního řešení. Z globálního pohledu je potřeba do implementace přidat: Podporu výměny dat po síti. V okamžiku, kdy procesu dojde lokální výpočet, umět požádat o další práci (nebo-li získat kus zásobníku jiného procesu s neprojitými stavy). Možnost dělení zásobníku. Rozdělený zásobník odeslat jinému procesu. Přijatou část zásobníku umět zrestaurovat a odstarovat z ní výpočet. Detekovat ukončení výpočtu (nebo-li žádný proces již neprovádí výpočet). Vrátit výsledek uživateli. Podpora výměny dat je zajištěna použitim knihovny MPI [ Při dělení zásobníku se musíte vypořádat s problémem tzv. serializace. Data zásobniku jsou nejspíše heterogenní datové struktury, které pro předávání práce budete muset posílat pomocí MPI zpráv po síti. MPI v zásadě podporuje streamy homogenních dat. Jedna z možností, jak data po síti poslat, je vše přetypovat na typ byte (v jazyce C se jedná vlastně o typ char - MPI_CHAR) a takto natypovaná data ulozit do zprávy a tu odeslat. Po příjmu je samozřejmě potřeba provést zpětné přetypování na správné typy. Druhou možností je s daty pracovat v jejich původnim tvaru a pomocí funkci MPI_Pack (s použitím typu MPI_PACKED) data do zprávy zapakovat položku po položce. Na straně příjmu je potřeba data zase rozpakovat pomocí funkce MPI_Unpack - přesně v tom samém pořadí v jakém byla data poslána. Implementace obsluhy přijímání a odesílání zpráv vede v podstatě na realizaci jednoduchého stavového automatu. Stavy, kterými aplikace prochází, můžeme řídit pomocí tzv. značky (tagu), který funkce MPI_Send dovoluje k jednotlivým zprávám přiřazovat. Na straně příjmu je vhodné použít neblokující MPI_Iprobe, který testuje příchod zprávy. Následně, když je zpráva dostupná, volat blokující MPI_Recv pro samotný příjem dat. Nevolejte MPI_Iprobe během každé expanze, cena této operace je řádově vyšší než cena expanze. Je vhodné si definovat konstantu, která bude říkat jak často se MPI_Iprobe bude volat. Jako výchozí hodnotu zvolte 100. Následně je možné experimentálně najít její optimální hodnotu. Vysledný zdrojový kód může mít schematicky následující podobu: #define CHECK_MSG_AMOUNT 100 #define MSG_WORK_REQUEST 1000 #define MSG_WORK_SENT 1001 #define MSG_WORK_NOWORK 1002 #define MSG_TOKEN 1003 #define MSG_FINISH while zasobnik_neni_prazdny() citac++; if ((citac % CHECK_MSG_AMOUNT)==0) MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, &status); if (flag) //prisla zprava, je treba ji obslouzit //v promenne status je tag (status.mpi_tag), cislo odesilatele (status.mpi_source) //a pripadne cislo chyby (status.mpi_error) swith (status.mpi_tag) case MSG_WORK_REQUEST : // zadost o praci, prijmout a dopovedet // zaslat rozdeleny zasobnik a nebo odmitnuti MSG_WORK_NOWORK case MSG_WORK_SENT : // prisel rozdeleny zasobnik, prijmout // deserializovat a spustit vypocet case MSG_WORK_NOWORK : // odmitnuti zadosti o praci // zkusit jiny proces // a nebo se prepnout do pasivniho stavu a cekat na token
4 3 of :10 break case MSG_TOKEN : //ukoncovaci token, prijmout a nasledne preposlat // - bily nebo cerny v zavislosti na stavu procesu case MSG_FINISH : //konec vypoctu - proces 0 pomoci tokenu zjistil, ze jiz nikdo nema praci //a rozeslal zpravu ukoncujici vypocet //mam-li reseni, odeslu procesu 0 //nasledne ukoncim spoji cinnost //jestlize se meri cas, nezapomen zavolat koncovou barieru MPI_Barrier (MPI_COMM_WORLD) MPI_Finalize(); exit (0); default : chyba("neznamy typ zpravy"); expanduj_dalsi_stavy (); Uvedený zdrojový kód je pouze pomůckou jak při implementaci postupovat. Je samozřejme možné použít i jiné konstrukce a obraty, ale ve vetší či menší míře se uvedenému příkladu budete blížit. MPI samo o sobě nevyrobí logiku aplikace (míněno onen stavový automat či komunikační protokol). Tu právě musíte navrhnout vy. MPI vám ale usnadní přenos dat po síti a oprostí vás od problému s přímým použitím protokolu TCP/IP. Předpokládejte, že komunikační síť počítače STAR a MPI jsou bezchybné entity, data a zprávy se neztrácejí. Nebo-li nezabývejte se error handlingem a zotavením z chyb způsobených špatným přenosem zpráv. V 99% takovéto chyby nezažijete. Většina chyb je způsobena na straně vaší aplikace - většinou se jedná o nepovolený přístup do paměti (pointer je NULL, hodnota pointeru by přenesena pomocí MPI z jiného výpočetního uzlu, pointer není naalokovany, pointer odkazuje na již uvolněnou paměť, apod.). Start výpočtu Nepatrně atypický okamžik nastává při startu výpočtu. MPI spustí požadovaný počet procesů, které budou úlohu řešit. V tu chvíli nikdo nemá práci a ani vstupní data. Jeden proces, např. proces s číslem 0, bude zopovědný za start výpočtu. Načte vstupní data a rozešle je ostatním procesům. Následně začne standardním sekvenčním algoritmem úlohu zpracovávat prohledáváním do hloubky. V okamžiku, kdy má na zásobníku alespoň p volných stavů, tj. stavů určených pro budoucí zpracování, provede rozdělení svého zásobníku a každému procesu zašle jeden volný stav a jeden si nechá pro sebe. V tomto okamžikyu má každý proces jeden stav, který představuje různě velký podstrom stavového prostoru, který má zpracovat. Všechny procesy jsou v tuto chvíli již rovnocené a výpočet běží na všech procesech. MPI (Message Passing Interface) Knihovna MPI, kterou používáme pro implementaci paralelního řešení, Vám zjednoduší práci s posilanim dat mezi procesy. Proč je toto nutné? Je to z toho důvodu, že pracujete na počítači s distribuovanou pamětí. Počítač STAR se skládá ze samostatných PCček (třebaže jsou v blade provedení), které jsou propojeny komunikační sítí. Vaše aplikace, přesněji řečeno procesy, běží na různých výpočetních jádrech, které mezi sebou sdílejí pouze komunikační síť. Jediná možnost, jak si vyměňovat data, je pomocí této sítě (pokud tedy pomineme výměnu dat přes file systém). K tomu by šlo samozřejmě využít přímo rozhraní TCP/IP, ale to by bylo zbytečně složité. Logická nadstavba nad tím je právě knihovna MPI. Samotná knihovna je pouze průmyslový standard, nebo-li soupis prototypů více než 100 funkcí. Každý výrobce specifického paralelního HW si může knihovnu MPI podle této specifikace sám naimplementovat. Jak již bylo zmíňeno, knihovna MPI obsahuje velké množství funkcí. Ve Vaší semestralní úloze můžete použít libovolné funkce, které MPI nabízí a budete je potřebovat. Abyste nemuseli složitě potřebné funkce hledat, následující výčet obsahuje minimum z MPI, které budete potřebova: MPI_Init MPI_Finalize MPI_Comm_rank MPI_Comm_size MPI_Send MPI_Recv MPI_Iprobe
5 4 of :10 Více o programování pod MPI nalezenete zde [ Podpora měření času v MPI Knihovna MPI obsahuje funkci MPI_Wtime, která vrací časové razítko. Získam-li více hodnot, vrácených funkcí MPI_Wtime, tak jejich odečtením získám čas běhu aplikace mezi těmito razítky. Co měřit Duležité je také vědět co měřit a ne jenom jak měřit. Většina aplikací funguje na principu master/slave. Master na začátku výpočtu načítá a distribuuje data, nad kterými se bude výpočet provádět. Na konci výpočtu dochází opět k zasílání již vyhodnocených dat od slavu smerem k masterovi. Tento čas (načítání, rozesílání a shromažďování dat) je potřeba také měřit - i když nejvíce zatěžuje celý systém (jak MPI tak lokální síť), tak je součástí výpočtu. Třebaže celý výpočet je asynchroní, je vhodné všechny procesy zesynchronizovat právě před samotným začátkem výpočtu (samotný výpočet však NESYNCHRONIZOVAT). Uveďme jednoduchý příklad: /*** master ***/ main () double t1, t2; MPI_Barrier (); /* cekam na spusteni vsech procesu */ t1=mpi_wtime (); /* pocatecni cas */ MPI_Send (); /* rozesilam data */ /*... vlastni vypocet... */ MPI_Recv (); /* prijimam data zpet */ MPI_Barrier (); /* cekam na dokonceni vypoctu */ t2=mpi_wtime(); /* koncovy cas */ printf ("Spotrebovany cas je %f.\n",t2-t1); MPI_Finalize (); return (0); /*** slave ***/ main () MPI_Barrier (); /* data jsem dostal */ MPI_Recv (); /* prijimam data od mastera */ /*... vlastni vypocet... */ MPI_Send (); /* posilama data zpet masterovi */ MPI_Barrier (); /* vypocet hotov */ MPI_Finalize (); return (0); /mnt/www/courses/mi-par/data/pages/labs/poznamky_k_implementaci.txt Poslední úprava: 2010/09/19 14:47 autor: xsimecek
Ústav technické matematiky FS ( Ústav technické matematiky FS ) / 35
Úvod do paralelního programování 2 MPI Jakub Šístek Ústav technické matematiky FS 9.1.2007 ( Ústav technické matematiky FS ) 9.1.2007 1 / 35 Osnova 1 Opakování 2 Představení Message Passing Interface (MPI)
Více4. Rekurze. BI-EP1 Efektivní programování Martin Kačer
4. Rekurze BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
VíceRekurzivní algoritmy
Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS
VíceStruktura programu v době běhu
Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů
VíceProgramování založené na posílání zpráv
Programování založené na posílání zpráv Standard MPI Standard pro posílání zpráv - MPI = Message Passing Interface Dostupné implementace OpenMPI - http://www.open-mpi.org/ LAM-MPI - http://www.lam-mpi.org/
VíceDynamické programování
Dynamické programování prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)
VíceVyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
VíceZpráva o průběhu přijímacího řízení na vysokých školách dle Vyhlášky MŠMT č. 343/2002 a její změně 276/2004 Sb.
Zpráva o průběhu přijímacího řízení na vysokých školách dle Vyhlášky MŠMT č. 343/2002 a její změně 276/2004 Sb. 1. Informace o přijímacích zkouškách Studijní program: Informatika navazující magisterský
VíceČasová a prostorová složitost algoritmů
.. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová
Víceint ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N
Struktura (union) - struktura a union jsou složené typy, které "v sobě" mohou obsahovat více proměnných - struktura obsahuje v každém okamžiku všechny své proměnné, union obsahuje (=je "aktivní") pouze
VícePřednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012
Přednáška Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského
VíceVyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky
VíceFunkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr
Funkce pokročilé možnosti Úvod do programování 2 Tomáš Kühr Funkce co už víme u Nebo alespoň máme vědět... J u Co je to funkce? u Co jsou to parametry funkce? u Co je to deklarace a definice funkce? K
VícePrincip funkce počítače
Princip funkce počítače Princip funkce počítače prvotní úlohou počítačů bylo zrychlit provádění matematických výpočtů první počítače kopírovaly obvyklý postup manuálního provádění výpočtů pokyny pro zpracování
VíceAlgoritmus pro hledání nejkratší cesty orientovaným grafem
1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval
VíceSpojová implementace lineárních datových struktur
Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB
VíceProgramování v jazyce C a C++
Programování v jazyce C a C++ Richter 1 Petyovský 2 1. března 2015 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno 2 Ing. Petyovský Petr, UAMT FEKT VUT Brno C++ Stručná charakteristika Nesdíĺı normu
VícePřednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012
Přednáška Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského
VícePřednáška 3. Rekurze 1
Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady
VíceŘešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C
Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat
VíceDatové struktury 2: Rozptylovací tabulky
Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy
VícePokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
VíceImplementace LL(1) překladů
Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku
VícePole a Funkce. Úvod do programování 1 Tomáš Kühr
Pole a Funkce Úvod do programování 1 Tomáš Kühr (Jednorozměrné) pole u Datová struktura u Lineární u Homogenní = prvky stejného datového typu u Statická = předem určený počet prvků u Pole umožňuje pohodlně
VíceProhledávání do šířky = algoritmus vlny
Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé
VíceMartin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016
ZPRO cvičení 8 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague December 7, 2016 Outline I 1 Outline 2 Dynamické alokování paměti 3 Dynamická alokace
VíceZákladní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní
VíceDynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
VíceDynamické datové struktury IV.
Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra
Více1 Definice problému a popis sekvenčního algoritmu
Semestrální projekt X36PAR 2008/2009: Paralelní algoritmus pro řešení problému Marek Handl. ročník, obor výpočetní technika K336 FEL ČVUT, Karlovo nám. 13, 121 3 Praha 2 May 17, 2009 1 Definice problému
VíceProcesy a vlákna (Processes and Threads)
ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna (Processes and Threads) Správa procesů a vláken České vysoké učení technické Fakulta elektrotechnická 2012 Použitá literatura [1] Stallings, W.: Operating
VíceNP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze
NP-ÚPLNÉ PROBLÉMY Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 13 Evropský sociální fond Praha & EU: Investujeme do
VíceSEMESTRÁLNÍ PROJEKT Y38PRO
SEMESTRÁLNÍ PROJEKT Y38PRO Závěrečná zpráva Jiří Pomije Cíl projektu Propojení regulátoru s PC a vytvoření knihovny funkcí pro práci s regulátorem TLK43. Regulátor TLK43 je mikroprocesorový regulátor s
VíceÚvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
Více2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
VíceStromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
Více5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
VíceLineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
VíceOperační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit
Jednoduché stránkování Operační systémy Přednáška 8: Správa paměti II Hlavní paměť rozdělená na malé úseky stejné velikosti (např. 4kB) nazývané rámce (frames). Program rozdělen na malé úseky stejné velikosti
VíceVlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.
Trochu teorie Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací. Každá spuštěná aplikace má alespoň jeden proces
VíceCvičení MI-PRC I. Šimeček
Cvičení MI-PRC I. Šimeček xsimecek@fit.cvut.cz Katedra počítačových systémů FIT České vysoké učení technické v Praze Ivan Šimeček, 2011 MI-PRC, LS2010/11, Cv.1-6 Příprava studijního programu Informatika
VíceAlgoritmy výpočetní geometrie
Algoritmy výpočetní geometrie prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)
VíceTest prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem
Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel
VíceOPS Paralelní systémy, seznam pojmů, klasifikace
Moorův zákon (polovina 60. let) : Výpočetní výkon a počet tranzistorů na jeden CPU chip integrovaného obvodu mikroprocesoru se každý jeden až dva roky zdvojnásobí; cena se zmenší na polovinu. Paralelismus
VíceOperační systémy. Cvičení 4: Programování v C pod Unixem
Operační systémy Cvičení 4: Programování v C pod Unixem 1 Obsah cvičení Řídící struktury Funkce Dynamická alokace paměti Ladění programu Kde najít další informace Poznámka: uvedené příklady jsou dostupné
VíceMartin Lísal. Úvod do MPI
Martin Lísal září 2003 PARALELNÍ POČÍTÁNÍ Úvod do MPI 1 1 Co je to paralelní počítání? Paralelní počítání je počítání na paralelních počítačích či jinak řečeno využití více než jednoho procesoru při výpočtu
VíceParalení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty
Paralení programování pro vícejádrové stroje s použitím OpenMP B4B36PDV Paralelní a distribuované výpočty Minulé cvičení: Vlákna a jejich synchronizace v C++ 11... 1 Minulé cvičení: Vlákna a jejich synchronizace
VíceVYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY
Jméno a příjmení: Školní rok: Třída: VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, 407 47 Varnsdorf 2007/2008 VI2 PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY Petr VOPALECKÝ Číslo úlohy: Počet
VíceVíce o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
VíceSystém adresace paměti
Systém adresace paměti Základní pojmy Adresa fyzická - adresa, která je přenesena na adresní sběrnici a fyzicky adresuje hlavní paměť logická - adresa, kterou má k dispozici proces k adresaci přiděleného
VíceZákladní datové struktury
Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013
VíceTÉMATICKÝ OKRUH Softwarové inženýrství
TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího
VíceAlgoritmizace a programování
Algoritmizace a programování Strukturované proměnné Struktura, union Jazyk C České vysoké učení technické Fakulta elektrotechnická A8B14ADP Jazyk C - Strukturované proměnné Ver.1.10 J. Zděnek 20151 Struktura
VíceKolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
Více12. Globální metody MI-PAA
Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI
VíceAlgoritmy a datové struktury
Algoritmy a datové struktury 1 / 34 Obsah přednášky Základní řídící struktury posloupnost příkazů podmínka cyklus s podmínkou na začátku cyklus s podmínkou na konci cyklus s pevným počtem opakování Jednoduchá
VíceVYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ DATABÁZOVÉ SYSTÉMY ARCHITEKTURA DATABÁZOVÝCH SYSTÉMŮ. Ing. Lukáš OTTE, Ph.D.
VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ DATABÁZOVÉ SYSTÉMY ARCHITEKTURA DATABÁZOVÝCH SYSTÉMŮ Ing. Lukáš OTTE, Ph.D. Ostrava 2013 Tento studijní materiál vznikl za finanční podpory
VíceVlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty
Vlákna a přístup ke sdílené paměti B4B36PDV Paralelní a distribuované výpočty Minulé cvičení: Paralelizace nám může pomoct... 1 Minulé cvičení: Paralelizace nám může pomoct... B4B36PDV: Ale ne všechny
VíceZáklady programování (IZP)
Základy programování (IZP) Čtvrté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 4.
VíceRekurze. Jan Hnilica Počítačové modelování 12
Rekurze Jan Hnilica Počítačové modelování 12 1 Rekurzivní charakter úlohy Výpočet faktoriálu faktoriál : n! = n (n - 1) (n - 2)... 2 1 (0! je definován jako 1) můžeme si všimnout, že výpočet n! obsahuje
VíceAlgoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu
VíceČtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:
Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury
VíceTento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.
13 Rozhraní, výjimky Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny
VíceStromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy
Stromy úvod Stromy Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Neorientovaný strom Orientovaný strom Kořenový orientovaný
VíceZákladní komunikační operace
Základní komunikační operace Úvod Operace send a recieve Blokující a neblokující posílání zpráv Blokující posílání zpráv Neblokující posílání zpráv One-to-all broadcast/all-to-one reduction All-to-all
VíceFunkce, intuitivní chápání složitosti
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Funkce, intuitivní
VíceKnihovna EpsnetLib TXV 003 73.01 první vydání září 2012 změny vyhrazeny
Knihovna EpsnetLib TXV 003 73.01 první vydání září 2012 změny vyhrazeny 1 TXV 003 73.01 Historie změn Datum Vydání Popis změn Září 2012 1 První vydání, popis odpovídá EpsnetLib_v11 OBSAH 1 Úvod...3 2 Datové
Vícepřetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
VíceSemestrální práce z KIV/PC. Kolja Matuševský (A14B0310P)
Semestrální práce z KIV/PC Řešení kolizí frekvencí sítě vysílačů Kolja Matuševský (A14B0310P) mkolja@students.zcu.cz 10. ledna 2016 Obsah 1 Zadání 2 2 Analýza úlohy 3 2.1 Vytvoření grafu..........................
Vícejava remote method invocation Kateřina Fricková, Matouš Jandek
java remote method invocation Kateřina Fricková, Matouš Jandek Distribuovaný systém počítačový systém, ve kterém jsou jednotlivé komponenty propojeny počítačovou síťí komponenty systému sdílí cíl, kterého
VíceALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
VíceIUJCE 07/08 Přednáška č. 6
Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak
VíceBinární soubory (datové, typované)
Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i
VíceZáklady programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP
Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................
VíceCvičení MI-PAP I. Šimeček, M. Skrbek, J. Trdlička
Cvičení MI-PAP I. Šimeček, M. Skrbek, J. Trdlička xsimecek@fit.cvut.cz Katedra počítačových systémů FIT České vysoké učení technické v Praze Ivan Šimeček, 2011 MI-PAP, LS2010/11, Cvičení 1-6 Příprava studijního
VíceDistribuované systémy a výpočty
Distribuované systémy a výpočty 9 Jan Janeček Czech Technical University in Prague c Jan Janeček, 2011 MI-DSV, SS 2011/12 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Jan Janeček
VíceProgramování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole
Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné
VíceJazyk C práce se soubory. Jan Hnilica Počítačové modelování 16
Jazyk C práce se soubory 1 Soubory Použití souborů pro vstup většího množství dat do programu (uživatel nezadává z klávesnice ručně tisíce údajů...) pro uložení většího množství výsledků, např. k pozdějšímu
VíceMartin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016
ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce
VíceDynamické datové struktury III.
Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované
VíceVyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky
Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové
VíceAlgoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39
Algoritmy Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna 2018 1/ 39 Algoritmy Příklad: Popis algoritmu pomocí pseudokódu: Algoritmus 1: Algoritmus pro nalezení největšího prvku v poli 1 Find-Max(A,n):
Více8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním
VíceRekurze. Pavel Töpfer, 2017 Programování 1-8 1
Rekurze V programování ve dvou hladinách: - rekurzivní algoritmus (řešení úlohy je definováno pomocí řešení podúloh stejného charakteru) - rekurzivní volání procedury nebo funkce (volá sama sebe přímo
VíceÚvod do MPI. Úvod do MPI Operace send a recieve Blokující a neblokující posílání zpráv Blokující posílání zpráv Neblokující posílání zpráv
Úvod do MPI Úvod do MPI Operace send a recieve Blokující a neblokující posílání zpráv Blokující posílání zpráv Neblokující posílání zpráv Komunikační operace All-to-all broadcast/all-to-all reduction All-reduce
VíceSimulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické
VícePříklad aplikace Klient/Server s Boss/Worker modelem (informativní)
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2
VíceLineární datové struktury
Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Lineární datové
VíceAbstraktní třídy, polymorfní struktury
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní třídy, polymorfní struktury BI-PA2, 2011, Přednáška 9 1/32 Abstraktní třídy, polymorfní struktury Ing. Josef Vogel, CSc Katedra softwarového inženýrství
VíceTECHNICKÁ UNIVERZITA V LIBERCI
TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií Využití SoftPLC Tecomat pro řízení virtuálních Učební text Miloš Hernych Liberec 2011 Materiál vznikl v rámci projektu
VíceNMIN102 Programování /2 Z, Zk
NMIN102 Programování 2 --- 2/2 Z, Zk Pavel Töpfer Katedra softwaru a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer Pavel
VíceINFORMAČNÍ SYSTÉM VIDIUM A VYUŽITÍ MODERNÍCH TECHNOLOGIÍ
INFORMAČNÍ SYSTÉM VIDIUM A VYUŽITÍ MODERNÍCH TECHNOLOGIÍ Michal Brožek, Dominik Svěch, Jaroslav Štefaník MEDIUM SOFT a.s., Cihelní 14, 702 00 Ostrava, ČR Abstrakt Neustále rostoucí význam sběru dat, možnost
VíceOd CGI k FastCGI. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko.
Od CGI k FastCGI Ondřej Caletka 5. října 2013 Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko. Ondřej Caletka (CESNET, z.s.p.o.) Od CGI k FastCGI 5. října 2013 1 / 18 Obsah 1 Common
VíceStandardní algoritmy vyhledávací.
Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární
VíceCílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.
Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod
VícePoužívejte jen ty konstrukty jazyka C/C++, které jsme doposud probírali (nepoužívejte STL apod.)
Základy programování v C++ zadání 1.seminární úlohy Zuzana Petříčková 30. října 2018 1 / 9 se skládá ze dvou podúloh: 1 2 Eratosthenovo síto Obecně: Používejte jen ty konstrukty jazyka C/C++, které jsme
VíceAlgoritmy a datové struktury
Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu
VíceUnity a Objekty (NMIN102) RNDr. Michal Žemlička, Ph.D.
Unity a Objekty Programování 2 (NMIN102) RNDr. Michal Žemlička, Ph.D. Větší programy Časté problémy: Ve více programech by se nám hodilo využít stejné řešení nějakého podproblému dalo by se vyřešit překopírováním
VíceKonstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
Více