Я собираюсь преобразовать код MATLAB, «полный операций над матрицами», в C ++, я не уверен, что кодер MATLAB сгенерирует эффективный код C ++. Лучше ли конвертировать его вручную, хотя это отнимает много времени?
Как уже говорили другие, генерация кода с помощью MATLAB Coder, компиляция его с оптимизацией вашего компилятора и измерение — это единственный способ узнать, будут ли удовлетворены ваши потребности.
MATLAB Coder генерирует код напрямую для большинства алгоритмов без использования внешних библиотек. В некоторых случаях библиотеки могут использоваться или могут быть запрошены пользователем. Особый интерес для вас может представлять интеграция BLAS и LAPACK.
Если вы выполняете линейную алгебру как часть ваших операций с матрицами, рассмотрите возможность настройки MATLAB Coder для вызова высокопроизводительных библиотек BLAS и LAPACK по вашему выбору:
https://www.mathworks.com/help/coder/ug/generate-code-that-calls-lapack-functions.html
Это заставит MATLAB Coder заменить свои алгоритмы вызовами библиотек, которые вы указали для операций линейной алгебры, таких как *, \, linsolve, lu, svd, eig
, так далее.
MATLAB Coder предоставляет предложения по улучшению производительности сгенерированного кода:
https://www.mathworks.com/help/coder/optimize-speed-of-generated-code.html
Один из возможных подходов в подобных случаях — сгенерировать код и профилировать его с помощью профилировщика, такого как prof, VTune, AMD Codeanalyst, инструменты производительности Visual Studio и т. Д. Если вы найдете несколько дорогих ядер, в которых сгенерированный код может не соответствовать вашей производительности необходимо, вручную написать замены для этих частей с C-подобным интерфейсом и интегрировать их с вашим сгенерированным кодом, используя coder.ceval
,
Других решений пока нет …