Какова разница в производительности между Matlab fmincons и C ++ NLP-решателем, таким как ipopt?

Я собираюсь написать алгоритм для приложений реального времени, который включает в себя некоторые высокоразмерные НЛП (нелинейное программирование).

перед имплантацией мне нужно синхронизировать свой алгоритм, чтобы понять, возможно ли это для приложений реального времени, поэтому я использую встроенные в Matlab fmincons в качестве основы.

Как показывает опыт, алгоритмы Matlab, как правило, меняются от медленных к абсолютным величинам медленнее, чем их аналоги на С ++, поэтому я хочу оценить, какой прирост производительности можно ожидать в этом конкретном случае?

Поскольку моя работа в основном связана с приложениями реального времени, поэтому я редко использую NLP (нелинейное программирование), поэтому я спросил своих коллег по работе, они рекомендуют мне попробовать ipopt для начала, я погуглил его веб-сайт, там нет эталонных тестов против Matlab Кроме того, нет большого количества тем, касающихся деталей их алгоритмов (по крайней мере, в Matlab, нетрудно проверить детали их алгоритмов), так что я в основном не имею представления о точности / надежности / оптимальности и т.д. об этом.

Так что любая помощь в отношении внедрения НЛП на С ++ будет очень полезна, большое спасибо заранее.

6

Решение

Во многих из этих проблем преобладают большие O (n ^ ~ 3) матричные умножения. Если это так, и обе системы используют один и тот же алгоритм, то производительность будет одинаковой и не будет зависеть от языка, так как основная функция умножения матриц будет реализована в asm в любом случае.

Если в алгоритме нет доминирующей простой функции, подобной этой, и вместо этого требуется много управления памятью, то библиотека C ++ выиграет намного быстрее (в 3-10 раз быстрее).

(Если производительность критична, то многие люди используют OpenCL для переноса данных на графический процессор, который разрабатывает для этого типа числовых вычислений и имеет разницу в цене / производительности в диапазоне 20-100x. Или вы можете перенести его в кластер если нужно еще быстрее.)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]