Я собираюсь преобразовать код MATLAB, «полный операций над матрицами», в C++, я не уверен, что кодировщик MATLAB сгенерирует эффективный код C++. Лучше ли преобразовать его вручную, хотя это так много времени?
Преобразование MATLAB в C++ с помощью кодировщика MATLAB
Ответы (1)
Как уже говорили другие, создание кода с помощью 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
.