gpt4 book ai didi

c - mex 文件和使用 coder.ceval 调用的函数之间有什么区别吗?

转载 作者:太空狗 更新时间:2023-10-29 15:26:13 24 4
gpt4 key购买 nike

related

我的目标是混合使用 C 代码和 Matlab 代码,并最终通过使用 Coder 工具让整个代码在 C 中运行。我找到了 2 种将 C 合并到 Matlab 中的方法,编写 Mex 文件,以及在 C 程序上使用 coder.ceval。

除了调用语法之外,这两种方法有什么区别吗?

最佳答案

我将比较创建手写 MEX 文件与使用 MATLAB Coder 集成自定义 C 代码的 coder.ceval .

相似点

在这两种情况下,都可以生成一个 MEX 文件,您可以像调用任何其他 MATLAB 函数一样在 MATLAB 中调用该文件。将使用 mex 编译手写的 MEX 函数来自您编写的 C 源代码的命令。使用 MATLAB Coder,MEX 文件将自动从通过 coder.ceval 调用您的 C 代码的 MATLAB 代码生成。使用 codegen命令或 MATLAB Coder App。

一些基本差异

(请注意,我始终使用 C,但 C++ 也可用于 MEX 文件)

  • 编写 MEX 文件时,需要在 mxArray 之间手动移动数据值和 native C 类型。您需要使用 MEX libraryC/C++ Matrix Library去做这个。如果coder.ceval使用时,可以从您的 MATLAB 代码自动生成一个 MEX 文件,为您执行此数据编码。
  • 单个手写 MEX 文件可以处理多种 MATLAB 数据类型。 MATLAB Coder 需要声明每个参数的类型、大小(数组也可以是 variable-size )和复杂性。例如,如果您想要一个采用 double 的 MEX 文件和 single给定输入的值,则必须为每种输入类型生成一个 MEX 文件。
  • 使用手写的 MEX 文件,一旦从 mxArray 中检索到数据MATLAB 提供的值,可以编写任意 C 代码来操作它。 coder.ceval要求您编写与 MATLAB Coder 兼容的 MATLAB 代码,以使用它提供的外部代码接口(interface)调用 C 函数。对于具有简单接口(interface)的功能,例如那些采用数字数组、字符串等的,这可能很简单。对于那些采用其他数据类型的人,更高级的工具,如 coder.opaque , coder.cstructname 和定制enumeration definitions必须使用这可能需要时间。需要权衡为 MATLAB Coder 开发此接口(interface)与学习和使用第一个项目符号中提到的 MATLAB 库的成本。
  • 如果您最终想在 MATLAB 之外使用 C 中的代码,请使用 MATLAB Coder 和 coder.ceval , 目标可以简单地从 MEX 更改为 standalone target像静态或动态库或可执行文件。对于手写的 MEX 文件,通常会考虑 C 代码,以便 MEX 接口(interface),mexFunction , 与 C 功能内核分开。然后,可以在 MEX 外部调用此内核。如果您无论如何都打算使用 MATLAB Coder,则必须以某种方式将 MATLAB Coder 代码与该内核集成。

如果代码最终要与 MATLAB Coder 一起使用,则在目标为 MEX 时使用 Coder 调用 MEX 文件需要使用 coder.extrinsic .它们也不能在独立目标中直接调用。相反,MEX 文件下的 C 计算内核需要在代码生成期间使用 coder.ceval 与生成的代码集成。或者在使用传统 C 开发环境生成代码之后。

决定时要考虑的因素

  1. 使用 MATLAB Coder 尽早集成 C 代码并自动生成 MEX 接口(interface)的好处是否超过使用 MATLAB Coder 外部代码接口(interface)与手写 MEX 文件所需的工作量?
  2. 正在使用 coder.ceval 集成外部 C 代码比编写 MEX 文件(将其公开给 MATLAB,然后将 MATLAB Coder 生成的代码与 MEX 文件底层的计算内核集成)更容易还是更难?

关于c - mex 文件和使用 coder.ceval 调用的函数之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31665151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com