call function - slow

20 views (last 30 days)
Dear users, I am struggling with optimizing the code for a project of mine and I am following the suggested practice of breaking my code in small parts with separate functions. However when I do this I get a significant loss in execution speed. Please consider the following two examples:
A)
function y = fun1(a,params)
%params is structure with several variables
b = a*2;
y = b+1;
end %end fun1
compared to
B)
function y = fun1(a,params)
%params is structure with several variables
b = fun2(a,params);
y = b+1;
end %end fun1
function b = fun2(a,params)
b = a*2;
end %end fun2
(B) is easier to maintain but for my application is 20/30% slower. (Of course the example above is a toy example). One reason could be that I have to pass to fun2 "params" which is a big structure. But using globals would be even worse, are there any other (fast) ways? Thanks!
  3 Comments
Alessandro D
Alessandro D on 18 Sep 2018
Dear guys, thanks for your answers. These are some more detail. In fun2 I need to unpack the structure params. But params itself is not modified
function y = fun1(a,params)
%params is structure with several variables
b = fun2(a,params);
y = b+1;
end %end fun1
function b = fun2(a,params)
agrid = params.agrid;
zgrid = params.zgrid;
na = params.na;
nz = params.nz;
uf = params.uf;
tranZ = params.tranZ;
amin = min(agrid); amax = max(agrid);
%Do some operations with agrid, zgrid etc.
b = a*2 + agrid.^2;
end %end fun2

Sign in to comment.

Accepted Answer

Sambit Senapati
Sambit Senapati on 21 Sep 2018
Please go through the this link which describes about performance of different types of function calls. This may help you to figure out why your code is slow.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!