主要特性

使用 MATLAB Coder™,您可以将生成的代码作为源代码、静态库或动态库集成到您的项目。示例主函数作为模板提供,可帮助您将生成的代码集成到您的应用。您还可以将外部代码与用于代码生成的 MATLAB 代码集成。外部代码可以是外部库、目标文件或 C/C++ 源代码。

将 MATLAB ® Coder™ 生成的代码集成到父级 Microsoft ® Visual Studio ® 项目。

通过联合使用 MATLAB Coder 和 Embedded Coder®,您可以进一步优化代码的效率和自定义生成的代码。然后可以使用软件在环 (SIL) 和处理器在环 (PIL) 执行程序验证生成代码的数字行为。

MATLAB Coder 与 Simulink Coder™ 搭配工作,可从含有 MATLAB 代码的 Simulink® 模型生成 C 代码。

您还可以集成 MATLAB 程序(包括图形元素),作为使用 C/C++、.NET、Java® 和 Python® 编写的自定义应用,并使用 MATLAB Compiler SDK™ 将它们部署到台式机、Web 或企业系统。MATLAB Central 提供使用这些方法的详细比较

MATLAB 代码生成器应用(左)以及显示生成的 C 代码的代码生成报告(右)。

支持代码生成的 MATLAB 语言和工具箱

MATLAB Coder 利用范围广泛的 MATLAB 语言特性来生成代码,设计工程师通常使用这些语言特性来开发作为大型系统组件的算法。这包括来自 MATLAB 的超过 1200 个运算符和函数以及配套工具箱,包括:


MATLAB Coder 使用案例

MATLAB Coder 可让设计工程师在 MATLAB 中开发算法,生成可读可移植的 C/C++ 代码。使用这种生成的代码,您可以:

  • 将 MATLAB 算法作为编译的库组件集成到其他软件(如自定义仿真器)中
  • 通过生成调用已编译 C/C++ 代码的 MATLAB 可执行文件(MEX 函数),加快 MATLAB 代码的计算量密集部分的执行速度
  • 将 MATLAB 算法作为 PC 上独立可执行文件的原型,同时可将生成的算法作为设计规格传递给您的软件工程师
  • 在嵌入式处理器上实现并验证 MATLAB 算法
将 MATLAB ® Coder™ 生成的代码集成到父级 Microsoft ® Visual Studio ® 项目。
生成 MEX 文件,以加快基于 DCT 的图像压缩或解压缩算法的仿真速度。
生成代码并创建可执行文件,作为台式机上的原型。
使用 Apple 的 Xcode IDE 将 MATLAB Coder™ 生成的代码集成到 iPhone 或 iPad 应用。
MATLAB Coder 使用案例。

从 MATLAB 生成代码

将 MATLAB 算法转换成 C 代码需要指定实现要求。MATLAB Coder 应用和等效命令行函数指导您完成此迭代过程,同时使您能够一直处于 MATLAB 语言环境中。

MATLAB Coder 通过分析 MATLAB 代码为您输入的数据类型和大小提供建议,可帮您准备用于代码生成的 MATLAB 算法。通过生成 MEX 函数,包含编译的代码,再放回 MATLAB 中执行,您可以确保您的算法随时用于代码生成。MATLAB Coder 生成一份报告,指出要使 MATLAB 算法随时用于代码生成而需要修复的所有错误。您在修复错误和重新生成 MEX 函数之间反复迭代,直至您的 MATLAB 算法适于代码生成。

然后您可以利用您的 MATLAB 算法生成 C 或 C++ 源代码或 MEX 函数(经调节后实现更好的性能)。

探索图片库 (4 张图像)


生成用于代码验证和加速的 MEX 函数

可以调用 MEX 函数来代替原始 MATLAB 代码,从而:

  • 将编译的代码放回 MATLAB 中进行测试和验证
  • 加快执行速度

作为三步式迭代工作流程的一部分,您需要生成和测试 MEX 函数,以验证它提供与原始 MATLAB 代码相同的功能。

在生成代码之前测试 MEX 函数可让您检测并修复运行时错误,在生成的代码中诊断这种错误要难得多。在 MATLAB 中运行 MEX 函数可执行内存完整性检查,包括执行数组边界检查、维度检查,以及检测为 MATLAB 函数生成的代码中的内存完整性违规情况。如果检测到违规,MATLAB 将停止执行并提供诊断消息。

MATLAB Coder 应用的测试方法是,使用与运行原始 MATLAB 代码所采用的相同输入,并将原始 MATLAB 代码的结果与 MEX 函数的结果进行比较。

探索图片库 (2 张图像)


加快 MATLAB 算法的执行速度

作为加快 MATLAB 算法的执行速度总体战略的一部分,生成 MEX 函数以替代原始 MATLAB 代码可以提高执行速度。

生成 MEX 文件,以加快基于 DCT 的图像压缩或解压缩算法的仿真速度。

达到的加速量取决于算法的性质。确定加速的最佳方法是遵循最佳实践,使用 MATLAB Coder 生成 MEX 函数,并实际测试加速情况。如果您的算法包含以下各项,则可能会看到加速:

  • 单精度数据类型
  • 定点数据类型
  • 带有状态的循环
  • 无法矢量化的代码

另一方面,如果您的算法包含如下 MATLAB 隐式多线程计算,则不太可能加速: FftSvd、调用 IPP 或 BLAS 库函数、为在 PC 上的 MATLAB 执行而优化的函数(如 FFT)或者可以矢量化代码的算法。

对于一些应用,还可以将不同的技术(如使用矢量化和预分配、System objects™ 和 Parallel Computing Toolbox™ 与 MEX 函数生成相结合,以发挥多核处理器的优势并加快您的 MATLAB 算法速度。

In this webinar you will learn how to use to various techniques to accelerate your communications system simulations in MATLAB and Simulink.

使用 OpenMP 生成支持多核的代码<

MATLAB Coder 可以通过以下语句生成支持多核的代码parfor-loops。一个 parfor-loop(如标准 MATLAB for-loop)对一定范围的值执行一系列语句。由于 parfor-loop 的迭代在多个核中并行运行,您的循环的迭代不得依赖于其他迭代。如果 MATLAB Coder 确定这一要求得不到满足,就会将 parfor-loops 视为标准 for-loops。

MATLAB Coder 使用 Open Multiprocessing (OpenMP) 应用接口支持从使用 parfor-loops 编写的 MATLAB 代码生成共享内存、多核代码。生成的代码需要支持 OpenMP 应用接口的编译器。尽管 MATLAB Coder 可以使用尽可能多的核,但仍可以指定要使用的线程数。如果您需要分布式并行,请使用 Parallel Computing Toolbox。

通过调用 OpenMP 生成的代码的示例。

您可以使用 Simulink CoderEmbedded Coder 扩展 MATLAB Coder 的功能。


结合使用 MATLAB Coder 和 Simulink Coder

用于仿真和代码生成的 MATLAB 函数块可让您将 MATLAB 代码集成到 Simulink 模型中。使用 Simulink Coder 可从这些包含 MATLAB 代码的 Simulink 模型生成代码。

Simulink 中的雷达追踪模型。该模型实现了用 MATLAB 编写的卡尔曼滤波算法,可使用 MATLAB 函数模块调用该算法。

MATLAB Coder 和 Embedded Coder 结合使用

通过结合使用 MATLAB Coder 和 Embedded Coder,您可以进一步优化代码的效率和自定义生成的代码。Embedded Coder 可为大规模生产中使用的受支持的嵌入式处理器、目标系统快速原型板和微处理器生成代码。通过提供配置选项和高级优化对生成的代码的函数、文件和数据进行细粒度控制,它扩展了 MATLAB Coder 和 Simulink Coder 的功能。Embedded Coder 提高了代码效率,并促进与生产中使用的现有代码、数据类型和校准参数的集成。然后可以使用 SIL 和 PIL 执行程序验证生成代码的数字行为。

探索图片库 (2 张图像)