I recently started working with Matlab coder for building computer vision algorithms. I'm working on a point cloud classification problem which means that my algorithm input is a set of 3D points (x,y,z) and my output is a variable array with classified 3D points.
For this project I decided to use Matlab coder. Coder requires the developer to specify an upper bound for the memory allocation. Well here comes the problem – the set of input 3D points can be up to 250k points, and the output is ~50k points for each class. In addition to that my implementation allocates 3D grid in size up to: 600x600x120 (uint8) and few more auxilary memory that I work with. My point is that I'm working with large memory allocations.
I tried to use static allocation; however it feels like Matlab haven't build their static memory allocation for cases where the each memory allocation is around 1mb.
I set the upper memory limit to large value, and then I used Coder to generate C++ code and compiled it. The first time I run the algorithm I had a stack overflow, Then I had to enlarge the stack size to 30mb (inside visual studio), which is think is absurd.
On the other hand, I could use dynamic memory allocation. However in this case almost everything would be dynamically allocated, which is also a pain the neck due to a large allocation and de-allocation time consuming.
I wish from Matlab to write a code that would hold inside its implementation the upper bounded memory that will not change between several iterations of the algorithms. (Just like a member in C++ classes)
I'll more specific: In case my algorithm uses a grid of 600x600x120 and several images with size 600×600, I would like that Matlab Coder will generate code that would allocate these memories only once, and I'd use them on different algorithmic iterations.
I have few questions:
- How to use consecutive memory allocations between different iteration of the algorithm. (How to avoid allocation and de-allocation every iteration)
- What is a proper stack size I should set for static memory allocation (Do 1mb for static allocation is a reasonable value?)
- I thought about using global memory for this case. Would it work?
- Any suggestions how to work things out?