Мне нужно разложить ~ 1e05 маленьких матриц максимальных переменных размером 20х20. Профилирование факторизации матрицы с использованием HpcToolkit показывает, что горячая точка в коде находится в Eigen::internal::partial_lu_inplace
.
Я проверил Собственную документацию по декомпозиции матрицы на месте , и я понимаю, что для больших матриц может быть важно использовать декомпозицию на месте, повторно использовать память и иметь лучшую эффективность кэширования.
В настоящее время я вычисляю разложение следующим образом:
// Factorize the matrix.
matrixFactorization_ = A_.partialPivLu();
Профилирование с помощью HpcToolkit показывает, что факторизация на месте является горячей точкой:
Можно ли отключить декомпозицию на месте и проверить, будет ли код быстрее для небольших матриц, с которыми я имею дело?
Примечание. Если вы посмотрите на процессорное время в столбце изображения, вы заметите, что время выполнения - в секундах: здесь я не оптимизирую микросекунды, вычисление занимает ~ 4 секунды.
Редактировать : HPCToolkit статистически профилирует код в полностью оптимизированном режиме -O3
, но с информацией, необходимой для сопоставления измерений с исходным кодом -g3
.