VYBRANÉ PROBLÉMY ČASOVÉ OPTIMALIZACE ZDROJOVÉHO KÓDU V PROSTŘEDÍ MATLAB



Podobné dokumenty
PPEL Ing. Petr Kropík ICQ: tel.: (odd.

Stud. skupina: 3E/96 Číslo úlohy: - FSI, ÚMTMB - ÚSTAV MECHANIKY TĚLES, MECHATRONIKY A BIOMECHANIKY REAL TIME CONTROL

ADAPTACE PARAMETRU SIMULAČNÍHO MODELU ASYNCHRONNÍHO STROJE PARAMETR ADAPTATION IN SIMULATION MODEL OF THE ASYNCHRONOUS MACHINE

Stabilita v procesním průmyslu

VÝUKA OBECNÝCH METOD ANALÝZY LINEÁRNÍCH OBVODŮ

Studentská tvůrčí a odborná činnost STOČ 2015

Podnikání na internetu

Office podrobný průvodce. Tomáš Šimek

Konfigurace řídicího systému technikou Hardware In The Loop

Navigace na webových stránkách

NÁVRH LQG ŘÍZENÍ PRO FYZIKÁLNÍ MODEL KULIČKY NA TYČI

ZÁVAZNÉ POKYNY PRO VYPRACOVÁNÍ BAKALÁŘSKÉ, DIPLOMOVÉ A DISERTAČNÍ PRÁCE

Závěrečná zpráva o výsledcích řešení projektu v rámci rozvojových program MŠMT na rok 2006

MATLAB a Simulink R2015b

KTE / PPEL Počítačová podpora v elektrotechnice

POLOHOVÁNÍ ULTRAZVUKOVÉHO SENZORU

Doňar B., Zaplatílek K.: MATLAB - tvorba uživatelských aplikací, BEN - technická literatura, Praha, (ISBN:

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

KRITICKÁ MÍSTA V TECHNOLOGICKÉM PROCESU PŘÍLEŽITOSTNÉ OSOBNÍ SILNIČNÍ DOPRAVY

GRAFY A GRAFOVÉ ALGORITMY

Výpočtová studie 2D modelu stroje - Frotor

Delphi podstata, koncepce a metody MDI aplikace

Metodika pro analýzu úrovně poskytování informací cestujícím ve veřejné dopravě. uplatnění výsledků výzkumu

X37SGS Signály a systémy

APLIKACE FUZZY LOGIKY PŘI HODNOCENÍ DODAVATELŮ FIRMY THE APPLICATION OF FUZZY LOGIC FOR RATING OF SUPPLIERS FOR THE FIRM

GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY

VÝZKUM, VÝVOJ A INOVACE V OBLASTI VAROVÁNÍ OBYVATELSTVA RESEARCH, DEVELOPMENT AND INNOVATION IN WARNING THE POPULATION

Průmyslové pece Tepelné procesy Sušárny a klimatizační komory Zkušebny Technologické linky Stroje

MĚŘENÍ PORUCH PŘEDIZOLOVANÝCH POTRUBNÍCH SYSTÉMŮ POMOCÍ PŘENOSNÉHO REFLEKTOMETRU BDP

VYSOKÁ ŠKOLA EKONOMICKÁ V PRAZE. Optimalizace trasy při revizích elektrospotřebičů

ZÁKLADNÍ METODIKA SIMULAČNÍ STUDIE PŘI VYUŽITÍ PARALELNÍ DISKRÉTNÍ SIMULACE

PARLAMENT ČESKÉ REPUBLIKY Poslanecká sněmovna 2009 V. volební období. Návrh. poslance Ondřeje Lišky. na vydání

Řízení pohybu stanice v simulačním prostředí OPNET Modeler podle mapového podkladu

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Podnikatelská informatika obor šitý na míru

PROBLEMATIKA TAKTOVÝCH JÍZDNÍCH ŘÁDŮ THE PROBLEMS OF INTERVAL TIMETABLES

Univerzita Pardubice Fakulta elektrotechniky a informatiky

APROXIMACE KŘIVEK V MATLABU NEWTONŮV INTERPOLAČNÍ POLYNOM CURVE FITTING IN MATLAB NEWTON INTERPOLATION POLYNOMIAL

ENVIRONMENTÁLNÍ OPTIMALIZACE KOMŮRKOVÉ ŽELEZOBETONOVÉ DESKY

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Plán testů. Úvod. Jednotkové (unit) testování

Obsah. Úvod Access a Excel podobní, a přesto každý jiný! Vstupujeme do prostředí tabulkového procesoru... 25

Obecný úvod do autoelektroniky

2D A 3D SNÍMACÍ SYSTÉMY PRŮMĚRU A DÉLKY KULATINY ROZDÍLY VE VLASTNOSTECH A VÝSLEDCÍCH MĚŘENÍ

Předmluva 9 Obsah knihy 9 Typografické konvence 10 Informace o autorovi 10 Poděkování 10

Reference 10. Předpokládejme stavový popis spojitého, respektive diskrétního systému

časopis pro moderní konstruktéry Autodesk Inventor 11 AutoCAD Mechanical 2007 Tipy a triky Systém správy dokumentu 1/2006

INTERAKTIVNÍ TABULE A MATEMATICKÝ SOFTWARE GEOGEBRA PŘI VÝUCE MATEMATIKY V ANGLICKÉM JAZYCE

Uživatelem řízená navigace v univerzitním informačním systému

VÝVOJ NOVÉHO REGULAČNÍHO ALGORITMU KOTLE VERNER S PODPOROU PROGRAMU MATLAB

KONTROLA PŘESNOSTI VÝROBY S VYUŽITÍM MATLABU

1. Programování PLC. Programovatelné automaty II - 1 -

VYUŽITÍ FORMÁLNÍ ADEKVACE PROVOZNÍ PÁKY V ŘÍZENÍ PODNIKU USING OF FORMAL ADEQUACY OF OPERATING LEVERAGE IN MANAGEMENT

V praxi pracujeme s daty nominálními (nabývají pouze dvou hodnot), kategoriálními (nabývají více

1. Metody měření parametrů trolejového vedení


Vývojové práce v elektrických pohonech

A7B36SI2 Tematický okruh SI08 Revidoval: Martin Kvetko

A7B39TUR Testování uživatelského rozhraní. HTC Desire HD. (testování mobilního zařízení) Tomáš Klejna

REGISTRY VE VEŘEJNÉ SPRÁVĚ

Daniel Honc, František Dušek Katedra řízení procesů a výpočetní techniky, FCHT, Univerzita Pardubice

Návrh programu v Black Box Component Builderu s využitím architektury Model View Controller

Informatika pro moderní fyziky (7) Tvorba textových dokumentů

Numerické metódy matematiky I

E.C.S. řada nová generace obrat o 360 ( Systém vyvinut ve Florencii v r.2009 )

Pracovníci informačních služeb, na přepážkách apod.

Herní engine. Co je Engine Hotové enginy Jemný úvod do game designu

1.2 Motorické testy - obecná charakteristika

Využití volně dostupných simulátorů pole v elektromagnetické kompatibilitě

3D Vizualizace muzea vojenské výzbroje

Paralelní LU rozklad

Měřič krevního tlaku. 1 Měření krevního tlaku. 1.1 Princip oscilometrické metody 2007/

VYUŽITÍ MAPLE V ZÁVĚREČNÝCH PRACÍCH NA FAKULTĚ PODNIKATELSKÉ VUT V BRNĚ

Workshop. Vývoj embedded aplikací v systému MATLAB a Simulink. Jiří Sehnal sehnal@humusoft.cz. info@humusoft.cz.

MONITORING A ANALÝZA KVALITY ELEKTŘINY

K výsledkům průzkumu zaměřeného na kvalitu podnikové informatiky

Architektury CISC a RISC, uplatnění v personálních počítačích

2. RBF neuronové sítě

ORGANIZACE ZIMNÍ ÚDRŽBY POZEMNÍCH KOMUNIKACÍ ORGANIZATION OF WINTER ROAD MAINTENANCE


IMPLEMENTACE AUTOMATIZOVANÉHO MĚŘENÍ HRTF V MATLABU

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

DUM 20 téma: Formátování rozsáhlého dokumentu

Digitální paměťový osciloskop (DSO)

Jak. dokonalou prezentaci v. PowerPointu. Marek Laurenčík

Marketing. Modul 2 Marketingový mix

NÁVRH A REALIZACE WWW PREZENTACE ČKR

Analýza spolehlivosti tlakové nádoby metodou Monte Carlo

Autonomnost solárních systémů

Minebot manuál (v 1.2)

Zřízení studijního oboru HPC (High performance computing)

Logistické služby. Přehled logistických služeb Charakteristika logistických služeb Princip systému Kanban Systém zavedení a řízení logistiské služby

ZADÁVACÍ DOKUMENTACE

Šíření elektromagnetických vln

Petr Vybíral

Prezentační software a tvorba posterů

PRAXE A PŘÍNOSY INDEXOVÉHO BENCHMARKINGU PRACTISE AND BENEFITS OF INDEX BENCHMARKING

Projekty pro výuku programování v jazyce Java

Softwarový projekt Vyhodnocovač a zobrazovač meteorologických dat

Transkript:

K. Zaplatílek: Vybrané problémy časové optimalizace P1 VYBRANÉ PROBLÉMY ČASOVÉ OPTIMALIZACE ZDROJOVÉHO KÓDU V PROSTŘEDÍ MATLAB Prof. Ing. Karel Zaplatílek, Ph.D. Katedra elektrotechniky; Fakulta vojenských technologií, Univerzita obrany, Brno, karel.zaplatilek@unob.cz Abstrakt Článek je zaměřen na základní možnosti a techniky, jak optimalizovat zdrojový kód algoritmu z hlediska časové náročnosti. Dvě základní použité metody měření času jsou aplikovány na vybrané postupy a klíčové části kódu. Jsou uvedena základní doporučení pro vyvarování se chyb při programování v prostředí MATLAB. Klíčová slova: MATLAB, časová optimalizace algoritmů. Abstract This contribution is focused on basic possibilities and techniques for time optimized applications and source codes. Two basic measuring methods are applied to selected procedures and key parts of the source code. Basic recommendations are introduced for avoidance of programming errors in MATLAB environment. Keywords: MATLAB, time optimization. 1 Úvod a zaměření článku S trochou nadsázky lze napsat, že na dobu vykonání algoritmu nebo obecně zdrojového kódu (dále jen algoritmu) má vliv téměř vše, co souvisí jak s kódem samotným, tak s hardwarovým vybavením počítače či jeho okolím. Zkušenost navíc říká, že při opakovaném spouštění algoritmu se doba jeho provedení vždy mírně odlišuje; přitom první spuštění může být výrazně delší, než všechna ostatní. Roli zde hraje také použitý operační systém a jeho okamžitý stav. Pro účely tohoto článku je uvažována standardní práce uživatele v prostředí MATLAB, která zahrnuje zejména tyto činnosti: Otevření vestavěného editoru zdrojového textu. Zápis a ladění kódu. Uložení aplikace na disk. Vzhledem k rozsáhlosti prostředí a značnému množství variant a způsobů tvorby algoritmů se zde omezíme pouze na vlastní MATLAB a jeho poměrně jednoduchý skriptovací programovací jazyk. Není zde věnována pozornost objektovému přístupu ani spolupráci s externím hardware. Není uvažována ani nadstavba Simulink, neboť optimalizace jeho blokově orientovaných struktur je problematikou značně rozsáhlou, výrazně přesahující záměry článku. Další text by měl sloužit především technicky orientovanému uživateli, používajícímu MATLAB jako prostředek a nástroj. 2 Vymezení pojmu časová optimalizace Z praxe je známé a zažité, že na rozdíl od obecného pojmu optimalizace je v případě ladění algoritmu a priori předpokládána maximální možná rychlost, tedy minimální doba jeho trvání. Je to však silně zúžený pohled, jenž nebere v potaz mnoho níže uvedených podmínek. Optimalizovat algoritmus z hlediska doby trvání proto zahrnuje zejména tato opatření: Zajištění minimální možné doby trvání. Přizpůsobení doby trvání konkrétním podmínkám. Rozeberme podrobněji obě tyto možnosti. 2.1 Optimalizace na co nejkratší dobu trvání Jedná se o nejčastější požadavek uživatelů ve vztahu k jejich konkrétní aplikaci. Důvody k této optimalizaci jsou zejména tyto: Potřeba běhu algoritmu v reálném čase (real time). Práce s rozsáhlým zdrojovým kódem. Spolupráce více aplikací (nalezení nejslabšího článku). Propojení s měřicími kartami, přístroji aj. Zajímavé bude uvést nejčastější příčiny zpomalování kódu: Neoptimální části kódu (zkušenost uživatele). Zpracování velkých objemů dat. Obsluha objektů GUI (grafické uživatelské rozhraní) včetně kreslení a správy grafických výstupů. Volání externích m-souborů (scriptů, funkcí). Čekání na vstupy, přerušení, obsluha periferií apod. Případný síťový provoz. Další příčiny. 2.2 Přizpůsobení doby trvání algoritmu Důvodem k přizpůsobení, často k mírnému zpomalení doby trvání zdrojového kódu jsou zejména tyto: Potřeba vizualizace a animace grafických výstupů. Volání externích aplikací. Spolupráce s hardware, resp. obsluha komunikačních rozhraní. Obsluha objektů GUI (čekání na událost), obecně obsluha vstupů. Další příčiny. Praxe v MATLAB ukazuje, že zejména práce s grafy a obsluha objektů GUI je někdy velmi obtížně řešitelná a výrazně prodlužuje dobu běhu algoritmu. Platí zde, že mnohdy je numerická část algoritmu již ukončena, ale systém stále čeká na odezvu, např. kreslí grafy. Podobných zkušeností s různými prioritami obsluhy je více, např. obsluha zvukové karty.

P2 K. Zaplatílek: Vybrané problémy časové optimalizace Je-li požadavek na animaci grafických výstupů, tedy aby uživatel očima stíhal sledovat dynamické změny grafů, je často třeba zařadit do kódu pauzy, které, byť velmi malé, mohou ve výsledku celý algoritmus časově významně prodloužit. Pomocí dvojice příkazů tic, toc lze velmi efektivně měřit nejen dobu trvání celého zdrojového kódu, ale především jeho vybraných částí. Příkaz tic umístíme před vybranou část kódu, toc poté za něj, jak dokládá obr. 3. 3 Měření doby trvání algoritmu V prostředí MATLAB existuje několik možností, jak přesně změřit dobu běhu algoritmu nebo jeho části. V praxi se osvědčily zejména tyto příkazy: profile. tic, toc. Příkaz profile on, který předchází spuštění měřené aplikace, startuje poměrně rozsáhlý systém pro detailní zobrazení časového snímku celé aplikace, včetně vnitřních či externích m-souborů. Podle zkušeností je vhodný zejména pro delší a komplikovanější kódy, neboť umožňuje měřit jak celkový čas, tak podíl jednotlivých řádků, resp. příkazů kódu. Obr. 1. Měření časového snímku aplikace příkazem profile. Na obr. 1 je ukázáno použití příkazu profile k měření a zobrazení časového snímku poměrně rozsáhlé aplikace Solar_Model_01.m. Pomocí profile on je celý systém nastartován na pozadí a díky profile viewer dojde k zobrazení grafického výstupu po ukončení aplikace podle obr. 2. Obr. 3. Práce s příkazy tic a toc pro měření doby trvání části kódu. Po spuštění aplikace je ve Workspace automaticky vypsána informace o době trvání vybrané části kódu. Zmíněná dvojice příkazů je vhodná zejména pro tzv. provozní měření během ladění aplikace anebo pro přímé srovnání více variant algoritmu. Výstup je také informačně střídmý, což jistě přispívá k atraktivitě tohoto způsobu měření času. Předností je také možnost vícenásobného použití v rámci jedné aplikace. K dalším příkazům z této oblasti náleží např. cputime, etime, clock, datenum, datevec, now. 4 Vlastní optimalizace algoritmu S vědomím výše popsaného se v této kapitole věnujeme optimalizaci na co nejkratší čas běhu aplikace. Na základě mnohaletých zkušeností s množstvím odladěných aplikací různého druhu se zaměříme na vybrané, často používané programátorské techniky. Pro vlastní měření použijeme popsané příkazy tic, toc. Obr. 2. Vybrané části časového snímku aplikace s využitím příkazu profile. V horní části obr. 2 je počátek výpisu časového snímku jako odezva příkazu profile viewer. Spodní část ukazuje vybranou nabídku po kliknutí uživatele na řádek s názvem Solar_Model_01 z horní části grafu. Je zde vidět podíl jednotlivých řádku na celkové době trvání kódu. Uživatel poté může provádět optimalizaci, je-li to třeba. Po kliknutí na vybraný řádek jsou dostupné podrobnější informace. Příkaz profile má k dispozici ještě několik dalších možných parametrů, viz help profile. 4.1 Indexování vektorů a matic Vektory a matice patří v prostředí MATLAB k nejčastěji používaným datovým objektům. Omezíme se na základní, v praxi nejrozšířenější dimenze s vědomím, že nabyté zkušenosti budou plně aplikovatelné také na vícerozměrné matice, a dále i na další datové typy jako např. Cell Array a Structure Array. Indexování vektorů a matic je úsporná technika, umožňující efektivní práci s jednotlivými prvky matic nebo jejich skupinami. Nahrazuje jinak běžně používané cykly, v prostředí MATLAB dosažitelné díky dvojici příkazů for, end. Lze předpokládat, že klasické, zejména vícenásobné cykly budou ve výsledku pomalejší. V dalším textu se zaměříme na práci s maticemi. Aplikace na vektory je jednoduchou modifikací.

K. Zaplatílek: Vybrané problémy časové optimalizace P3 Zajímavá situace nastane, pokud v obr. 4 za příkaz na řádku č. 7 zapíšeme dva příkazy: [a,b]=size(a); B=zeros(a,b); Matice B je tedy předem vytvořena ze samých nul. 1200 Poměr doby trvání algoritmu s cykly a s indesováním 1000 800 t c /t i [-] 600 400 200 0 10 1 10 2 10 3 10 4 Rozměr testovací čtvercové matice N [-] Obr. 5. Výsledky měření doby trvání algoritmu podle tab. 1. Obr. 4. Aplikace pro testování techniky indexování matic. Měření ukazují, že se výpočet pomocí cyklu významně zkrátí. Průběh poměru obou změřených dob má podle tab. 2 menší rozptyl, avšak jednotlivé doby jsou výrazně kratší, a to zejména pro vyšší dimenze matice. Na obr. 4 je zdrojový text jednoduché aplikace pro testování doby trvání kódu, který provádí přehození řádků a sloupců čtvercové matice s rozměrem (dimenzí) N = 10, získané příkazem magic. Příkazy tic, toc jsou použity dvakrát, a to jak pro cykly, tak i pro techniku indexování. Číselné údaje změřených dob jsou aritmetickými průměry mnoha měření. Pro potlačení vlivu konkrétního počítače jsou výsledky shrnuty do poměru, viz tab. 1. Tab. 1. Doba trvání algoritmu s cykly a s použitím indexování. N [-] t c [s] t i [s] t c / t i 10 0,000028 0,000009 3,111 20 0,000105 0,000010 10,500 30 0,000149 0,000015 9,933 40 0,000178 0,000018 9,889 50 0,000305 0,000019 19,023 100 0,001110 0,000025 44,400 1000 0,847900 0,003575 237,175 2000 7,637721 0,015468 493,776 5000 118,200240 0,103602 1140,709 Výsledky mnoha experimentů s různými dimenzemi N lze shrnou takto: Mírné kolísání doby trvání při jednotlivých spuštěních algoritmu. Výrazná úspora času metodou indexování s rostoucím řádem matice (od přibližně N = 30 je rozdíl již řádový). Průběh poměru obou změřených dob je na obr. 5. Vzhledem k většímu rozptylu dimenzí testovací matice byla při kreslení zvolena logaritmická vodorovná osa příkazem semilogx. Tab. 2. Zrychlení algoritmu vytvořením matice předem pomocí zeros. N [-] t c [s] t i [s] t c / t i 10 0,000008 0,000100 0,800 20 0,000023 0,000015 1,533 30 0,000034 0,000016 2,125 40 0,000058 0,000018 3,222 50 0,000107 0,000020 5,350 100 0,000303 0,000040 7,575 1000 0,027850 0,003818 7,294 2000 0,151047 0,015002 10,068 5000 0,958488 0,142504 6,724 Indexování matic výrazně zkracuje dobu trvání algoritmu; je tedy vhodné pro práci především s rozsáhlými soubory dat. Další úsporou času je vytvoření případných cílových matic před výkonnými částmi algoritmů. 4.2 Řetězení příkazů Některé příkazy pro práci s maticemi lze řetězit. Jde především o výpočet celkového maxima, minima a součtu všech prvků. Na obr. 6 je aplikace, upravená pro výpočet součtu všech prvků matice A. Výpočty jsou celkově o něco méně výpočetně náročné, jak dokládá tab. 3. Poměr obou měřených dob je poměrně nízký v porovnání s výsledky v tab. 1. Pro dimenzi matice N = 10 vychází dokonce použití cyklů mírně příznivěji. Dále se situace obrací a pro N > 100 dochází postupně k řádové a větší převaze řetězeného příkazu sum(sum(a)). Analogická situace platí pro určení celkového maxima či minima příkazy max(max(a)) a min(min(a)).

P4 K. Zaplatílek: Vybrané problémy časové optimalizace Obr. 6. Tab. 3. Řetězení příkazů pro výpočet součtu všech prvků matice. Výpočet součtu prvků matice cykly a indexováním. N [-] t c [s] t i [s] t c / t i 10 0,000009 0,000013 0,692 20 0,000017 0,000014 1,214 30 0,000023 0,000012 1,917 40 0,000047 0,000015 3,133 50 0,000066 0,000017 3,882 100 0,000223 0,000028 7,964 1000 0,010942 0,000972 11,287 2000 0,043547 0,003719 11,709 5000 0,270122 0,022456 12,029 Poznamenejme, že indexování lze využít také např. k rychlé změně hodnot prvků a zejména jejich velkých skupin. Tak např. vynulujme určitou vnitřní část matice A příkazem: A(3:end-2,3:end-2)=0; V porovnání s cykly zde zjistíme podobnou situaci, jak výše popsáno. Podle předpokladu řetězení příkazů přináší výraznou úsporu doby trvání algoritmu, zejména pro větší objemy dat. 4.3 Příkazy pro kreslení Omezíme se na kreslení 2D čárových (line) grafů. V ostatních případech platí výsledky analogicky. Intuitivním příkazem pro kreslení je plot. Na obr. 7 je aplikace pro tvorbu vektoru zadané délky a kreslení dvěma metodami (příkazy). Byl vytvořen vektor v dimenze N příkazem rand. Pro vyloučení nežádoucích časů byly oba objekty pro kreslení (plátna) vytvořeny před vlastním měřením času pomocí příkazů figure. Výsledky jsou tentokrát velmi průkazné, neboť pro N = 10 vyšlo: t plot = 0,129099 s a t line = 0,000623 s. Poměr obou dob má hodnotu 207,722. Samotný příkaz line je tedy výrazně rychlejší, nehledě na to, že umožňuje definovat více dalších volitelných parametrů, např. tzv. parent, tedy mateřský grafický objekt axes, v jehož rámci bude graf kreslen. Zajímavé je, že uvedený časový rozdíl se v principu již nemění ani při výrazně vyšší dimenzi vektoru N. Použití nízkoúrovňového příkazu pro kreslení čárových grafů line přináší oproti plot výraznou úsporu času. Obr. 7. Kreslení čárového 2D grafu příkazy plot a line. Zdůrazněme, že kreslení příkazem stem poskytne podobné výsledky jako plot. Je zřejmé, že existují situace, kdy nemáme podobnou alternativu, např. při kreslení plošných grafů. Přesto lze s využitím výše uvedených zásad často výrazně kód urychlit. Při kreslení platí ještě více zásad, které mohou zefektivnit výsledný kód. Např. při opakovaných kresleních (animace) je účelné, kromě použití příkazu line, používat příkaz set pro změnu vykreslovaných dat. Vyvarujeme se tak opakovanému použití line, což opět může práci významně urychlit. 4.4 Práce s externími m-soubory Poměrně častým případem je potřeba v rámci jednoho m-souboru volat jiné, ať již skripty nebo funkce. Je pak otázkou volby priorit ve vztahu ke konkrétnímu řešenému problému, zda celý zdrojový kód zapsat do jednoho souboru, anebo do více menších, avšak přehlednějších aplikací. Volba jednoho rozsáhlejšího souboru vždy vede k rychlejšímu kódu, neboť systém při volání externího algoritmu musí soubor z disku otevřít, vykonat kód a opět jej uzavřít (nemusíme ani měřit). Takové kódy však mohou být od určité délky obtížněji spravovatelné (rozsáhlost, množství proměnných). Naopak, více menších souborů, i přes pomalejší kód, může uživateli poskytnout přednosti ve snadnější správě kódu. Tato situace je palčivá zejména v případě, kdy potřebujeme mnohonásobně volat nějakou funkci. Dobrým kompromisem je zápis více funkcí (u scriptů to nelze) do jednoho m-souboru podle obr. 8. Jedna funkce je hlavní a v jejím těle jsou volány další, v dolní části kódu zapsané funkce. Volání lze samozřejmě různě provazovat. Tento způsob je při rozsáhlejších aplikacích v praxi vyzkoušený a kombinuje poměrně vysokou rychlost kódu s jeho poměrně snadnou správou a přehledností. Měření zde nejsou provedena, záleží vždy na konkrétní povaze a složitosti kódu.

K. Zaplatílek: Vybrané problémy časové optimalizace P5 typ proměnné, neošetřené nesmyslné zadání obsluhou, dlouhé výpisy proměnných - chybějící středník, množství podmíněných skoků, aj.). Tzv. verzování m-souborů, tedy pořádek ve verzích aplikací. Důsledný zápis vysvětlujících poznámek, zejména do dlouhých kódů včetně použití záložek. Důsledné vícenásobné zálohování (nad rámec ladění). Praxe ukazuje, že zejména mladší uživatelé často opomíjejí některé z výše uvedených kroků. S nabývajícím objemem svých algoritmů tak často ztrácejí drahocenný čas hledáním souvislostí a významu proměnných. Také mají často problém vyznat se v různých variantách a verzích svých děl, jak dokládá téměř denní praxe. Obr. 8. Práce s více funkcemi v jednom m-souboru. Zápisem více funkcí do jednoho m-souboru je často zachována přehlednost při poměrně slušné rychlosti. 4.5 Práce s grafickými objekty GUI Obsluha grafických objektů v rámci grafického uživatelského rozhraní (GUI) znamená často zápis a čtení jejich obsahu a stavu (objekty uicontrol typu push, edit, text, radiobutton, checkbox, slider, popupmenu, listbox, aj.). Obsahy paměti těchto objektů vyžadují v mnoha případech konverzi proměnné typu double (číslo) na textový řetězec (string) a naopak. Celkově platí, že obsluha těchto objektů je často výrazně pomalejší než běžné numerické části zdrojových kódů. Je-li kód bohatý na tyto grafické objekty, klade značné nároky na výpočetní rychlost celého mateřského počítače, především grafického adaptéru. Zkušenost nám říká, že tato omezení nelze často obejít a optimalizovat tyto části kódů na rychlost je značně obtížné, ne-li nemožné. Částečným řešením je tvořit grafické objekty s rozvahou, spíše jimi šetřit. Jde o událostmi řízené programování, proto zde můžeme hovořit spíše o přizpůsobení doby běhu zásahům uživatele (obsluhy), než o striktní časové optimalizaci ve smyslu zrychlení. Je také vhodné oddělit část kódu s GUI od zbylé části celého algoritmu. Připomeňme, že při programování GUI platí více než jinde apel na srozumitelnost kódu a ošetření nežádoucích případů a stavů. Celá aplikace se může snadnou kousnout, tedy zatuhnout, neboť na pozadí může probíhat nesprávně ošetřená obsluha grafických objektů. Práce s GUI proto vyžaduje jistou zkušenost. Mimoto pokud čtenář někdy pracoval s aplikací, odladěné na monitoru s velkou úhlopříčkou a vysokým rozlišením a poté s ní přešel na širokoúhlý notebook s menším rozlišením, jistě bude souhlasit, že i toto hledisko je při práci s GUI důležité. 4.6 Důsledné ladění zdrojového kódu Důsledným laděním kódu zde máme na mysli zejména tyto kroky: Ošetření kritických stavů (přetečení indexů matic, dělení nulou, neexistující či přepsané proměnné, změněná cesta do složky na disku, nevhodný datový 4.7 Shrnutí možných cest optimalizace algoritmů Jistě existují další zásady, jak zrychlit zdrojový kód. Pokud však zůstaneme na poli technicky orientovaných uživatelů bez předchozího programátorského vzdělání, můžeme slovně uvést tyto použitelné a vyzkoušené postupy či techniky: Dobrá znalost základů práce v prostředí MATLAB. Porozumění všem částem kódu, zejména těm přejatým. Pečlivé ladění s využitím měření časového snímku. Vícenásobné ověření funkčnosti aplikací. Ověření správné verze systému MATLAB, zejména zpětné kompatibility a potřebných toolboxů. Překlad zdrojového kódu do samo-spustitelné aplikace (*.exe), resp. do knihoven a částí jiných jazyků a vývojových prostředí (vyžaduje zvláštní toolbox). Volba dostatečně výkonného hardware, je-li to možné. Samostatnou kapitolou je spolupráce s externím hardware v podobě měřicích karet, přístrojů nebo procesorových systémů a hradlových polí. Zde kromě potřeby speciálních toolboxů je třeba vzít v úvahu povahu spolupracujícího hardware právě s ohledem na rychlost. V poslední době jsou součástí volitelných knihoven MATLAB, resp. Simulink také nástroje pro optimalizaci a verifikaci kódu. Jejich zaměření je však speciální a v případě potřeby je nutné se s nimi předem dobře seznámit. Poznamenejme, že tvořit grafické objekty GUI lze buďto ručně anebo s využitím grafické podpory, dostupné příkazem guide. První způsob vede na optimální kód vzhledem k požadavkům uživatele, druhý případ je názornější a tvorba kódu rychlejší, avšak mnohdy na úkor srozumitelnosti, zejména u rozsáhlejších projektů. Výběr je vždy na uživateli. 5 Závěr Článek je věnován vybraným aspektům časové optimalizace zdrojového kódu v prostředí systému MATLAB. Jsou rozebrány základní možnosti optimalizace a hlavní příčiny neoptimálního běhu algoritmů z hlediska časové náročnosti. S využitím dvou základních technik měření času jsou rozebrány vybrané programovací techniky a postupy pro zrychlení algoritmů. Na základě zkušeností jsou prezentována hlavní doporučení pro vyvarování se chyb při programování. Článek je určen zejména, ale nejenom, mladším, především technicky orientovaným uživatelům MATLAB.

P6 K. Zaplatílek: Vybrané problémy časové optimalizace Poznámky Článek vznikl v rámci řešení projektu ZRO-K217 na Univerzitě obrany v Brně. MATLAB a Simulink jsou registrovanými ochrannými známkami společnosti The MathWorks, Inc. Literatura [1] Zaplatílek, K. MATLAB : Průvodce začínajícího uživatele. 1. vyd. Brno: Tribun EU, 2011. [2] Zaplatílek, K. MATLAB : Začínáme s grafy 2D a 3D. 1. vyd. Brno: Tribun EU, 2012. [3] Zaplatílek, K. MATLAB : Začínáme se systémy. 1. vyd. Brno: Tribun EU, 2011. [4] Zaplatílek, K., Doňar, B. MATLAB : Začínáme se signály. 1. vyd. Praha: BEN-Technická literatura, 2006. [5] Grepl, R. Kinematika a dynamika mechatronických systémů. 1. vyd. Brno: Akademické nakladatelství CERM, 2007. [6] Šulc, B., Vítečková, M. Teorie a praxe návrhů regulačních obvodů. 1. vyd. Praha: BEN-Technická literatura, 2008. [7] Hanselman, D., Littlefield, B. Mastering MATLAB 7. Pearson Prentice-Hall, 2007. [8] Smith, S. T. MATLAB. Advanced GUI Development. Dog Ear Publishing, 2006. [9] Mathews, J. H., Fink, K. K. Numerical Methods Using MATLAB. Pearson Prentice-Hall, 2004. Konference RADIOKOMUNIKACE 2014 22. - 24. října 2014, Pardubice Letošní ročník této konference s více než třicetiletou tradicí je připraven nabídnout širší odborné veřejnosti z okruhů provozovatelů, uživatelů, investorů i z oblasti vědeckovýzkumné aktuální průřezový rozhled po vývoji, současném stavu a výhledech klíčových odvětví oboru radiokomunikací, a to včetně výsledků výzkumu a informací o technologických a aplikačních novinkách. Konference se opět uskuteční pod záštitou Ing. Mgr. Jaromíra Nováka, předsedy Rady Českého telekomunikačního úřadu. Připravovaný program má jako první zařazen blok příspěvků věnovaných problematice televize a rozhlasu ve světle zvažování nových způsobů využití rádiového spektra, které jsou umožněny v podmínkách tzv. digitální dividendy a nasazování nových standardů a technologií. S tím souvisí regulační záměry, které na národní úrovni odrážejí mezinárodní vývoj a jasně dokládají důležitost i nutnost zasvěcené a efektivní správy rádiového spektra. Připravované příspěvky uvedou v tomto kontextu aktuální stav digitálního vysílání u nás, problematiku přechodu na vyšší standard DVB-T2, situaci v regionálním vysílání a pohled regulátora na očekávaný vývoj rozhlasové služby. Tradičně budou uvedeny aktuální novinky v televizním vysílání a jako nová témata se představí možnosti služeb poskytovaných v rámci vysílání DRM+ a otázky koexistence systémů LTE a DVB-T včetně praktických zkušeností z měření. Navazující část programu uvede skupinu témat zabývajících se pokročilými architekturami rádiového přenosu (LTE-A, akcelerace fenoménu M2M, mobilní komunikace 5G, systémy MAS s více anténami) a o jejich vzájemném ovlivňování s ostatními rádiovými přenosy. V závěrečném programovém bloku věnovaném specifickým aplikacím zazní příspěvky o novinkách v letecké komunikaci a navigaci, o asistivních radiokomunikačních technologiích, o nových elektronických strukturách a materiálech využitelných v radiokomunikacích i o sledování elektromagnetického záření z vesmíru. První den konference bude uzavřen panelovou diskusí navazující na přednesené příspěvky a zaměřenou především na technické, provozní a regulační otázky televize, rozhlasu i elektronických sociálních sítí a výhledy do budoucna. Konference bude zpestřena několika firemními prezentacemi a výstavkami. Odborná garance: Ing. Pavel Gregora Organizační zajištění: UNIT s.r.o., Gorkého 2573, 530 02 Pardubice tel., fax: 466 303 032, e-mail: unit@unit.cz, www.unit.cz