What is the most efficient way: load or set global variable

조회 수: 11 (최근 30일)
NMTri
NMTri 2013년 12월 31일
댓글: NMTri 2014년 1월 8일
I'm working with a script that calls a function several times (about 1000); in this function, a large complex-valued matrix is used, this matrix called "promat" is saved in file also named "promat.mat". To be specific, my function is following:
function y=process(x)
do something with x
y=x.*promat;
end
I think about three solutions:
+ First: load promat to work space, then set it as global variable and declare it in the function.
+ Second: load promat to work space, then set it as an input of the function as:
function y=process(x,promat)
+ Third: load the matrix inside the function.
I wonder what is the fastest and most efficient way to do it, both in memory use efficiency and performance. Any answers and discusses will be appreciated :).

채택된 답변

Amit
Amit 2013년 12월 31일
편집: Amit 2013년 12월 31일
If you don't change the values for promat inside the function, Matlab will not be allocating a new memory for promat. As long a promat serves only the purpose of being read inside your function, option second is better.
I would avoid the declaring global variable. Also loading the promat.mat inside the matrix will create extra overheads and most likely reduce performance.
  댓글 수: 3
Walter Roberson
Walter Roberson 2013년 12월 31일
"global" is relatively slow. A shared variable (used by a nested function) should be faster.
NMTri
NMTri 2014년 1월 8일
Thanks for your link and explanation. My code works well and faster with the second option.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Jan
Jan 2013년 12월 31일
Reuse the memory of x:
function x = process(x)
do something with x
x = x .* promat;
end
Then consider, that writing this question took about 2 minutes. Will the sum of the saved computing time ever exceed these 2 minutes? If not, this is a typical example of "premature optimization".
Code should be optimized, when it is written completely and tested successfully. Then profiling must identify the bottleneck, because it is a waste of time to improve a part of the program, which takes a small part of the total computing time only.
Anyway, I agree with Sean and Walter: Avoid disk access and reduce the use of globals whenever possible.
  댓글 수: 1
NMTri
NMTri 2014년 1월 8일
Thanks for the suggests about "premature optimization" and code optimization, I also considered them when writing my code and this question.
By the way, the input matrix is real, and output matrix is complex, since "promat" is complex, so is it efficient when reusing memory? I read about memory optimization in matlab and they said that we should not assign complex value to already assigned real valued matrix.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Multidimensional Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by