Parallel FX a paralelní programování na platformě. ET

Rozměr: px
Začít zobrazení ze stránky:

Download "Parallel FX a paralelní programování na platformě. ET"

Transkript

1 Parallel FX a paralelní programování na platformě. ET Aleš Keprt Katedra informatiky, Přírodovědecká fakulta, Univerzita Palackého Tomkova 40, Olomouc Ales.Keprt@upol.cz Abstrakt. Knihovna Parallel FX je oficiálním rozšířením platformy.net zaměřené na paralelní programování využívající vláken a sdílené paměti. Rozšiřuje tak možnosti paralelního programování v tomto objektově orientovaném prostředí o nové prvky na vyšší úrovni abstrakce. Příspěvek stručně představuje možnosti Parallel FX a snaží se je zasadit do kontextu klasických nástrojů paralelního programování s vlákny v prostředí Windows a.net. Paralelní programování je aktuálním tématem zejména díky rozmachu vícejádrových procesorů na běžných počítačích, tento trend bude navíc zcela jistě dále pokračovat. Vícejádrové procesory se však v praxi používají málo, ve výuce se velmi upřednostňují čistě sekvenční/imperativní modely programování a algoritmizace, stejně tak v praxi vidíme, že paralelizmus je stále omezen na jediný nástroj: rozdělení programu na větší celky a práci s vlákny. Parallel FX je nový framework od Microsoftu, který nabízí několik způsobů paralelizace programů. Jde o metody teoreticky známé již z minulosti, v praxi však nebyly nikdy v takové míře nasazeny - Parallel FX je rozšířením platformy.net, takže největší tíha paralelního programování se zde (konečně) přenáší z aplikací na systém. Příspěvek představí technologii Parallel FX a její výpočetní modely. Dále bude diskutovat, nakolik bude toto teoreticky zdařilé dílko Microsoftu také užitečné běžným programátorům v jejich praxi. Klíčová slova: Parallel FX, PLINQ, deklarativní/imperativní paralelizmus 1 Úvod Paralelní programování není tématem novým, v posledních letech je však tématem stále více a více důležitým. Důvodem je především aktuální trend vývoje jednotek CPU, kde vše směřuje k nasazování více a více jader do serverových i běžných stolních počítačů či notebooků. O něco pozadu za vývojem hardwaru je situace na poli softwaru většina programů se vůbec nepokouší výkon vícejádrových procesorů využívat a ty, které jsou světlými výjimkami, jsou výsledkem složité práce programátorů s vlákny, protože metody a technologie pro pohodlné paralelní programování jsou zatím stále jen v oblasti vědeckých pokusů, alternativních programovacích jazyků či výukových nástrojů. Pozitivní změnu současné situace by mohla přinést nová knihovna pro paralelní programování Parallel FX v prostředí.net, kterou vyvíjí a uvolnila k testování společnost Microsoft. Tento příspěvek představuje hlavní rysy knihovny Parallel FX v současné verzi CTP June 2008 a umisťuje ji do kontextu dosavadních nástrojů pro paralelní

2 programování na platformě.net a ve Windows. Všechny příklady jsou uváděny v jazyce C# a byly odzkoušeny na čtyřjádrovém procesoru Intel Core 2 Quad. 2 Klasické nástroje paralelního programování v. ETu.NET Framework 3.5 podporuje programování s vlákny a poskytuje také bohatou sadu programových nástrojů na vláknech založenou. Jejich stručné představení nám umožní lépe pochopit kontext, do kterého zapadá knihovna Parallel FX, které se budeme věnovat dále. Podrobnější popis zde jmenovaných prvků lze najít např. v [2], částečně také v [1,5]. 2.1 Procesy, aplikační domény a vlákna.net přebírá funkcionalitu procesů a vláken z operačního systému Windows. Přidává k tomu prvek aplikační doména jakožto jakýsi podproces, který fyzicky existuje v rámci nějakého procesu v systému, ale z hlediska virtuálního stroje.netu jde o samostatnou jednotku. (Díky řízené paměti na sebe aplikační domény nevidí, přestože sdílejí jeden adresový prostor v rámci jednoho procesu, kde spolu žijí.) 2.2 Systémové synchronizační a komunikační prvky Kromě samotných procesů a vláken přebírá.net z operačního systému i jeho synchronizační a komunikační prvky, jmenovitě například princip čekatelných objektů, mutexy, semafory, vláknovou afinitu, signály, časovače a roury. Všechny tyto prvky jsou v.netu implementovány jako objekty v základní knihovně a je možno je jednoduše použít v libovolném programovacím jazyce. (V.NETu nelze používat sdílení paměti mezi procesy mapováním souboru do paměti, neboť v řízeném prostředí neexistuje pojem paměťová adresa.) Ačkoliv se tyto systémové prvky v.netu vyskytují jako objekty, z principu své nízkoúrovňové funkcionality nijak neošetřují to, jestli je programátor používá správně, a proto při jejich použití vzniká řada (lidských) chyb. Dalšími základními prvky převzatými z operačního systému jsou tzv. interlocked neboli blokované operace. Jedná se o sadu velmi jednoduchých operací, které lze s pomocí hardwaru provádět atomicky. Jejich použití je proto výrazně rychlejší, než použití prvků výše jmenovaných (jejichž společnou vlastností je, že využívají jistý typ zámku či zamykání a právě proto jsou relativně pomalé). Poznámka. Blokované operace jsou synchronizační prvky na nejnižším stupni abstrakce, jsou to jednotlivé instrukce procesoru (např. přičtení jedničky, compareand-swap atd.) Systém pomocí těchto operací implementuje všechny složitější prvky (jako např. semafor).

3 2.3 Monitory a signály. ETu Zatímco v čistém Windows se k synchronizaci vláken běžně používají především výše zmíněné mutexy, semafory a signály (a také kritické sekce, které.net na rozdíl od Windows nerozlišuje od mutexů), v objektově orientovaném prostředí.netu se nejvíce využívá jeho objektový synchronizační prvek monitor. Jde o prvek na vyšší úrovni abstrakce, který je oblíbený v objektově orientovaných prostředích pro jeho jednoduchý způsob použití a poměrně velké možnosti, kdy obvykle poslouží jako elegantní zámek či signál. Další výhodou objektových monitorů je, že způsob, jakým se v kódu používají, prakticky vylučuje různé typy chyb, kterých se programátoři mohou dopustit při používání klasických neobjektových konstruktů zmíněných výše. Jazyky C# a Visual Basic mají pro monitory dokonce i zvláštní syntaktickou podporu usnadňující jejich použití (jakoby navíc, protože monitory jakožto objekty samozřejmě lze použít i bez této speciální syntaxe). 2.4 Další nástroje pro asynchronní programování Na závěr této kapitoly si ještě ukažme (alespoň několik nejdůležitějších) nástrojů pro asynchronní programování na vyšší úrovni abstrakce, které.net nabízí. Fond vláken. Každý proces.netu obsahuje tzv. fond vláken (thread pool), který udržuje sadu vláken a poskytuje je pro provádění různých operací na pozadí. Fond vláken je k dispozici jak samotnému systému.netu, tak aplikaci. Výhodou fondu je, že recykluje tatáž vlákna a odpadá tak časově náročné zakládání a ukončování vláken. Vykonání nějaké operace na pozadí je také díky fondu jednodušší nemusíme se starat o objekt vlákna, stačí jednoduše dodat fondu funkci, kterou chceme vykonat (ve formě delegátu). Čtenáři a písaři. Kromě obyčejného zámku nabízí.net i zámek pro čtenáře a písaře umožňující souběh při čtení, ale vyžadující exkluzivitu při zápisu. K dispozici jsou dokonce dvě velmi odlišné implementace, lišící se funkcionalitou i rychlostí. Asynchronní programový model. Systém Windows nabízí možnost asynchronního čtení a zápisu souborů, kdy aplikace dá povel k zahájení operace a pomocí APC je jí potom oznámeno dokončení této operace. Tento způsob práce se soubory nepoužívá vlákna, má proto menší režii a v důsledku je rychlejší než použití vláken. (APC je speciální systémová podpora pro asynchronní volání bez vláken a používá se zde pro oznamování dokončení operace.).net zobecňuje asynchronní práci se soubory na obecný asynchronní programový model (APM) a v základní knihovně proto najdeme různé třídy, které toto podporují (není přitom řečeno, jak je funkcionalita implementována, APM definuje jen vnější rozhraní). APM je tedy vestavěná podpora k provádění déletrvajících operací asynchronně, obvykle (ale ne nutně) pomocí vláken.

4 Asynchronní aktualizace GUI. Okna či obecně prvky grafického uživatelského rozhraní ve Windows musejí být obsluhovány vždy tím vláknem, kterým byly vytvořeny. To samozřejmě komplikuje používání vláken v běžných aplikacích,.net proto nabízí jednoduchou metodu asynchronního volání metod na objektech uživatelského rozhraní. (Vnitřně je implementováno pomocí systémové fronty zpráv.) Background worker. Dalším prvkem sloužícím k usnadnění práce s GUI je background worker zvláštní typ vlákna, které umí komunikovat s oknem. Tato třída umožňuje komunikaci mezi vláknem GUI a vláknem na pozadí pomocí speciálních objektů událostí, které překračují hranice vlákna. (Čili jedno vlákno aktivuje událost, ale signál o události přichází jinému vláknu. Toto přenesení mezi vlákny je přitom zcela transparentní.) 3 Parallel FX Parallel FX, někdy označována také delším názvem Parallel Extensions to the.net Framework, je knihovna pro.net Framework 3.5 přidávající do.netu možnost paralelního programování na ještě vyšší úrovni abstrakce než u konstruktů popsaných v předchozí kapitole. Jelikož jde o řízenou knihovnu, je možno ji použít ve všech programovacích jazycích.netu. Základním zdrojem informací o Parallel FX je přímo jeho oficiální dokumentace [3]. Parallel FX nabízí v rámci jedné knihovny tři různé způsoby paralelizace: Deklarativní paralelizace dat Imperativní paralelizace dat Imperativní paralelizace úloh Ve všech případech pracujeme na vyšší úrovni abstrakce a nestaráme se o vlákna. Na rozdíl od například fondu vláken, kde také můžeme zadávat úlohy k vykonání a nestarat se o jednotlivá vlákna, Parallel FX používá vlastní řízení běhu, kdy se snaží nasazovat tolik vláken, kolik je k dispozici výpočetních uzlů (jader procesoru). 3.1 Deklarativní paralelizace PLI Q Část Parallel FX umožňující deklarativní paralelizaci programu se oficiálně nazývá PLINQ (Parallel Language Integrated Query) a je implementovaná jako rozšíření standardní knihovny LINQ v jmenném prostoru System.Linq. Smyslem a hlavní výhodou deklarativního přístupu k paralelizaci je, že programátor definuje pouze co chce spočítat, a ne jak to chce spočítat. Použití PLINQ je velmi snadné, protože vše je elegantně zakomponováno do standardního LINQ a na první pohled není rozdíl mezi PLINQ a LINQ téměř ani poznat. Nejprve se podívejme na PLINQ z hlediska uživatele. Pomocí rozšiřující metody AsParallel je možno převést každou kolekci typu IEnumerable na kolekci typu IParallelEnumerable připravenou pro zpracování pomocí PLINQ. Potom již můžeme použít standardní techniky LINQ a kód bude proveden paralelně.

5 Pro příklad si uveďme kód, který vyfiltruje z kolekce slov jen ta obsahující písmeno 'a' a převede tato slova na velká písmena. string[] data; var data2 = from d in data.asparallel() where d.contains("a") select d.toupper(); foreach(var d in data2) Console.WriteLine(d); Že se kód provede skutečně paralelně, je možno ověřit přímo na tomto příkladu tím, že výsledné pořadí slov bude jiné než ve zdrojovém poli. Potřebujeme-li však pořadí zachovat, můžeme použít modifikátor AsOrdered. Je to rozšiřující metoda na typu IParallelEnumerable, lze ji tedy vložit kamkoliv, kde chceme pořadí zachovat. Vynucení pořadí tímto způsobem nám pochopitelně snižuje výpočetní výkon, pomocí AsUnordered je možné vynucení pořadí opět zrušit. Dále pak máme k dispozici ještě AsSequential, kterým můžeme převést IParallelEnumerable zpět na IEnumerable a vypnout tak paralelní zpracování. Tyto převodní metody v praxi můžeme podle potřeby kombinovat a optimalizovat tak provádění LINQ dotazů. PLI Q pod pokličkou Funkcionalita PLINQ je implementována jako sada rozšiřujících metod ve třídě System.Linq.ParallelEnumerable, která de facto implementuje paralelní verzi třídy System.Linq.Enumerable z LINQ. Zatímco třída Enumerable implementuje LINQ nad běžnými kolekcemi typu IEnumerable a IEnumerable<T>, třída ParallelEnumerable implementuje LINQ (neboli PLINQ) nad kolekcemi typu IParallelEnumerable či IParallelEnumerable<T>. Pomocná statická třída ParallelQuery implementuje rozšiřující metodu AsParallel, která přijme IEnumerable či IEnumerable<T> a vrací jemu odpovídající IParallelEnumerable či IParallelEnumerable<T>. Stejně tak další výše uvedené rozšiřující metody AsOrdered, AsUnordered a AsSequential jsou implementovány ve třídě ParallelQuery. PLINQ se tedy chová stejně jako LINQ nad objektovými kolekcemi. Pomocí převodních metod v ParallelQuery je možno LINQ a PLINQ libovolně kombinovat. Například vynucení pořadí voláním AsOrdered zpomalí paralelní výpočet, takže jej vložíme jen tam, kde pořadí skutečně nutně potřebujeme, a pak jej opět zrušíme vložením AsUnordered. Ne ve všech situacích je PLINQ vhodný, protože kód který má nějaký vedlejší efekt (tj. kromě vrácení návratové hodnoty dělá i něco bokem) bude zřejmě trpět právě zmíněným nezachováním pořadí. Dále pak kód přistupující ke GUI nemůže používat více vláken, kód pracující se soubory je pravděpodobně rychlostně limitován právě diskovým systémem a PLINQ ho nijak nezrychlí (jen zbytečně zatíží procesor více vlákny) atd. 3.2 Imperativní paralelizace Task Parallel Library Část Parallel FX umožňující imperativní paralelizaci se oficiálně nazývá Task Parallel Library a najdeme ji v jmenných prostorech System.Threading a System.Threading.Tasks.

6 Třída Parallel Třída Parallel poskytuje sadu statických metod For, ForEach a Invoke. Jejich význam je patrný již z názvu, ukažme si jednoduché příklady použití: Parallel.For(0, 100, i => results[i] = Compute(i)); - naplní pole o 100 prvcích výsledky volání funkce Compute s příslušným indexem do pole Parallel.ForEach(data, c => Compute(c)); - volá funkci Compute pro každý prvek kolekce data static void WalkTree<T>(Tree<T> tree, Action<T> func) { if (tree == null) return; Parallel.Invoke( () => WalkTree(tree.Left, func), () => WalkTree(tree.Right, func), () => func(tree.data)); } - funkce pro rekurzivní průchod binárním stromem Parallel.ForEach je v obecném případě méně efektivní než Parallel.For, protože všechna vlákna musejí přistupovat ke společnému enumerátoru. Výjimkou jsou kolekce podporující rozhraní IList<T>, které Parallel.ForEach rozpozná a použije pro ně efektivnější implementaci. Třída Task Třída Parallel interně používá objekty třídy Task, kterou můžeme použít i přímo. Voláním Task.Create(delegát) vytvoříme novou úlohu k asynchronnímu vykonání, jde tedy o podobný princip jako u fondu vláken, na rozdíl od fondu zde však dostaneme k dispozici objekt úlohy, se kterým lze dále pracovat. Například můžeme snadno čekat na dokončení úlohy pomocí metody Wait (funguje stejně jako Join u vláken) nebo jednoduše čekat rovnou na skupinu úloh pomocí WaitAll. Úlohu čekající ve frontě na spuštění lze zrušit voláním Cancel. Běžící úloha se tímto voláním neodstřelí, ale je nastaven příznak IsCancelled a sama úloha jej musí pravidelně testovat, aby zjistila, že bylo Cancel použito. (Toto chování je tedy stejné jako u výše popsané třídy BackgroundWorker.) Důležitou vlastností úlohy typu Task je, že když spouštíme novou úlohu z úlohy, tak systém si pamatuje jejich vztah rodič potomek a výpočet rodičovské úlohy není považován za dokončený, dokud nejsou dokončeny všichni její potomkové. Toto se projeví například při použití Wait když čekáme na dokončení úlohy, tak vždy včetně všech jejích potomků.

7 Třída Future<T> Třída Future<T> je specializací (tj. potomkem) třídy Task. Je to úloha s výslednou (návratovou) hodnotou. Vytvoříme ji stejně jako Task (tj. voláním Create) a potom můžeme pomocí property Value zjistit výslednou hodnotu. Budeme-li Value číst dříve, než skončí vykonání úlohy, pak jde o blokující operaci. Bude-li však hodnota již spočítaná, objekt Future<T> si ji pamatuje a skrze Value rovnou vrací. Příkladem využití může být zjištění počtu uzlů v binárním stromu: int CountNodes(Tree<T> node) { if (node == null) return 0; var left = Future.Create(() => CountNodes(node.Left)); int right = CountNodes(node.Right); return 1 + left.value + right; } Poznámka. Na rozdíl od přímého použití vláken zde každé volání Future.Create nevytváří nové vlákno. Počet vláken řídí manažer úloh Parallel FX a pro dosažení nejlepších výsledků je v takovém algoritmu vhodné od jisté úrovně vnoření přejít na sekvenční rekurzivní funkci, protože úloh v ten okamžik již bude vytvořeno dost a vytváření dalších nových úloh zabere nějaký výpočetní čas, ale přitom na běžném počítači o několika málo výpočetních uzlech výkon už dále nezvýší. ContinueWith Task i Future<T> mají jednu velice zajímavou možnost voláním ContinueWith můžeme určit pokračování, čili co se má vykonat po dokončení dané úlohy. Tato metoda navíc vrací opět objekt typu Task nebo u Future<T> volitelně i Future<T>, takže je možno vytvářet i delší řetězy úloh. Pomocí dalších parametrů v metodě ContinueWith lze také upravit chování tohoto pokračování detailněji. Princip pokračování vytváří opět ještě vyšší úroveň abstrakce a je pomocí něj možno vytvářet celou řadu složitějších algoritmů, pro další informace viz např. [4]. 3.3 Synchronizační nástroje Parallel FX nabízí také řadu synchronizačních prvků na vyšší úrovni abstrakce, než jsou klasické mutexy, semafory apod. Najdeme je ve jmenném prostoru System.Threading a z principu nejsou přímo závislé na způsobu implementace paralelizmu, takže je lze používat jak s klasickými vlákny, tak s výše popsanými úlohami Parallel FX. CountDownEvent Třída CountDownEvent je zobecněním události ManualResetEvent. Jak už napovídá název, tuto událost je třeba jakoby vícekrát signalizovat, než je probuzeno vlákno, které na ni čeká. Třída Má metodu Decrement, která sníží počítadlo a teprve při dosažení nuly je událost skutečně signalizována. K dispozici je i metoda Increment, kterou je možno počítadlo naopak zvýšit, pokud událost ještě nebyla signalizována.

8 CountDownEvent se hodí zejména při operacích typu fork/join (pro implementaci bariéry). Poznámka. Stejně jako u ManualResetEvent, tento signál není možno resetovat a znovu použít dřív, než je vykonán kód všech čekajících vláken (protože by k nim signál nedorazil). LazyInit<T> Třída LazyInit<T> implementuje vláknově bezpečný způsob zpožděné inicializace proměnné. Hodí se pro situace, kdy chceme proměnnou inicializovat až při prvním použití. V sekvenčním programu stačí pro přístup k proměnné vytvořit property a vložit kód v podobě if(hodnota == null) hodnota = new Třída(); return hodnota;. Pomocí LazyInit<T> dosáhneme stejné funkcionality i v paralelním programu. Vlákna mohou o inicializaci proměnné soupeřit (tj. více vláken se současně může pokoušet o inicializaci a vytvořit tak více instancí, z nichž jen jedna nakonec bude uložena v naší proměnné). Toto chování však lze i zakázat (parametrem konstruktoru), pokud nám nevyhovuje. Dále je také možno určit proměnnou jako thread-local, tj. aby byla samostatná instance pro každé vlákno. ManualResetEventSlim, SemaphoreSlim Třída ManualResetEventSlim je obdobou systémové třídy události ManualResetEvent. Má lehce zúženou funkcionalitu (nemůže být použita mezi procesy), naopak výhodou slim verze je vyšší rychlost, protože běží většinou jen v user módu (zatímco systémové synchronizační prvky pracují v kernel módu procesoru). Podobně také třída SemaphoreSlim je náhradou za systémovou třídu Semaphore. SpinLock, SpinWait Třída SpinLock implementuje zámek podobně jako monitor (operace Enter a Exit), ale používá aktivní čekání. Třída SpinWait implementuje spin pro spin lock. Třída se používá tak, že opakovaně voláme metodu SpinOnce. Rozhodnutí, kdy se metoda hned vrátí a kdy předá řízení jinému vláknu, je skryto uvnitř SpinWait. WriteOnce<T> Generická třída WriteOnce<T> implementuje proměnnou, kterou je možno zapsat jen jednou, a pak už ji lze jen číst. Hodnota proměnné je přístupná skrze property Value. Zjistit, zda je již hodnota nastavena, lze pomocí property HasValue. Při špatném použití (opakovaný zápis nebo čtení před zápisem) je vyhozena výjimka. 3.4 Vláknově bezpečné kolekce ConcurrentQueue<T> a ConcurrentStack<T>

9 Parallel FX implementuje ve jmenném prostoru System.Threading.Collections vláknově bezpečné kolekce ConcurrentQueue<T> a ConcurrentStack<T>. Pro příklad uveďme, jak vybrat a zpracovat všechny prvky fronty: Data d; while(queue.trydequeue(out d)) Process(d); Vkládání prvků je stejné jako u klasických kolekcí, ale pro vybírání prvků zde není metoda Dequeue (resp. Push u zásobníku), ale pouze metoda TryDequeue (resp. TryPush u zásobníku), která vrací příznak úspěchu a načtenou hodnotu pak jako out referenci. BlockingCollection<T> Pro implementaci scénářů typu dodavatel odběratel je určena třída BlockingCollection<T>. Sama žádnou kolekci neimplementuje, funguje jen jako obálka (wrapper) nad jinými třídami kolekcí implementujícími IConcurrentCollection<T> (což jsou například výše uvedené ConcurrentQueue<T> a ConcurrentStack<T>). Blokující kolekce má tři základní schopnosti: V konstruktoru lze nastavit maximální počet prvků v kolekci. Když je pak kolekce plná, přidání prvku voláním Add je blokující operace. Odebrání prvku voláním Remove je blokující operace, pokud je kolekce prázdná. Dodavatel může voláním CompleteAdding oznámit, že už žádné další prvky nebudou dodány. Odebrání prvku pak už není blokující, ale oznamuje, že další prvky už nebudou. K dispozici jsou také property IsAddingCompleted pro zjištění, jestli už byly všechny prvky přidány, a IsCompleted pro zjištění, zda už byly všechny prvky přidány i odebrány. Při používání této funkcionality je vhodnější odebírat prvky pomocí TryRemove, neboť Remove vyhodí výjimku, pokud je fronta prázdná a další prvky už ani nebudou (což ovšem lze brát i za výhodu). BlockingCollection<T> poskytuje také sadu metod pro přidávání a odebírání prvků z řady kolekcí ve stylu vlož kamkoliv a odeber odkudkoliv tyto jsou vhodné při větší zátěži, neboť použitím více kolekcí současně se vyhneme celé řadě zamykání a získáme tak vyšší celkový výkon. Zajímavá je také metoda GetConsumingEnumerable, která vrací standardní enumerátoru typu IEnumerable<T>, takže odběratele pak můžeme implementovat pomocí obyčejného příkazu foreach a výrazně tak zjednodušit paralelní program. (Dokumentace Parallel FX nevysvětluje, jak je toto implementováno. Enumerátor má zřejmě blokující operaci MoveNext, díky čemuž může kontrolovat prázdnost kolekce i skončení dodávek.) 3.5 Výjimky Zajímavým a problematickým tématem při paralelním zpracování je otázka výjimek. Pracujeme-li s vlákny přímo (tj. po staru ), můžeme výjimky zachytávat v každém

10 vlákně zvlášť. Metody paralelního programování na vyšší úrovni abstrakce, speciálně pak PLINQ, však často nemají explicitně definován kód pro vlákna a je tedy vhodnější, aby i výjimky byly zachytávány jen jedním vláknem. V paralelním kódu využívajícím Parallel FX samozřejmě můžeme libovolně používat konstrukce try catch finally. Vyskytne-li se však neošetřená výjimka v paralelně zpracovávaném kódu, systém se k ní staví zvláštním způsobem předá ji do hlavního vlákna, které zahájilo paralelní operaci. Při paralelním výpočtu pomocí PLINQ nebo Task Parallel Library přitom může nastat celá řada výjimek téměř současně. Parallel FX se při první výjimce snaží ihned zastavit výpočty ve všech vláknech a další již nestartuje. I tak ale může nastat více výjimek současně a tyto výjimky systém slučuje do jediné výjimky typu System.Threading.AggregateException, kterou pak propaguje do vlákna, které paralelní výpočet spustilo. Jednotlivé výjimky jsou přístupné pomocí property InnerExceptions. Poznámka. PLINQ odkládá vyhodnocení dotazu až k procházení výsledné kolekce. Pro zachycení výjimky PLINQ je tedy třeba uzavřít do try catch bloku ne volání PLINQ, ale až procházení výsledné kolekce. (Toto se může zdát matoucí, ale je to stejné jako u klasického sekvenčního LINQ.) 4 Zhodnocení Knihovna Parallel FX je jistě zajímavým rozšířením platformy.net ve verzi 3.5. Zatím je distribuována samostatně jako preview a zřejmě se objeví přímo jako součást některé z příštích verzí.net Frameworku, protože paralelní programování je dnes velmi důležitým tématem z důvodu rozšiřování vícejádrových procesorů. V tomto příspěvku jsme si představili všechny součásti aktuální verze Parallel FX, diskutovány nebyly jen věci týkající se systémových nastavení, kterými je možno ovlivnit chování vnitřního plánovače úloh, který Parallel FX používá. (Jedná se o převážně kooperativní plánovač úloh typu Task, nad kterými je Parallel FX postaven. Tento plánovač je stále ve vývoji a nemá proto smysl zabývat se podrobnostmi současné verze.) V určitých speciálních případech může být vhodné přímo ručně programovat s vlákny, můžeme tak totiž aplikaci ušít na míru a dosáhnout tedy největšího výkonu. V mnoha případech je však výhodnější použít některý z konstruktů na vyšší úrovni abstrakce, které nabízí Parallel FX. Proces vytváření softwaru tak bude rychlejší a paralelní způsob výpočtu dokážeme v praxi použít na daleko více místech i bez letité praxe v této oblasti programování. Reference 1. Duffy J. Professional. ET Framework 2.0. Wrox Press, ISBN , ISBN-13: Keprt A. Systémové programování v jazyce C#. Studijní text pro distanční vzdělávání (e-book), Univerzita Palackého, Olomouc, 2008.

11 3. Microsoft Parallel Extensions to the. ET Framework 3.5 June 2008 Community Technology Preview (CTP). chm nápověda, dostupná ze serveru 4. Toub S. Useful Abstractions Enabled with ContinueWith. V blogu: Parallel Programming in. ET Troelsen A. Pro C# 2008 and the. ET 3.5 Platform, 4.vydání. Apress, pp., ISBN , Annotation: Parallel FX and parallel programming in. ET Framework Parallel FX library is an official extension to the.net Framework aimed at parallel programming with threads and shared memory. It brings new parallel object oriented programming techniques on a higher level of abstraction. This paper briefly introduces Parallel FX and tries to put it into context of other thread based parallel programming techniques in Windows and Microsoft.NET Framework. Parallel programming is a very current topic, especially with regard to emerging new multicore processors, and this trend won t surely change in the near future. In contrast to this, most current computer programs don t explicitly use multicore processors in their computing algorithms, and also teaching of algorithms still focuses mainly to sequential/imperative models of programming and algorithms. Real world parallel computing is almost completely limited to one single instrument: divide & conquer principle and explicit usage of threads. Parallel FX is a new framework of Microsoft which offers a few new ways of parallelization, theoretically known before but never used so widely in a massively used programming environment like.net. Parallel FX moves the workload related to thread programming from application programmer to the framework itself. This paper introduces Parallel FX and its computation models. Next, it discusses the usability of this new technology in real world applications.

Aleš Keprt Univerzita Palackého v Olomouci listopad 2008, listopad 2009 PARALLEL FX A PARALELNÍ PROGRAMOVÁNÍ NA PLATFORMĚ.NET 4.0

Aleš Keprt Univerzita Palackého v Olomouci listopad 2008, listopad 2009 PARALLEL FX A PARALELNÍ PROGRAMOVÁNÍ NA PLATFORMĚ.NET 4.0 Aleš Keprt Univerzita Palackého v Olomouci listopad 2008, listopad 2009 PARALLEL FX A PARALELNÍ PROGRAMOVÁNÍ NA PLATFORMĚ.NET 4.0 AKTUÁLNÍ TRENDY V procesorech nám přibývá jader Na serverech, desktopech

Více

Paralelní a asynchronní programování. Zdeněk Jurka

Paralelní a asynchronní programování. Zdeněk Jurka Paralelní a asynchronní programování Zdeněk Jurka Obsah přednášky Paralelní vs. Asynchronní programování Thread ThreadPool TPL Async await Synchronizace PLINQ Paralelní vs. Asynchronní programování Paralelní

Více

Jakub Čermák jakub@jcermak.cz, http://www.jcermak.cz Microsoft Student Partner

Jakub Čermák jakub@jcermak.cz, http://www.jcermak.cz Microsoft Student Partner Jakub Čermák jakub@jcermak.cz, http://www.jcermak.cz Microsoft Student Partner Co paralelizace přinese? Jak paralelizovat? Jak si ušetřit práci? Jak nedělat běžné paralelizační chyby? Race condition, deadlocky

Více

Procesy a vlákna (Processes and Threads)

Procesy 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íce

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor květen 2011 Jan Outrata (KI UP) Paralelní programování únor květen 2011 1 / 15 Simulátor konkurence abstrakce = libovolné proložení atom. akcí sekvenčních

Více

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21 Stručný obsah 1. Hardware, procesory a vlákna... 19 2. Programování s ohledemna výkon... 45 3. Identifikování příležitostí pro paralelizmus... 93 4. Synchronizace a sdílení dat... 123 5. Vlákna v rozhraní

Více

Procesy a vlákna - synchronizace

Procesy a vlákna - synchronizace ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna - synchronizace České vysoké učení technické Fakulta elektrotechnická 2010 Studijní materiály a informace o předmětu http://measure.feld.cvut.cz/vyuka/predmety/bakalarske/navody

Více

Asynchronní programování v.net

Asynchronní programování v.net Asynchronní programování v.net Tomáš Jecha Microsoft MVP Mail: tomas@jecha.net Twitter: @jechtom http://www.jecha.net http://www.vbnet.cz Agenda Procesy, vlákna, synchronizační primitiva, ThreadPool Task

Více

Základní datové struktury

Zá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íce

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 11 Literatura Ben-Ari M.: Principles of concurrent and distributed programming.

Více

Reaktivní programování v.net

Reaktivní programování v.net Reaktivní programování v.net Tomáš Petříček http://tomasp.net/blog tomas@tomasp.net Co je reaktivní programování? Psaní aplikací které regaují na události» Klasické.NET eventy Například MouseDown, KeyPress,

Více

Paralení 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 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íce

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 14 Atomické akce dále nedělitelná = neproložitelná jiným procesem izolovaná =

Více

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce. Operační systémy Tomáš Hudec 7 Prostředky programovacích jazyků pro IPC Obsah: 7.1 Monitor, 7.1.1 Použití monitoru pro řízení přístupu do kritické sekce, 7.1.2 Použití monitoru pro synchronizaci, 7.1.3

Více

Pavel Procházka. 3. prosince 2014

Pavel Procházka. 3. prosince 2014 Jazyk C# (seminář 11) Pavel Procházka KMI 3. prosince 2014 Motivace Dnes už se prakticky nedělají jednojádrové procesory pokud potřebujeme výkon, musíme zapojit všechna jádra Často potřebujeme dělat více

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 16 Semafory Await synchronizace používající await běží na železe = využívají

Více

Management procesu I Mgr. Josef Horálek

Management procesu I Mgr. Josef Horálek Management procesu I Mgr. Josef Horálek Procesy = Starší počítače umožňovaly spouštět pouze jeden program. Tento program plně využíval OS i všechny systémové zdroje. Současné počítače umožňují běh více

Více

OPS Paralelní systémy, seznam pojmů, klasifikace

OPS 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íce

Paralelní programování

Paralelní programování Paralelní programování cvičení Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 13 Cvičení 1 Jazyk C POSIX Threads (UNIX) hlavičkový soubor pthread.h, knihovna

Více

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

Seznámení s prostředím dot.net Framework

Seznámení s prostředím dot.net Framework Základy programování v jazyce C# Seznámení s prostředím dot.net Framework PL-Prostředí dot.net - NET Framework Je základním stavebním prvkem, na kterém lze vytvářet software. Jeho součásti a jádro je založené

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 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íce

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna Principy operačních systémů Lekce 5: Multiprogramming a multitasking, vlákna Multiprogramování předchůdce multitaskingu Vzájemné volání: Implementován procesem (nikoliv OS) Procesu je přidělen procesor,

Více

Principy operačních systémů. Lekce 6: Synchronizace procesů

Principy operačních systémů. Lekce 6: Synchronizace procesů Principy operačních systémů Lekce 6: Synchronizace procesů Kritická sekce Při multitaskingu (multithreadingu) různé procesy často pracují nad společnou datovou strukturou (např. zápis a čtení do/z fronty)

Více

Lineární datové struktury

Lineá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íce

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština) Instalace OS Linux Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání,

Více

Vlá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 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íce

Z. Kotala, P. Toman: Java ( Obsah )

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1 Ovladače Windows A4M38KRP Str. 1 Struktura OS Windows Str. 2 Typy ovladačů Str. 3 Typy ovladačů Virtual Device Driver User mode ovladač Virtualizace HW pro DOS aplikace Legacy Driver Pro zařízení nepodporující

Více

IRAE 07/08 Přednáška č. 7. Začátek (head)

IRAE 07/08 Přednáška č. 7. Začátek (head) Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků

Více

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek = Velmi malé jádro = implementuje jen vybrané základní mechanismy: = virtuální paměť; = plánování vláken; = obsluha výjimek; = zasílání

Více

Služba ve Windows. Služba (service) je program

Služba ve Windows. Služba (service) je program Služby Windows Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání, školské

Více

Architektura a koncepce OS OS a HW (archos_hw) Architektura a koncepce OS Jádro OS (archos_kernel) Architektura a koncepce OS Typy OS (archos_typy)

Architektura a koncepce OS OS a HW (archos_hw) Architektura a koncepce OS Jádro OS (archos_kernel) Architektura a koncepce OS Typy OS (archos_typy) Architektura a koncepce OS OS a HW (archos_hw) Aby fungoval OS s preemptivním multitaskingem, musí HW obsahovat: 1. (+2) přerušovací systém (interrupt system) 2. (+2) časovač Při používání DMA: 1. (+1)

Více

Programování v C++ 2, 4. cvičení

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ KATEDRA INFORMATIKY, PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO, OLOMOUC PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ Slajdy vytvořili Vilém Vychodil a Jan Konečný (KI, UP Olomouc) PP 2, Lekce

Více

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í.

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í. 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íce

Kolekce, cyklus foreach

Kolekce, 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íce

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 17 Monitor Semafor vedle aktivní (čekací smyčka, busy-wait) i pasivní implementace

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE

Více

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ř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íce

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.

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. 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íce

ČÁST 1. Základy 32bitového programování ve Windows

ČÁST 1. Základy 32bitového programování ve Windows Obsah Úvod 13 ČÁST 1 Základy 32bitového programování ve Windows Kapitola 1 Nástroje pro programování ve Windows 19 První program v Assembleru a jeho kompilace 19 Objektové soubory 23 Direktiva INVOKE 25

Více

Přidělování paměti II Mgr. Josef Horálek

Přidělování paměti II Mgr. Josef Horálek Přidělování paměti II Mgr. Josef Horálek Techniky přidělování paměti = Přidělování jediné souvislé oblasti paměti = Přidělování paměti po sekcích = Dynamické přemisťování sekcí = Stránkování = Stránkování

Více

boolean hasnext() Object next() void remove() Kolekce

boolean hasnext() Object next() void remove() Kolekce 11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída

Více

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy Bc. Petr Pokorný Letní semestr 2009/2010 1 Obsah 1 Úvod... 3 2 Workflow... 3 3 Workflow

Více

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

1 - Úvod do platformy.net. IW5 - Programování v.net a C# 1 - Úvod do platformy.net IW5 - Programování v.net a C# Strana 1 Obsah přednášky Objektově orientované paradigma.net Framework Základní rysy jazyka C# Strana 2 Objektová orientace C# implementuje základní

Více

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;

Více

Cvičení č. 3. Sdílené prostředky a synchronizace Program Banka. 4 body

Cvičení č. 3. Sdílené prostředky a synchronizace Program Banka. 4 body Cvičení č. 3 Sdílené prostředky a synchronizace Program Banka 4 body Datum: 12.3.2008 1 Obsah 1. Úvod...2 2. Pokyny pro odevzdání...2 3. Příprava...2 4. Úlohy...3 4.1. Požadavky na program...3 4.2. Požadavky

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr. Model procesoru Jedná se o blokové schéma složené z registrů, paměti RAM, programového čítače, instrukčního registru, sčítačky a řídicí jednotky, které jsou propojeny sběrnicemi. Tento model má dva stavy:

Více

Konstruktory a destruktory

Konstruktory 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

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4. Základy programování 4 - C# - 8. cvičení Radek Janoštík Univerzita Palackého v Olomouci 3.4.2017 Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.2017 1 / 10 Reakce na úkoly

Více

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch ZOS 9. cvičení, ukázky kódu Pavel Bžoch Obsah Komunikace mezi procesy Atomické operace TSL a CAS Zámky Semafory Semafory vypsání věty Monitor Bariéra pomocí monitoru Implementace semaforu pomocí monitoru

Více

PROGRAMOVÁNÍ PRO MS WINDOWS 1

PROGRAMOVÁNÍ PRO MS WINDOWS 1 Cílem předmětu je seznámit posluchače s moderními prostředky pro tvorbu aplikací pro Windows jmenovitě s programovou platformou.net a programovacím jazykem C#. V průběhu budou vysvětlena následující témata:

Více

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software. Maturitní témata IKT, školní rok 2017/18 1 Struktura osobního počítače Von Neumannova architektura: zakreslete, vysvětlete její smysl a popište, jakým způsobem se od ní běžné počítače odchylují. Osobní

Více

Metody připojování periferií

Metody připojování periferií Metody připojování periferií BI-MPP Přednáška 10 Ing. Miroslav Skrbek, Ph.D. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze Miroslav Skrbek 2010,2011

Více

Přijímací zkouška - informatika

Přijímací zkouška - informatika Přijímací zkouška - informatika Jméno a příjmení pište do okénka Číslo přihlášky Číslo zadání 1 Algoritmizace a datové struktury 1 Předpokládejme existenci oboustranně spojovaného seznamu prvků (list),

Více

Matematika v programovacích

Matematika v programovacích Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?

Více

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

Více

Pokročilé architektury počítačů

Pokročilé architektury počítačů Pokročilé architektury počítačů Tutoriál 2 Virtualizace a její dopady Martin Milata Obsah Virtualizace Jak virtualizace funguje Typy HW podpora virtualizace Dopady virtualizace Jak virtualizace funguje?

Více

4. lekce Přístup k databázi z vyššího programovacího jazyka

4. lekce Přístup k databázi z vyššího programovacího jazyka 4. lekce Přístup k databázi z vyššího programovacího jazyka Studijní cíl Tento blok popisuje základní principy přístupu k databázi z vyššího programovacího jazyka. Doba nutná k nastudování 2-3 hodiny Průvodce

Více

Procesy a vlákna Mgr. Josef Horálek

Procesy a vlákna Mgr. Josef Horálek Procesy a vlákna Mgr. Josef Horálek Procesy a vlákna = Základním úkolem jádra je = Správa běžících procesů a vláken: = vytváření = plánování = nastavování = ukončování Proces, vlákno, úloha = Proces běžící

Více

2) 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.

2) 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íce

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

6. blok část B Vnořené dotazy

6. blok část B Vnořené dotazy 6. blok část B Vnořené dotazy Studijní cíl Tento blok je věnován práci s vnořenými dotazy. Popisuje rozdíl mezi korelovanými a nekorelovanými vnořenými dotazy a zobrazuje jejich použití. Doba nutná k nastudování

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

Implementace systémů HIPS: historie a současnost. Martin Dráb

Implementace systémů HIPS: historie a současnost. Martin Dráb Implementace systémů HIPS: historie a současnost Martin Dráb martin.drab@secit.sk HIPS: základní definice Majoritně používané operační systémy disponují bezpečnostními modely, které dovolují jednotlivým

Více

Činnost počítače po zapnutí

Činnost počítače po zapnutí Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/03.0009 Činnost počítače po zapnutí Paměť RWM(Read Write Memory - paměť pro čtení a zápis, označovaná také jako RAM)

Více

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31 Programování v C# Další jazykové konstrukce Petr Vaněček 1 / 31 Obsah přednášky Přetěžování metody operátory Generika Kolekce třídy rozhraní 2 / 31 Překrytí vs. přetížení Rozdíl ve způsobu deklarace metody/operátoru

Více

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy VÝUKOVÝ MATERIÁL Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková

Více

Operač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

Operač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íce

PŘETĚŽOVÁNÍ OPERÁTORŮ

PŘETĚŽOVÁNÍ OPERÁTORŮ PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako

Více

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu State State Známý jako Stav, Object for States Účel umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu Použitelnost chování objektu závisí na jeho stavu, který se mění za

Více

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování. Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012 návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu

Více

Softwarové komponenty a Internet

Softwarové komponenty a Internet Softwarové komponenty a Internet Doc. Dr. Ing. Miroslav Beneš Katedra informatiky FEI VŠB-TU Ostrava Miroslav.Benes@vsb.cz Obsah přednášky Motivace Vývoj přístupů k tvorbě programů Definice komponenty

Více

Rozklad na prvočinitele. 3. prosince 2010

Rozklad na prvočinitele. 3. prosince 2010 Rozklad na prvočinitele Ondřej Slavíček 3. prosince 2010 1 Obsah 1 Příručka k programu 3 1.1 funkce main()............................. 3 1.2 funkce hlavnifunkce()........................ 3 1.3 funkce

Více

Ukázka zkouškové písemka OSY

Ukázka zkouškové písemka OSY Ukázka zkouškové písemka OSY Jméno a příjmení:.......................................... Odpovězte na otázky zaškrtnutím příslušného políčka. Otázky označené znakem mohou mít více než jednu správnou odpověď.

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

C++ 0x aka C++11. Základním kamenem je třída std::thread

C++ 0x aka C++11. Základním kamenem je třída std::thread C++ 0x aka C++11 Jako jiné jazyky, např. Free/Object Pascal, se C++ ve standardu ++0x dočkal podpory vláken Výhodou je, že standardní knihovna je platformě nezávislá na úrovni zdrojového kódu Základním

Více

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

Programování II. Třídy a objekty (objektová orientovanost) 2018/19 Programování II Třídy a objekty (objektová orientovanost) 2018/19 Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad. Proč potřebujeme objekty? Udržovatelnost softwaru

Více

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků

Více

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2 Základy informatiky 2. Přednáška HW Lenka Carr Motyčková February 22, 2011 Základy informatiky 1 February 22, 2011 Základy informatiky 2 February 22, 2011 Základy informatiky 3 February 22, 2011 Základy

Více

Vlákna Co je to vlákno?

Vlákna Co je to vlákno? Vlákna Co je to vlákno? Hierarchie z pohledu operačního systému: Proces o největší výpočetní entita plánovače o vlastní prostředky, paměť a další zdroje o v závislosti na OS možnost preemptivního multitaskingu

Více

Programování v jazyku C# II. 5.kapitola

Programování v jazyku C# II. 5.kapitola Programování v jazyku C# II. 5.kapitola Obsah O ADO.NET Spojení s DB Příkazy Jednoduché čtení DataSet 2/28 ADO.NET ADO - ActiveX Data Object Orientováno na webové aplikace neexistence stavu v HTTP Obecný

Více

Práce v textovém editoru

Práce v textovém editoru Práce v textovém editoru 0) Otevřete NOTEPAD a okopírujte celý tento článek do NOTEPADu. [Můžete použít zkratky Ctrl-A (označit vše) Ctrl+C(kopírovat), Ctrl+V (vložit)] 1) Najděte v tomto textu slovo "myš"

Více

09. Memory management. ZOS 2006, L.Pešička

09. Memory management. ZOS 2006, L.Pešička 09. Memory management ZOS 2006, L.Pešička Správa paměti paměťová pyramida absolutní adresa relativní adresa počet bytů od absolutní adresy fyzický prostor adres fyzicky k dispozici výpočetnímu systému

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

Více

KAPITOLA 1 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ

KAPITOLA 1 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ KAPITOLA 1 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ KLÍČOVÉ POJMY technické vybavení počítače uchování dat vstupní a výstupní zařízení, paměti, data v počítači počítačové sítě sociální

Více

Soubor jako posloupnost bytů

Soubor jako posloupnost bytů Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7 PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 25. Otázka : Komponentní technologie - základní pojmy a principy, metody specifikace komponent. Obsah : 1. Základní pojmy 1.1 Komponenta Komponenta

Více

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti

MS WINDOWS II. Jádro. Správa objektů. Správa procesů. Zabezpečení. Správa paměti MS WINDOWS II Jádro Správa objektů Správa procesů Zabezpečení Správa paměti JÁDRO I ntoskrnl.exe napsán v C (příp. assembler) základní mechanismy poskytované executivám trap dispečink synchronizace přístupů

Více