Využijte plný výkon procesorů s více jádry v LabVIEW 8.5 Rychlosti procesorů narazily během posledních let na strop. Mooreův zákon, který říká, že počet tranzistorů na čipu se zdvojnásobí každých 18 až 24 měsíců, je stále platný, stejně jako v průběhu posledních 40 let, ale nadále již neznamená lineární nárůst ve výkonu. Dříve zvyšovali výrobci čipů takt procesoru kvůli zdvojnásobení výkonu čipu – např. ze 100 na 200MHz a v nedávné době už v rozsahu GHz. Dnes již však zvyšování taktu kvůli zvýšení výkonu není udržitelné z důvodů omezení ve spotřebě energie a v tepelném vyzařování. Dodavatelé čipů se místo toho soustředí na zcela nové architektury s několika procesorovými jádry na jediném čipu. S vícejádrovými procesory mohou programátoři docílit zpracování většího množství instrukcí, než s jedním jádrem. Nicméně aby využili výhod procesorů s více jádry, musí se programátoři zamyslet nad způsobem, jakým vytvářejí aplikace. Slovy Herba Suttera, softwarového architekta z Microsoftu, dnes již doba nepřeje vývojářům, kteří očekávají okamžité zvýšení výkonu aplikací díky tomu, že uživatelé prostě vymění své počítače za modely s výkonnějšími procesory. Zkrátka, programátoři nyní musejí aplikaci vytvořit tak, aby i nadále docházelo ke zvýšení výkonu. U sekvenčních programů docházelo ke zvýšení výkonu díky tomu, že se zvyšoval takt procesorů. Výměna počítače za nový s rychlejším procesorem vždy znamenala, že každá instrukce v řadě proběhla rychleji. Aby docházelo ke zvyšování výkonu u procesorů s více jádry, musí vývojáři navrhovat své aplikace tak, aby svou práci rozdělovaly mezi jednotlivá jádra – zjednodušeně řečeno: je potřeba vyvíjet paralelní aplikace namísto sekvenčních. Software LabVIEW od společnosti National Instruments umožňuje využití plného výkonu procesorů s více jádry, a to ze třech základních důvodů: 1 LabVIEW je grafický programovací jazyk založený na datových tocích. Vývojáři si mohou v LabVIEW snadno vytvářet paralelní úlohy, což jim umožňuje vyvíjet nové aplikace a upravovat staré aplikace tak, aby využily výhody procesorů s více jádry. LabVIEW je vícevláknové „multithread“ již od verze 5.0, a nejnovější verze 8.5 přináší vylepšení pro využití rychlosti procesorů s více jádry. 2LabVIEW umí využít výkon procesorů s více jádry i v embedded systémech reálného času.
LabVIEW 8.5 nově umožňuje využití automatického multitaskingu, používaného v operačních systémech osobních počítačů jako Windows a Linux® – známou jako symetrický multiprocessing (symmetric multiprocessing - SMP) – do deterministických systémů reálného času. 3LabVIEW je umístěno na vrcholu softwarového modelu připraveného na technologii více jader. Každá vrstva aplikace LabVIEW (například aplikační kód LabVIEW, nízko-úrovňové funkce, a I/O ovladače) je thread-safe (bezpečná z hlediska spolupráce více vláken) pro využití výhod procesorů s více jádry. LabVIEW je grafický programovací jazyk založený na datových tocích Hlavní výhodou při vývoji vašich aplikací v LabVIEW je intuitivní grafická podoba tohoto jazyka. V LabVIEW řešíte svůj technický problém stejným způsobem, jako když kreslíte na papír blokové schéma. Moderní vícejádrové procesory dělají z LabVIEW ještě lepší volbu při výběru programovacího nástroje, a to díky jeho schopnosti vyjadřovat a provádět úlohy paralelně. To, že je LabVIEW založeno na datových tocích, znamená, že kdykoliv kód obsahuje větvený spoj nebo paralelní sekvenci v blokovém diagramu, pokouší se kompilátor LabVIEW provádět tento kód paralelně. V termínech počítačové vědy se toto chování nazývá “implicitní paralelismus”, neboť nemusíte psát kód speciálním způsobem, aby byl prováděn paralelně; grafický jazyk v LabVIEW se sám postará o jistou úroveň paralelismu. Teoretická výkonnostní výhoda spojená s přechodem od jednojádorvého k dvoujádrovému počítači je dvojnásobné zlepšení. Jak moc se k tomuto limitu přiblížíte je přímo závislé na tom, jak dokážete zajistit, aby byl váš program vykonáván paralelně. Programátoři v LabVIEW své programy vytváří paralelně automaticky, protože to je přirozená vlastnost tohoto prostředí. První testy rychlosti běžných aplikací vytvořených v LabVIEW ukazují, že bez ohledu na programovací techniky pro vícejádrové systémy, vykazují tyto aplikace 15 až 20 % nárůst bez jakýchkoliv zásahů do jejich kódu. Obrázek č. 1 ukazuje příklad jednoduché aplikace, ve které jedno větvení v LabVIEW kódu usnadňuje dvě úlohy analýzy – filtraci a rychlou Fourierovu transformaci (FFT) – pro paralelní provádění na dvoujádrovém systému. Protože jsou obě úlohy výpočetně náročné, je rychlost zpracování na dvoujádrovém procesoru 1,8 násobkem rychlosti zpracování na jednom jádru. V tradičních textově založených prostředích musí vývojáři používat komplexní kódovací struktury, nazývané vlákna, aby v těchto sekvenčních jazycích implementovali paralelismus. Správa vícevláknových aplikací může být velmi náročná. V jazyku C musíte provádět synchronizaci
prostřednictvím zámků, mutexů, atomických instrukcí a dalších pokročilých programátorských technik. Když se stane správa více vláken příliš složitou pro sledování, mohou se objevit běžné programátorské nástrahy, jako třeba následující:
Neefektivita díky příliš velkému počtu vláken
Zamrznutí (deadlock) – vlákna na sebe čekají navzájem a žádné nemůže pokračovat v provádění
Kolize – časování provádění kódu není správné a data buď nejsou k dispozici v pravou chvíli, nebo dochází k přepisování správných dat
Spory o paměť – více vláken se snaží přistupovat k paměti ve stejnou chvíli
Mimo vytváření kódu je dalším příkladem zvýšené produktivity možnost provádět základní ladění v LabVIEW pomocí zvýraznění provádění a sond, jak je vidět na obrázku č. 2. Když hovořil Scott Sirrine (hlavní produktový vývojář v Eaton Corporation) o vývoji vícejádrových aplikací v LabVIEW, řekl, “Skutečnost, že je LabVIEW jazyk založený na datových tocích s automatickým multithreadingem, představuje dvě klíčové výhody oproti jiným programovacím jazykům – produktivitu při vývoji a výkon při provádění.” Přestože se LabVIEW samo stará o mnoho problémových částí vývoje pro vícejádrové systémy, existují stále případy, ve kterých můžete dále zvýšit výkonnost systému používáním optimalizačních strategií při tvorbě kódu. Tři příklady takových strategií:
Paralelismus úloh – rozdělování vašeho programu do paralelně prováděných úloh
Proudové zpracování instrukcí (pipelining) – rozdělení sekvenčních algoritmů do ekvivalentních úseků, které jsou rozděleny mezi více jader
Datový paralelismus – rozdělování velkých datových celků do podcelků a jejich paralelní zpracovávání Příklad každé z těchto optimalizačních technik můžete nalézt na stránce ni.com/multicore.
LabVIEW umí využít výkon procesorů s více jádry i v embedded systémech reálného času Technici se dříve spoléhali na nástroje, které nejsou optimalizovány pro paralelní programování, jež je nezbytné z důvodu využití výhod vícejádrových embedded systémů. LabVIEW 8.5 přináší
automatický vícevláknový plánovač úloh ze stolních počítačů – známý jako SMP – do deterministických systémů reálného času. Modul reálného času pro LabVIEW 8.5 přidává prvotřídní podporu pro vícejádrové systémy s následujícími možnostmi:
Můžete provádět automatické rozdělování zátěže na více jader (SMP) na embedded systémech reálného času
Časově kritickým sekcím kódu nyní můžete přiřadit časové smyčky na vyhrazených jádrech (procesorová afinita), aby byly izolovány klíčové sekce kódu ve strukturách časových smyček od zbytku vaší aplikace
Díky doplňku Real-Time Execution Trace Toolkit 2.0 nyní můžete snadno vizualizovat vlákna a jádra procesorů, na kterých běží vaše VI. Nástroj pomáhá při naladění systémů reálného času na optimální výkon
LabVIEW je umístěno na vrcholu softwarového modelu připraveného na technologii více jader Společnost Intel definovala čtyři vrstvy softwarového modelu, na základě kterých byste měli posuzovat připravenost na vývoj pro systémy s více jádry. Tyto čtyři vrstvy jsou operační systém, ovladače zařízení, aplikace/knihovny a vývojové nástroje. Paralelní programy neběží na vícejádrových procesorech rychleji, pokud nejsou knihovny a ovladače, které používáte, optimalizovány pro běh na více jádrech nebo pokud operační systém nedokáže rovnoměrně rozdělovat zátěž mezi více jader. Příkladem na vrstvě ovladačů zařízení jsou softwarové ovladače NI-DAQmx. Tradiční ovladač Traditional NI-DAQ (Legacy) je bezpečný z hlediska vláken. To znamená, že celá knihovna blokuje své volání z jiných vláken, pokud je zavolána NI-DAQ funkce. Na první pohled se toto chování může zdát logickým, neboť NI-DAQ se používá k ovládání hardwaru, který by měl být v každém okamžiku volán jen jednou. Ovladač NI-DAQmx používaný od roku 2003 je reentrantní. To znamená, že více úloh může být prováděno opravdu paralelně bez vzájemného blokování vláken. Díky tomuto přístupu podporuje ovladač paralelní provozování několika úloh jedné I/O kartě. Může jít např. o nezávislé zpracování analogových a digitálních vstupů a výstupů. LabVIEW – Ideální jazyk pro paralelní programování Většina zákazníků zaznamená výhody vyplývající z vícejádrových systémů ve vylepšené schopnosti provozovat současně více aplikací (e-mail, video, zpracování textu, a další), což se označuje jako multitasking. Nicméně tato skutečnost znamená málo výhod pro vývojáře, který se snaží optimalizovat jedinou aplikaci.
Uživatelé, kteří vyžadují rychlejší měření pro testování nebo vyšší výkon ve smyčkách řídicích aplikací, musí zvážit způsob, jakým budou implementovat paralelní aplikace. S LabVIEW můžete využít výhod softwarového prostředí, které je ideální pro paralelní programování díky řízení zpracování běhu programu datovým tokem, podpoře vícejádrových systémů na embedded platformách vyvinutých pomocí LabVIEW Real-Time a softwarovým modelem připraveným na vícejádrové systémy na všech svých vrstvách. – Jeff Meisel Jeff Meisel je produktový manažer pro LabVIEW Real-Time Module. Získal bakálřské vzdělání v počítačových vědách na Kansas State University. Další informace o LabVIEW 8.5 poskytne česká pobočka firmy National Instruments.
National Instruments (Czech Republic), s.r.o. Dělnická 12 170 00 Praha 7 - Holešovice Česká republika Tel: +420 224 235 774 Fax: +420 224 235 749 E-mail:
[email protected] www.ni.com/czech CZ: 800 142 669 SK: 0800 182 362