What is the most efficient way: load or set global variable
15 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposta accettata
Amit
il 31 Dic 2013
Modificato: Amit
il 31 Dic 2013
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 Commenti
Walter Roberson
il 31 Dic 2013
"global" is relatively slow. A shared variable (used by a nested function) should be faster.
Più risposte (1)
Jan
il 31 Dic 2013
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.
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!