Why do some commands run faster or slower in the command line than an M.file?
6 views (last 30 days)
Show older comments
Why do some commands run faster and some slower in the command line than in an M.file?
I'm trying to speed up the time it takes my code to run. I looked at the online tutorial and generated a test script using the pre-allocating arrays example from:
If I run the loops with the index of a million (as in the example) it takes to long to run over 30 min; therefore, my test.m file loops are reduced to 100000.
When I run my code I get:
Elapsed time is 29.813208 seconds.
Elapsed time is 0.005239 seconds.
When I execute the same commands from the "command line" I get:
>> clear
>> tic;x = 0;for k = 2:100000;x(k) = x(k-1) + 5;end;toc
Elapsed time is 29.517578 seconds.
>> clear
>> tic;x = zeros(1, 100000);x = 0;for k = 2:100000;x(k) = x(k-1) + 5;end;toc
Elapsed time is 29.077256 seconds.
>>
Notice there is very little difference between in time between the first loop (not pre-allocated) and second loop (pre-allocated). Also it appears that the first loop was a little faster from the command line than from the M file.
M-file code is as follows:{
% Test.m file for checking cpu compute time W/ & w/o preallocating arrays
clear; % clear variables (for testing purposes)
clc; % clears "output" screen
tic %start stopwatch timer
x = 0;
for k = 2:100000
x(k) = x(k-1) + 5;
end;
toc %end stopwatch timer
clear; % clear variables (for testing)
tic %start stopwatch timer
x = zeros(1, 100000); % pre-allocate x
for k = 2:100000
x(k) = x(k-1) + 5;
end
toc %end stopwatch timer
}
System info: Matlab 7.5.0 (R2007b) XP Home (32 bit) on Mac Book Pro (MBP) Intel Core 2 Duo P8600 @ 2.4Ghz 2GB of ram
0 Comments
Accepted Answer
Philip Borghesani
on 27 Feb 2013
Look at your preallocated command line example you have:
x = zeros(1, 100000);x = 0;
Remove the x=0 and it will run much faster. Recent versions of MATLAB do some array growth optimization my times are:
>> tic;x = 0;for k = 2:100000;x(k) = x(k-1) + 5;end;toc
Elapsed time is 0.034959 seconds.
>> tic;x = zeros(1, 100000);for k = 2:100000;x(k) = x(k-1) + 5;end;toc
Elapsed time is 0.002369 seconds.
0 Comments
More Answers (1)
Shashank Prasanna
on 27 Feb 2013
In general in a MATLAB file the JIT has the opportunity to preallocate memory and perform other run time optimization. You will most likely see better performance running the code in a MATLAB file, you may also see better performance on repeated execution in a MATLAB file.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!