Eigen :: SelfAdjointView :: rankUpdate медленнее, чем A + = w * w.transpose () - PullRequest
0 голосов
/ 19 октября 2018

Протестированная скорость Eigen :: SelfAdjointView :: rankUpdate с Eigen :: Matrix4d

по сравнению с наивным A + = w * w.transpose (), и она была в 2 раза медленнее.

  1. Что я делаю не так?
  2. Могу ли я ускорить эти вычисления?

1 Ответ

0 голосов
/ 19 октября 2018

Для небольших выражений фиксированного размера вы ничего не можете сохранить с помощью SelfAdjointView::rankUpdate, это скорее добавляет накладные расходы, потому что нужно убедиться, что изменяются только элементы одной половины.В вашем случае простой

A.noalias() += w*w.adjoint();

должен дать почти оптимальный код (добавление .noalias() позволяет избежать копирования во временную).

...