Конвертировать MATLAB в C ++, используя кодер MATLAB - PullRequest
0 голосов
/ 02 мая 2018

Я собираюсь преобразовать код MATLAB, «полный операций над матрицами», в C ++, я не уверен, что кодер MATLAB сгенерирует эффективный код C ++. Лучше конвертировать его вручную, хотя это отнимает много времени

1 Ответ

0 голосов
/ 05 мая 2018

Как уже говорили другие, генерация кода с помощью MATLAB Coder, компиляция его с оптимизацией вашего компилятора и измерение - это единственный способ узнать, будут ли удовлетворены ваши потребности.

MATLAB Coder генерирует код напрямую для большинства алгоритмов без использования внешних библиотек. В некоторых случаях библиотеки могут использоваться или могут быть запрошены пользователем. Особый интерес для вас может представлять интеграция BLAS и LAPACK.

Если вы выполняете линейную алгебру как часть ваших операций с матрицами, рассмотрите возможность настройки MATLAB Coder для вызова высокопроизводительных библиотек BLAS и LAPACK по вашему выбору:

https://www.mathworks.com/help/coder/ug/speed-up-matrix-operations-in-generated-standalone-code-by-using-blas-calls.html

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.

...