큰 행렬에 Eigen을 사용하고 동적 메모리 할당을 줄이는 데 중점을두고 코드를 최적화하는 방법을 고려하고 있습니다.Eigen의 복사 곱셈 없음
두 개의 행렬을 곱하려고합니다. 그 행렬들은 때때로 조금씩 바뀌지 만 그 크기는 동일하게 유지됩니다.
곱셈의 결과가 미리 정의 된 행렬 (메모리가 이미 할당되어 있음)로 이동하는 것을보고 싶습니다. 그런 것 그리고 내가 해결책을 찾고 있어요
Eigen::MatrixXd left, right,result;
// ...
result = left * right;
// ... left and right values change a little
result = left * right;
을 :
void Multiply(
Eigen::MatrixXd const& left,
Eigen::MatrixXd const& right,
Eigen::MatrixXd& result);
void Example()
{
Eigen::MatrixXd left, right, result;
// ...
Multiply(left, right, result);
// ...
Multiply(left, right, result);
}
목적은 재사용 기본적으로 그래서 여기
무엇 내가 뭘의 예 result
행렬 메모리 때문에 이론적으로 차원을 변경해서는 안됩니다. 나는 operator*=
을 사용하는 것에 대해 생각하고 있었지만 여전히 계산을 수행하기 위해 중간 행렬이 필요하다는 것을 알고 있습니다.
에서 당신은 결과가 이미 적당한 크기를 가질 때'결과 = 왼쪽 * right' 실제로 재 할당 확인 했습니까? –