150 likes | 306 Views
Profiling Ajankäytön seuranta. Profile, profile report tic/toc, cputime t=cputime; your_operation; cputime-t. How to make a program faster?. vektoroi alusta taulukot funktiot nopeampia kuin makrot käytä sisäisiä funktioita mex-tiedostot load, save nopeampia kuin file-i/o säästä muistia.
E N D
Profiling Ajankäytön seuranta • Profile, profile report • tic/toc, cputime • t=cputime; your_operation; cputime-t
How to make a program faster? • vektoroi • alusta taulukot • funktiot nopeampia kuin makrot • käytä sisäisiä funktioita • mex-tiedostot • load, save nopeampia kuin file-i/o • säästä muistia
Measuring time consumption • Esimerkki: • tic; • for k=1:100 • - run the program – • end; • toc
Profile • profile on -detail builtin -history • [t,y] = ode23('lotka',[0 2],[20;20]); • profile report
Trace of matrix function timedem1(A, kierr) % function timedem1(A, kierr) % Neliömatriisin jäljen \sum A(ll) laskemiseen kulunut aika n=size(A); n=min(n); % for-silmukalla t1 = cputime; for j=1:kierr, ta1 = 0; for l=1:n, ta1 = ta1 + A(l,l); end; end; t1 = cputime-t1;
Trace by Matlab % Matlabin trace-funktiolla t2 = cputime; for j=1:kierr, ta2 = trace(A); end T2= cputime-t2; disp(sprintf('jälki: for-silmukka %f, trace-funktio %f', ta1,ta2)) disp(sprintf('ajat: for-silmukka %f, trace-funktio %f', t1,t2))
Trace with Matlab • Ajettu 13.2002 rockissa >> tracetest(rand(1000,1000), 1000); jälki: for-silmukka 513.354863, trace-funktio 513.354863 ajat: for-silmukka 0.400000, trace-funktio 0.166667 Aika liian lyhyt!
Ajettu PC:ssä, vuosi?? profile on nopeustesti0(rand(1000,1000),1000); jälki: for-silmukka 498.075875, trace-funktio 498.075875 ajat: for-silmukka 6.950000, trace-funktio 0.060000 profreport
Test in rock 20.3.2003 profile on >> tracetest(rand(1000,1000), 1000); jälki: for-silmukka 494.591135, trace-funktio 494.591135 ajat: for-silmukka 11.800000, trace-funktio 0.233333 profile plot
part of profiling report • 100% of the total time in this function was spent on the following lines: • 11: ta1 = 0; • 0.020 0% 12: for l=1:n, • 5.697 81% 13: ta1 = ta1 + A(l,l); • 1.233 18% 14: end; • 15: end; • 19: for j=1:kierr, • 0.060 1% 20: ta2 = trace(A); • 21: end
Programming style • Write clearly • Check that results are correct. • Consider time consumption by profiling.
Jaa tehtävä selkeisiin osiin. Käytä funktioita runsaasti, mikälilaskuaika sen sallii. Funktiot voivat kutsua toisia funktioita. Valitse järkevät ja kuvaavat muuttujanimet, erityisesti globaaleillemuuttujille. Vältä turhia apumuuttujia. Laadi ehtokäskytloogi-siksi. Hyvä periaate on kirjoittaa ensimmäiseksise vaihtoehto, joka todennäköisimmin tulee valituksi. Käytä sisennyksiä. Laadi funktioille hyvät opasteet, joihin kuuluvat yleiskuvaus,syöttö- ja tulosparametrien esittelyt. Write clearly
Testaa tunnetulla datalla. Testaa rajatapaukset. Testaa syöttödatan järkevyys: rivit, sarakkeet. Laadi virheilmos älyttömälle syöttö-datalle, esimerkiksi [], NaN, inf Ohjelman oikein toimivuutta ei voi todistaa. Test the program
joustavat formaatit, älä vaadi kiinteämittaisia sarakkeitasisäänsyötössä. Sulje tiedosto niin pian kuin voit. binääri vai tekstitiedosto: tekstimuotoisettulostiedostot ovat siirrettäviä. Binääritiedostot vievät vähemmän tilaa. Use of files
vektorikäskyt ovat nopeampia kuin silmukat matriisien alustaminen silmukat funktioihin eikä funktiokutsuja silmukoissa käytä kirjastofunktioita, ne ovat nopeita myös funktioissa voi käyttääclear-käskyä harvat matriisit vältä turhia apu-taulukoita pack-käsky Time and memory