ben18785
ben18785

Reputation: 356

c++: passing Eigen-defined matrices to functions, and using them - best practice

I have a function which requires me to pass a fairly large matrix (which I created using Eigen) - and ranges from dimensions 200x200 -> 1000x1000. The function is more complex than this, but the bare bones of it are:

#include <Eigen/Dense>

int main()
{
    MatrixXi mIndices = MatrixXi::Zero(1000,1000);
    MatrixXi* pMatrix = &mIndices;
    MatrixXi mTest;

    for(int i = 0; i < 10000; i++)
     {
           mTest = pMatrix[0];
           // Then do stuff to the copy

     }
}

Is the reason that it takes much longer to run with a larger size of matrix because it takes longer to find the available space in RAM for the array when I set it equal to mTest? When I switch to a sparse array, this seems to be quite a lot quicker.

If I need to pass around large matrices, and I want to minimise the incremental effect of matrix size on runtime, then what is best practice here? At the moment, the same program is running slower in c++ than it is in Matlab, and obviously I would like to speed it up!

Best,

Ben

Upvotes: 0

Views: 441

Answers (1)

Drew Noakes
Drew Noakes

Reputation: 311345

In the code you show, you are copying a 1,000,000 element 10,000 times. The assignment in the loop creates a copy.

Generally if you're passing an Eigen matrix to another function, it can be beneficial to accept the argument by reference.

It's not really clear from your code what you're trying to achieve however.

Upvotes: 1

Related Questions