Matlab Coder对手编码?

s5s*_*s5s 42 c c++ matlab matlab-deployment

人们在将来阅读此内容的一些背景(如果它没有被锁定).我倾向于用高级语言编程以首先理解问题.在涵盖所有可能的极端情况后,我继续将代码转换为C++(或C).

我编写的大部分代码都包含数学,因此MATLAB是我使用的语言(我的替代方案是Python).无论如何,我然后手动将代码从MATLAB转换为C++.

有谁知道使用MATLAB Coder是否有任何优势/劣势?这是一种新产品而且非常昂贵,但除了节省翻译时还有其他好处吗?

lea*_*vst 44

放弃

根据我对一个特定项目的经验,这是一篇非常自以为是的帖子.我没有使用最新版本的编码器,但是我确实已经将等效产品(嵌入式编码器)用于将matlab代码转换为C++,这是前Real Time Workshop产品的一部分.这些评论仍然适用.你的旅费可能会改变.

早期的好处......

在我的情况下,嵌入式编码器用于制作适合大型音频应用程序一部分的处理块.处理块的作用是实时处理恒定的样本缓冲流.我在matlab中创建了原始算法,转换工具使得将早期原型转换为可以编译为本机代码并在实时应用程序中使用的东西变得相当简单.假设转换后的代码在数字上与原始代码完全相同而且在转换过程中没有人为错误的可能性(假设Mahworks工程师的超人能力)也是很好的.

在这个非常早期的原型制作阶段之后,好处就结束了......

问题1:浪费时间接口

随着算法复杂性的增加,我开始越来越担心如何将matlab接口编码到函数中,这样在转换之后,很容易与C++框架接口(我想实时监控内部状态) .这最终开始使用与实际算法开发本身一样多的时间,从而破坏了使用这种工具的目的.我可以将算法分解成更小的块,然后使用C++将它们粘合在一起,但是后来我放弃了对完整算法进行直接Matlab比较的能力.

问题2:并非所有功能都得到完全支持或支持

编码器支持Matlab语言子集.在某些情况下,支持的功能在某种程度上受到限制.例如,在我正在处理的应用程序中,我希望能够实时修改过滤器的特性.我无法使用标准的Matlab过滤器原型设计功能,因为代码生成工具不允许使用可变参数调用过滤器原型设计函数.尽管我们拥有信号处理工具箱许可证,但我最终还是花时间编写了一本开发自己实现的DSP书籍.

问题3:自动生成的代码效率低下

我对接口问题感到沮丧,并在C++中手动编写算法.对于我的应用程序,手动编写的代码比转换后的代码有75%的性能提升.性能差异将根据您的应用程序,可能是所使用的转换工具的版本以及您对分析器的喜好而有很大差异.转换工具本身是一个复杂的产品,有许多设置需要学习.试图弄清楚如何调整设置和matlab代码来提高性能会花费更多时间用于手工编码.

我没有使用转换工具,因为......

我现在更喜欢更多的测试辅助方法.我在Matlab中编写原型并进行调整,直到我确信它的行为也符合我的要求.然后我在C++中思考并以一种对该语言更自然的方式重新编码算法.然后,我创建一个与我的C++代码接口的mex文件,以便我可以根据我信任的matlab等效项进行测试.对于我工作的问题空间,这是一种更有效(人力和机器)的方式来完成工作.

总之,这只是一个用户的意见.也许(正如您对原始帖子的评论中所示),您应该报名参加试用,看看您是如何相处的.但是,如果你是一个C++忍者,通过构建mex文件进行测试不需要昂贵的附加产品许可证,它将使你成为更好的开发人员.