Преобразование MATLAB в C++ с помощью кодировщика MATLAB

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


person MAh2014    schedule 02.05.2018    source источник
comment
Объедините два ваших подхода. Используйте MATLAB для создания C++, затем просмотрите C++, чтобы увидеть, можно ли его оптимизировать. Вы можете захотеть оптимизировать код MATLAB перед преобразованием.   -  person Thomas Matthews    schedule 02.05.2018
comment
@ThomasMatthews Спасибо, еще одна вещь: кодер MATLAB использует библиотеку броненосцев или обрабатывает матричные операции с помощью циклов?   -  person MAh2014    schedule 02.05.2018
comment
Я не работаю в MATLAB и не видел исходный код. Вам нужно будет сделать преобразование, чтобы проверить.   -  person Thomas Matthews    schedule 02.05.2018
comment
У меня больше опыта работы с Simulink Coder, но в этом продукте сгенерированный код C++ очень похож на сгенерированный код C и не зависит от какой-либо внешней библиотеки матриц/линейной алгебры. Я считаю, что MathWorks прилагает значительные усилия для создания эффективного генерируемого кода.   -  person Jack C.    schedule 03.05.2018


Ответы (1)


Как уже говорили другие, создание кода с помощью 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.

person Ryan Livingston    schedule 05.05.2018
comment
Спасибо, это было очень полезно. - person MAh2014; 05.05.2018