В настоящее время я пытаюсь преобразовать код Matlab в C++ с помощью броненосца. Я преобразовал некоторый код Matlab, следуя документации aramdillo, на C++. Однако производительность разочаровывает по сравнению с Matlab.
В Matlab для обращения матрицы A размера (625x625) требуется около 0,1 секунды по сравнению с более чем 3 секундами в C++.
В С++ я пробовал оба
solve()
так же как
inv()
Я знаю, что inv дает менее точные результаты, поэтому я не предпочитаю его использовать. Кроме того, мне действительно нужна обратная матрица A, так как я использую диагональные элементы позже в алгоритме.
Код, который дает эти результаты:
Матлаб
x=A\b
invA = A\eye(size(A))
C++
arma::mat x = solve(A,b)
arma::mat invA = solve(A,eye(625,625))
Версии, которые я использую:
C++:
Визуальная студия 2013
Броненосец 8.300.1
- Интел МКЛ 2018.1.156
Матлаб:
матлаб 2016б
версия -blas
Intel(R) Math Kernel Library версии 11.3.1 Product Build 20151021 для приложений архитектуры Intel(R) 64, ветвь CNR AVX2
- версия -лапак
Intel(R) Math Kernel Library версии 11.3.1 Product Build 20151021 для приложений архитектуры Intel(R) 64, филиал CNR AVX2 Linear Algebra PACKage Version 3.5.0
У кого-нибудь есть идея, как преодолеть эту нехватку скорости в С++ с помощью броненосца?