• Nebyly nalezeny žádné výsledky

Zhodnocen´ı pouˇ zit´ı prostˇ red´ı CUDA

...

unsigned int rovnic = 5; //pocet rovnic

definice vstupn´ıch v´ystupn´ıch pol´ı a jejich inicializace ...

u_data[uX_pos] = uX; //umistim hodnoty do pole vstupu

u_o_data[uX_pos] = uX; //i do pole vystupu, uX se nikde nemeni //volani kernel˚u

Zb´yv´a dodat, ˇze pro n´avrh programu byla pouˇzita Eulerova metoda ˇreˇsen´ı diferenci´aln´ıch rovnic. Uveden´y algoritmus vych´az´ı z dˇr´ıve uveden´eho algoritmu spojit´e simulace. V pseu-dok´odu nejsou zahrnuty funkce pro kopii lok´an´ıch dat do pamˇeti zaˇr´ızen´ı.

5.4 Zhodnocen´ı pouˇ zit´ı prostˇ red´ı CUDA

S navrˇzen´ym programem popsan´ym v pˇredchoz´ı kapitole jsem provedl nˇekolik experiment˚u.

Jako prvn´ı jsem zkouˇsel, zda bude takto sestaven´y v´ypoˇcet fungovat pro veden´ı tvoˇren´e pouze jedn´ım dvojbranem. Uk´azalo se, ˇze program d´aval pˇribliˇznˇe tyt´eˇz v´ysledky jako TKSL, proto jsem zv´yˇsil poˇcet dvojbran˚u (a tedy rovnic) na 5.

Na grafech 5.2 a 5.3 jsou zachyceny vypoˇcten´e pr˚ubˇehy napˇet´ı na prvn´ımuc1a posledn´ım uc5elementu veden´ı. Tyto v´ysledky jsou srovnateln´e s v´ysledky z programu TKSL, nicm´enˇe i zde uˇz se projevily drobn´e nepˇresnosti ve v´ypoˇctu. Tyto nepˇresnosti jsou zp˚usobeny jednak volbou numerick´e metody (Eulerova) a tak´e zaokrouhlovac´ımi chybami v pr˚ubˇehu v´ypoˇctu.

Protoˇze v´ysledky lze oznaˇcit za relativnˇe dobr´e, zv´yˇsil jsem poˇcet rovnic na 100 a opˇet zkoumal obdrˇzen´e v´ysledky. V´ysledky tohoto experimentu zn´azorˇnuje graf 5.4.

Jak je z grafu vidˇet, pr˚ubˇehy napˇet´ı jsou vysoce nestabiln´ı, naplno se projevily chyby metody a pouˇzit´a pˇresnost ˇc´ısel v plovouc´ı ˇr´adov´e ˇc´arce typu float. Jak jiˇz bylo uvedeno

Obr´azek 5.2: Pr˚ubˇehy napˇet´ıuc1 a uc5

Obr´azek 5.3: Detail pr˚ubˇehu napˇet´ı

Obr´azek 5.4: Pr˚ubˇehy napˇet´ı pro 100 dvojbran˚u

v kapitole 4.3.3, CUDA v souˇcasnosti pouˇz´ıv´a pouze typfloat a typ double, kter´y by se l´epe pro tento druh v´ypoˇct˚u hodil, je na tento typ internˇe konvertov´an.

D´ale jsem zkouˇsel zmenˇsovat d´elku kroku, coˇz ovˇsem nepˇrineslo ˇz´adn´e rozumn´e v´ysledky.

Experiment´alnˇe se uk´azalo, ˇze maxim´aln´ı moˇzn´y poˇcet rovnic, kter´y jeˇstˇe d´aval stabiln´ı ˇreˇsen´ı, byl 5 rovnic, tedy toto ˇreˇsen´ı bylo schopno analyzovat chov´an´ı 5ti dvojbran˚u.

Celkovˇe tedy lze ˇr´ıci, ˇze z hlediska stability takto napsan´y program s pouˇzit´ım CUDA nevyhovuje pro vˇetˇs´ı poˇcty ˇreˇsen´ych rovnic. Z hlediska pˇresnosti v´ypoˇctu CUDA rovnˇeˇz nen´ı moment´alnˇe vhodn´ym n´astrojem, protoˇze pouˇzit´a maxim´aln´ı pˇresnost ˇc´ısel v plovouc´ı ˇr´adov´e ˇc´arce je pro tento typ v´ypoˇctu nedostaˇcuj´ıc´ı.

Moˇzn´ym teoretick´ym ˇreˇsen´ım by mohlo b´yt pouˇzit´ı vlastn´ı aritmetiky, nicm´enˇe tato problematika je nad r´amec t´eto pr´ace.

Kapitola 6

Srovn´ an´ı se svˇ etov´ ymi standardy

Pˇri srovn´av´an´ı pr´ace v syst´emu CUDA a TKSL jsem se zamˇeˇril i na srovn´av´an´ı se standardy dneˇsn´ı doby, kter´e tvoˇr´ı pˇrev´aˇznˇe produkty Matlab a Maple. V pˇr´ıpadˇe obou produkt˚u jde o vysoce cenˇen´a prostˇred´ı, kter´a jsou schopna ˇreˇsit ˇsirokou ˇsk´alu probl´em˚u.

6.1 Zad´ av´ an´ı a ˇ reˇ sen´ı diferenci´ aln´ıch rovnic

Nejprve se zamˇeˇr´ım na zp˚usob zad´av´an´ı diferenci´aln´ıch rovnic do jednotliv´ych syst´em˚u.

6.1.1 TKSL/386 a TKSL/c

V pˇr´ıpadˇe n´astroje TKSL, je tato problematika jistˇe patrn´a z pˇredchoz´ıho textu. Dife-renci´aln´ı rovnice se intuitivnˇe zap´ıˇs´ı - z´apis jako takov´y se neliˇs´ı v prostˇred´ı TKSL/386 a TKSL/c, nicm´enˇe ”program” pro TKSL/c je ponˇekud zjednoduˇsen - odpadaj´ı deklarace promˇenn´ych a pˇrech´az´ı se rovnou k zad´av´an´ı probl´emu. Takto tedy vypad´a program v prostˇred´ı TKSL/386:

var u1, uc1, i2,i1, ic1, u2;

const R1=100, R2=100, Rs=1e-3, Rp=1e+10, C =1e-12, L =1e-8, dt=1e-5, tmax=1e-6, eps=1e-10, omega=1e7;

system

i1=1/R1*(u1-uC1);

uc1’= 1/C*ic1 &0;

...

sysend.

V prostˇred´ı TKSL/c pak odpad´a ˇc´ast deklarace promˇenn´ychvar a z pˇredchoz´ıho pˇr´ıkladu tak z˚ust´av´a zachov´ana pouze sekce const, avˇsak bez tohoto kl´ıˇcov´eho slova a bez kon-stant tmax, eps a dt, kter´e se zad´avaj´ı jako parametry pˇr´ıkazov´e ˇr´adky. Odpadaj´ı rovnˇeˇz

syst´emov´e z´avorky system a sysend. Z´apis samotn´ych diferenci´aln´ıch rovnic se pak jiˇz neliˇs´ı.

6.1.2 Matlab

V prostˇred´ı Matlab je v´yhodn´e zad´avat diferenci´aln´ı rovnice formou blokov´eho schematu.

Zde se pouˇzij´ı stavebn´ı bloky jako integr´ator, sum´ator, invertor, apod. Sestaven´e schema se pak d´a velmi jednoduˇse odsimulovat. U vˇsech pouˇzit´ych komponent lze nastavit, zda budou tyto vyuˇz´ıvat invertovan´e ˇci neinvertovan´e vstupy.

Uvaˇzujme pˇr´ıklad, kdy budeme cht´ıt generovat funkci sinus za pomoci diferenci´aln´ı rovnice (resp. soustavy diferenci´aln´ıch rovnic). Lze ps´at

y = sin(t) y0 = cos(t) y00 = −sin(t),

(6.1) coˇz lze upravit na

y00=−y. (6.2)

Dostali jsme tedy tzv. tvoˇr´ıc´ı diferenci´aln´ı rovnici. Tuto diferenci´aln´ı rovnici druh´eho ˇr´adu lze ˇreˇsit napˇr. metodou sniˇzov´an´ı ˇr´adu derivace. Pro n´azornost je diferenci´aln´ı rovnice 6.2 jeˇstˇe pˇrevedena na oper´atorov´y tvar. Metodou sniˇzov´an´ı ˇr´adu derivace dostaneme

py = −1 pp2y y = 1

ppy

s poˇc´ateˇcn´ımi podm´ınkami py(0) = 1 a y(0) = 0. Pro takovouto soustavu diferenci´aln´ıch rovnic jiˇz nen´ı probl´em sestavit blokov´e schema v prostˇred´ı Matlab, viz. blokov´e schema na obr´azku 6.1. ˇReˇsen´ı takov´eto diferenci´aln´ı rovnice zadan´e blokov´ym schematem je pak

Obr´azek 6.1: Blokov´e schema diferenci´aln´ı rovnice generuj´ıc´ı funkci sinus

v grafu 6.2.

Matlab jako takov´y vˇsak pro ˇreˇsen´ı, na rozd´ıl od prostˇred´ı TKSL, nepouˇz´ıv´a Taylorova rozvoje a nedosahuje takov´e pˇresnosti ˇreˇsen´ı, jako pr´avˇe syst´em TKSL.

Obr´azek 6.2: Graf ˇreˇsen´ı generuj´ıc´ı funkce sinus

6.1.3 Maple

Prostˇred´ı Maple se na prvn´ı pohled od prostˇred´ı Matlab liˇs´ı. Jedn´a se hlavnˇe o matematick´y software, nen´ı zde probl´em ˇreˇsit soustavy n rovnic o n nezn´am´ych, apod. Maple rovnˇeˇz zvl´ad´a ˇreˇsen´ı integr´al˚u, derivac´ı i diferenci´aln´ıch rovnic. Pro potˇreby ˇreˇsen´ı Maple obsahuje i sadu pˇr´ıkaz˚u pro vizualizaci spoˇcten´ych v´ysledk˚u.

Uvaˇzujme tedy pˇr´ıklad diskutovan´y v pˇredchoz´ı kapitole zab´yvaj´ıc´ı se prostˇred´ım Matlab, tj. ˇreˇsen´ım diferenci´aln´ı rovnice druh´eho ˇr´adu

y00+y= 0 (6.3)

s poˇc´ateˇcn´ımi podm´ınkami y(0) = 0 a y0(0) = 1. Z´apis tohoto probl´emu v prostˇred´ı Maple by mohl vypadat n´asledovnˇe:

> restart;

> de := diff(y(t), t$2) + y(t) = 0;

> Y := rhs( dsolve( {de, y(0) = 0, D(y)(0) = 1}, y(t) ) );

> plot(Y, t = 0..(5*Pi/2));

V´ysledn´y graf ˇreˇsen´ı t´eto diferenci´aln´ı rovnice je pak zobrazen v Obr´azku 6.3.