かなり大きな行列 (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 よりも遅いため、明らかに速度を上げたいと考えています。
一番、
ベン