0

我有一个函数,它要求我传递一个相当大的矩阵(我使用 Eigen 创建的) - 尺寸范围为 200x200 -> 1000x1000。该功能比这更复杂,但它的核心是:

#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

     }
}

是因为当我将其设置为等于 mTest 时,在 RAM 中为数组找到可用空间需要更长的时间来运行更大尺寸的矩阵需要更长的时间吗?当我切换到稀疏数组时,这似乎要快得多。

如果我需要传递大型矩阵,并且我想最小化矩阵大小对运行时的增量影响,那么这里的最佳实践是什么?目前,同一个程序在 c++ 中的运行速度比在 Matlab 中慢,显然我想加快速度!

最好的,

4

1 回答 1

1

在您显示的代码中,您将 1,000,000 个元素复制 10,000 次。循环中的分配创建一个副本。

通常,如果您将特征矩阵传递给另一个函数,则通过引用接受参数可能是有益的。

但是,从您的代码中并不清楚您要实现什么。

于 2014-11-20T17:13:12.330 回答