Кэшируйте промежуточные результаты предыдущих звонков в lapacke gelsd - PullRequest
0 голосов
/ 17 октября 2018

Итерационный алгоритм вызывает LAPACKE_sgelsd в каждой итерации с одним столбцом B. Последующие вызовы часто используют одну и ту же матрицу A.Я считаю, что существенным улучшением производительности было бы кэширование или как-то еще раз использовать промежуточные результаты предыдущей итерации, когда матрица A не изменилась.Это должно быть несколько похоже на возможное усиление при пропуске нескольких столбцов для B. Это правильно?Насколько сложно это будет реализовать и как это можно сделать?Он использует openblas.Спасибо.

1 Ответ

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

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

  1. Рассчитать SVD
  2. Установить все "малые" единичные значения в ноль
  3. Инвертироватьвсе ненулевые единичные значения
  4. Умножьте три матрицы еще раз
  5. Псевдообращение - это транспонирование результата.

Результатом является псевдообращение * B.

...