2011-11-03 7 views
2

동적 프로그래밍을 사용하여 행렬의 중첩 된 제품 최적화에 대한 기사를 읽었으며 boost :: uBLAS에서 어떻게 구현되는지보고 싶었습니다.boost :: uBLAS는 행렬의 중첩 된 제품을 어떻게 처리합니까?

the documentation (그들은 페이지의 맨 마지막 부분에서 이에 대해 이야기합니다)을 잘 모르지만이 문제를 처리하는 것으로 보입니다. R = prod(A, prod(B,C));을 쓸 때 라이브러리는 A, BC 크기에 따라 A x (B x C) 또는 (A x B) x C을 계산합니다.

어떻게 달성 할 수 있습니까? 도서관은 어떻게 "괄호를 움직일"수 있습니까? 그러한 코드 라인을 작성할 때, 나는 prod의 인수가 평가 될 것이라고 생각하고 함수가 실행될 것이라고 생각했습니다.

FAQ에는 표현 템플릿의 개념이 언급되어 있습니다. 그것은 연결되어 있습니까?

답변

1

예, 표현식 템플릿 ("표현식 트리"라는 이름으로 볼 수 있음)이 있습니다.

기본적으로 prod은 결과를 반환하지 않지만 작업 (행렬 곱하기)을 유지하는 래퍼 객체와 두 입력에 대한 포인터를 반환합니다. prod이 입력과 같은 래퍼와 함께 호출되면 재정렬 최적화를 적용 할 수 있습니다.

그러나 해당 페이지를 읽은 후 최적화가 적용되지 않았습니다 (브라케팅 구조가 적용됨).