MEX Code in Matlab Wrapper

Asked by Ubaid Ullah on 1 Jul 2012
Latest activity Answered by James Tursa on 1 Jul 2012

I have the following code:

for i=1:N,
    some_mex_file();
end

My MEX file does the following:

  • Declares an object, of a class I defined, that has 2 large memory blocks, i.e., 32x2048x2 of type double.
  • Processes the data in this object.
  • Destroys the object.

I am wondering if it takes more time when I call a MEX file in a loop that allocates large memory blocks for its object. I was thinking of migrating to C++ so that I can declare the object only once and just reset its memory space so that it can be used again and again without new declaration. Is this going to make a difference or going to be a worthless effort? In other words, does it take more time to allocate a memory in MEX file than to declare it once and reuse it?

0 Comments

Ubaid Ullah

Tags

Products

No products are associated with this question.

1 Answer

Answer by James Tursa on 1 Jul 2012

Yes, it does take extra time to repeatedly do the allocation/deallocation. In your current code, is this a C++ object? A MATLAB object? You can create it at the highest level, i.e. outside the mexFunction so that it can be permanent. Then register a mexAtExit function to free it when the mex function gets cleared. Or, alternatively, if it is a MATLAB object you can create it once outside the loop at the m-file level, pass that into the mex function, and operate on it in-place. But that can get tricky because of data sharing among variables, so you would need to avoid that.

0 Comments

James Tursa

Contact us