Eigen: быстрый способ вычисления (A ^ T * A) для разреженного A

Я хочу решить серию задач наименьших квадратов (решатель Гаусса-Ньютона, в основном) для разреженной (crs/ccs) матрицы A. Одной из самых трудоемких операций является H = A^T * A товар. A имеют разные числовые значения, но одинаковую разреженность, поэтому разреженность H постоянна во время вычислений. Предположим, что A содержит больше строк, чем столбцов.

Мой главный вопрос: как правильно выполнить этот продукт действительно быстро? Я знаю о бесматричных решателях, но в настоящее время я хочу изучить аналитические решения.

Также у меня есть несколько небольших вопросов

1) Вычислять оптимизацию только треугольной части (разреженный разреженный продукт A^T* Оптимизация в Eigen lib) имеет смысл при наличии векторизации?

2) Как я могу сказать собственному, что разреженность H постоянна? Таким образом, eigen должен использовать уже заранее выделенный буфер и не должен проверять шаблон результата.

3) Какой порядок A и H более выгоден для H = A^T * A, основной строки или основного столбца?

Спасибо за ваши ответы, и извините за мой английский


person Dark_Daiver    schedule 25.11.2019    source источник
comment
Пункты 1+2 являются существующими (нетривиальными) запросами функций: eigen.tuxfamily. org/bz/show_bug.cgi?id=285, eigen. tuxfamily.org/bz/show_bug.cgi?id=385. Пункт 3 может зависеть от вашей реальной проблемы, хотя, как правило, я предполагаю, что перенос во временное состояние и наличие всего одинакового большинства для продукта является самым быстрым (это, по сути, делается неявно Eigen).   -  person chtz    schedule 25.11.2019
comment
И векторизация имеет смысл только в том случае, если у вас есть плотные подблоки или, возможно, с нагрузками AVX2-gather -- в настоящее время ни один из них не реализован должным образом в Eigen (подблоки фиксированного размера могут частично работать, но только экспериментально)   -  person chtz    schedule 25.11.2019
comment
@chtz большое спасибо за ответ! Так что я могу начать искать решение за пределами Eigen. Можете ли вы порекомендовать какую-либо хорошую реализацию A'A за пределами Eigen?   -  person Dark_Daiver    schedule 25.11.2019