Как boost :: uBLAS обрабатывает вложенные продукты матриц? - PullRequest
2 голосов
/ 04 ноября 2011

Я прочитал статью об оптимизации вложенного произведения матриц, используя динамическое программирование, и хотел посмотреть, как это реализовано в boost :: uBLAS.

Я не уверен, что понял документацию (они говорят об этом в самом конце страницы), но, похоже, они решают эту проблему. Когда вы пишете R = prod(A, prod(B,C));, библиотека вычисляет A x (B x C) или (A x B) x C в зависимости от размеров A, B и C.

Как этого достичь? Как библиотека может «сдвинуть скобки»? При написании такой строки кода я думал, что аргументы prod будут оценены, а затем будет запущена функция.

В FAQ упоминается понятие шаблонов выражений. Это связано?

1 Ответ

1 голос
/ 04 ноября 2011

Да, шаблоны выражений (которые вы можете найти под названием «деревья выражений») задействованы.

По сути, prod возвращает не результат, а объект-обертку, содержащий операцию (умножение матрицы) и указатели на два входа. Если prod вызывается с такой оболочкой, как input, он может применить оптимизацию переупорядочения.

Однако, из моего прочтения этой страницы, такая оптимизация не применяется (она говорит, что учитывает структуру скобок).

...