2014-11-20 1 views
0

상당히 큰 행렬 (Eigen을 사용하여 작성한)을 전달해야하는 함수가 있으며 200x200 -> 1000x1000 크기의 범위를가집니다. 이 기능은 이것보다 더 복잡하지만, 그것의 골자는 다음과 같습니다C++ : 함수에 고유 정의 행렬 전달 및 모범 사례

#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 

    } 
} 

그것은 RAM의 사용 가능한 공간을 찾는 데 시간이 더 걸리기 때문에이 행렬의 큰 크기로 실행하는 데 훨씬 더 오래 걸리는 이유 배열을 mTest와 동일하게 설정할 때? 희소 배열로 전환하면 상당히 빠른 것 같습니다.

대용량 행렬을 전달해야하고 런타임시 행렬 크기의 점진적 효과를 최소화하려는 경우 여기서 가장 좋은 방법은 무엇입니까? 지금은 같은 프로그램이 Matlab보다 C++에서 더 느리게 실행됩니다. 분명히 속도를 높이고 싶습니다!

최저

, 당신이 보여 코드에서

답변

1

벤, 당신은 1,000,000 요소를 1 만 번을 복사. 루프의 할당은 복사본을 만듭니다.

일반적으로 고유 한 행렬을 다른 함수로 전달하는 경우 참조로 인수를 수락하는 것이 좋습니다.

그러나 코드에서 실제로 달성하려는 것은 분명하지 않습니다.

+0

안녕하세요, 몇 가지 (i, j) 항목을 살펴보기 위해 매트릭스를 사용하고 있습니다. 그런 다음이를 기반으로 숫자를 반환합니다. 나는 이제 참조로 패스를 구현했습니다. 이것은 조금 더 빠르지 만 대량은 아닙니다. 다른 아이디어? Best, Ben – ben18785

+0

더 많은 코드를 보여줘야합니다. 네가하려는 것을 정말로 모르겠다. –