Global workspace usage for efficiency?
Show older comments
Are there cases when using global variables is the most efficient implementation?
I hate using the global workspace, but I end up doing it all the time. There is only one reason that I have had for doing this: performance/efficiency.
For concrete examples, I have two heavily optimized submissions on the FEX: a Particle simulator and real time motion from video
I am well aware of how JIT acceleration works, and how Matlabs in-place operations works. The functions setappdata/getappdata seem to be good candidates for replacing the use of global workspace, however consider a situation where you modify the data in the calling function. If, as are the cases in the two FEX submissions described above, I call functions often and and share large amounts of data, isnt the global workspace more efficient than other solutions?
The answer to this question in Matlab before 2007 I would say definetly yes: the global workspace is the fast, but ugly way. I dont feel to old to learn new tricks, so please enlighten me here, and the next code i make will be free of globals.
Note that milliseconds count.
Answers (2)
Walter Roberson
on 15 Jan 2016
2 votes
global is pretty much the slowest access; see http://www.mathworks.com/matlabcentral/answers/99537-which-type-of-function-call-provides-better-performance-in-matlab
However I suspect a lot of the time there is in locating the data. If you are in a mex routine you would grab the appropriate pointer and maybe data pointer as well and there would be no further cost penalty beyond copy-on-write semantics.
6 Comments
Stefan Karlsson
on 15 Jan 2016
Stefan Karlsson
on 15 Jan 2016
Walter Roberson
on 15 Jan 2016
shared variables via nested functions would be the most efficient for that case.
setappdata() has the benefit of being able to pull back a particular substructure, and so is more efficient than guidata which has to copy everything.
handle objects can also provide efficient access to data in multiple scopes -- though you do have to be careful to not allow all references to the objects to go out of scope. (Persistence of objects in MATLAB is something I have not read much about.)
Stefan Karlsson
on 16 Jan 2016
Walter Roberson
on 17 Jan 2016
I think getappdata() of a unique name should be faster than global of the same name, but I would need to test to be sure.
Stefan Karlsson
on 18 Jan 2016
Stefan Karlsson
on 20 Jan 2016
Categories
Find more on Debugging and Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!