What is the most efficient way: load or set global variable
조회 수: 11 (최근 30일)
이전 댓글 표시
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 :).
댓글 수: 0
채택된 답변
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.
Here is a nice blog article that you should look at - http://blogs.mathworks.com/loren/2006/05/10/memory-management-for-functions-and-variables/
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
2013년 12월 31일
"global" is relatively slow. A shared variable (used by a nested function) should be faster.
추가 답변 (1개)
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Multidimensional Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!