What is the most efficient way: load or set global variable
7 次查看(过去 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 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!