Når en M-fil bliver tilpas stor kan den tid MATLAB bruger på at udføre M-filens ordre blive så lang, at det bliver et problem. For at finde ud af hvor MATLAB bruger tiden, findes der et profileringsværktøj, som giver mulighed for at finde tidsmæssige flaskehalse i funktioner. Værktøjet giver informationer om, hvor stor en del af det totale tidsforbrug, der forbruges på hver enkelt linie i en M-fil.
Profileringsværktøjet startes med profile on, derefter køres funktionen. Kommandoen profile report genererer et HTML dokument. I dette er der både en kort oversigt hvor der bla. står det totale tidsforbrug, og en detaljeret profil af funktionen, hvor der specificeres hvor meget tid der bruges på hver enkelt programlinie. Profileringen afsluttes med profile off.
function profiex r=[];s=[]; for x=-2:0.001:2 y=1+x^3; r=[r x]; s=[s y]; end
Først fortæller man MATLAB at funktionen ønskes profileret:
profile onDernæst køres funktionen:
profiexOg tilsidst genereres en tidprofil af funktionen:
profile report, profile offHTML dokumentet startes nu automatisk op og i dette tilfælde bla. viser:
Total recorded time: 4,46smens den detaljeret profil viser:
100% of the total time in this function was spend on the following lines: 3: for x=-2:0.001:2 0.121s, 3 % 4: y=1+x^3; 2.253s, 51 % 5: r=[r x]; 2.052s, 46 % 6: s=[s y]; 0.030s, 1 % 7: endSom det fremgår er det række 5 og 6, der er flaskehalse i profiex. På disse linier udføres en omfattende dynamisk allokering af hukommelse. Hver gang løkken gennemføres skal der allokeres plads til yderligere to elementer. En god vane er derfor at allokere pladsen på forhånd. En alternativ løsning kan så komme til at se således ud:
function profiex x=-2:0.001:2; r=zeros(size(x));s=zeros(size(x)); i=0; for x=-2:0.001:2 i=i+1; y=1+x^3; r(i)=x; s(i)=y; endHvis samme procedure gentages fås nu en anderledes profil:
Total recorded time: 0,17smens den detaljeret profil viser:
100% of the total time in this function was spend on the following lines: 3: r=zeros(size(x));s=zeros(size(x)); 0.01s, 5% 4: i=0; 5: for x=-2:0.001:2 0.04s, 19% 6: i=i+1; 0.11s, 53% 7: y=1+x^3; 0.30s, 14% 8: r(i)=x; 0.01s, 5% 9: s(i)=y; 0.030s, 5% 10: endSom det se er tidsforbruget til den dynamiske allokering betydeligt nedsat, da den kun udføres en gang.
Det mest optimale program udnytter, at MATLAB er vektorielt:
function profiex x=-2:0.001:2; y=1+x.^3; r=x; s=y;Profilen for dette program er:
Total recorded time: 0.01smed den detaljeret profil:
100% of the total time in this function was spend on the following lines: 3: x=-2:0.001:2;; 0.01s, 100% 4: y=1+x.^3; 5: r=x; 6: s=y;