Eigen 문서에서 표현식이 게으른 것으로 평가 될 때 정확한 설명을 찾지 못했습니다. 나를 위해, 계수 식 표현 만 흥미 롭다. 즉, 앨리어싱의 가능성이 없다.Eugens 중간 변수를 사용한 게으른 평가
예 : ArrayXXf a(10000, 10000);
후
a = a.cube() * a.cube();
는
auto aCube = a.cube();
a = aCube * aCube;
ArrayXXf aCube = a.cube();
a = aCube * aCube;
반면이 ~ 550ms의 평가와 동일 ~ 250 밀리 내 PC에 평가합니다.
표현식이 명시 적 Array 유형 (예 : ArrayXXf)에 할당되면 표현식은 항상 평가됩니까?
코드는는 MinGW 릴리스 -03
추신으로 컴파일
매트릭스도 포함됩니까? 그런 다음'matrix1.noalias() = matrix2 * matrix2;와 같은 contax에 noalias()가 필요합니까? (here : https://eigen.tuxfamily.org/dox/TopicLazyEvaluation.html) – yar
'matrix2 * matrix2'가'matrix1'에 할당 될 때'auto matrix1 = ...;'이라고 쓰지 않는 한 평가 될 것입니다. 그리고 매트릭스 제품의 경우 Eigen은 별칭이 없음을 확신 할 수 없으므로 기본적으로 임시로 평가됩니다. – chtz
, 감사합니다! – yar