【问题标题】:Convert MATLAB to C++ using MATLAB coder使用 MATLAB 编码器将 MATLAB 转换为 C++
【发布时间】:2018-05-02 14:20:00
【问题描述】:

我要将“充满矩阵运算”的 MATLAB 代码转换为 C++,我不确定 MATLAB 编码器是否会生成高效的 C++ 代码。虽然它非常耗时,但手动转换是否更好?

【问题讨论】:

  • 结合你的两种方法。使用 MATLAB 生成 C++,然后查看 C++ 以查看是否可以优化。您可能希望在转换之前优化 MATLAB 代码。
  • @ThomasMatthews 谢谢,还有一件事,MATLAB 编码器是使用犰狳库还是通过循环处理矩阵运算?
  • 我不在 MATLAB 工作,也没有看过源代码。您必须进行转换才能验证。
  • 我对 Simulink Coder 有更多的经验,但是在那个产品中生成的 C++ 代码与生成的 C 代码非常相似,并且它不依赖于任何类型的外部矩阵/线性代数库。我相信 MathWorks 投入了大量精力来制作高效的生成代码。

标签: c++ matlab matlab-deployment matlab-coder


【解决方案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 将它们与您生成的代码集成。

【讨论】:

  • 谢谢,这很有帮助。
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2023-03-27
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多