文档

避免重复函数生成的代码

问题

你生成代码,它包含多个副本相同的功能,只有细微的差别,比如修改函数签名。例如,生成的代码可能包含要调用的函数喷火b_foo。重复的功能可以使生成的代码更难以分析和管理。

导致

在生成的代码复制功能功能专门化的结果。代码生成器是函数当它检测到它们在不同调用不同的网站:

  • 数量的输入或输出变量。

  • 输入或输出变量的类型。

  • 输入或输出变量的大小。

  • 输入变量的值。

在某些情况下,这些专门化是必要的为生成的C / c++代码,因为C / c++函数没有MATLAB一样的灵活性®功能。在其他情况下,代码生成器是函数优化生成的代码或由于缺乏信息。

解决方案

在某些情况下,你可以改变你的MATLAB代码来避免重复的生成功能。

识别重复的功能通过使用代码生成报告

你可以决定是否通过检查代码生成器创建的复制功能代码生成报告或仿真软件金宝app®MATLAB函数报告。报告显示的列表下面的复制功能的入口点函数。例如:

复制函数生成的多个输入大小

如果你多次MATLAB代码调用一个函数,通过输入不同的大小、代码生成器为每个大小的函数可以创建专门化。为了避免这个问题,使用coder.ignoreSize在功能上输入。例如,这个代码使用coder.ignoreSize为了避免创建函数的多个副本indexOf:

函数[着干活,out2] = test1 () = 1:10;b = 2;%没有编码器。ignoreSize复制函数生成着干活= indexOf (coder.ignoreSize ());out2 = indexOf (coder.ignoreSize (b));结束函数指数= indexOf(数组、价值)coder.inline (“永远”);i = 1:元素个数(数组)如果数组(i) = =价值指数=我;返回结束结束指数= 1;返回结束

来生成代码,请输入:

codegentest1配置:自由报告arg游戏{1}

复制函数生成的不同的输入值

如果您的MATLAB代码调用一个函数,并将多个不同的常数输入,代码生成器可以创建专门化的函数为每个不同的常数。在这种情况下,使用coder.ignoreConst告诉代码生成器没有治疗价值作为一个不变的常数。例如:

函数[out3, out4] = test2(在)c = [“一个”,“b”,“c”];如果> 0 c (2) =' d ';结束out3 = indexOf (c, coder.ignoreConst (“一个”));out4 = indexOf (c, coder.ignoreConst (“b”));结束函数指数= indexOf(数组、价值)coder.inline (“永远”);i = 1:元素个数(数组)如果数组(i) = =价值指数=我;返回结束结束指数= 1;返回结束

来生成代码,请输入:

codegentest2配置:自由报告arg游戏{1}

复制功能生成不同数量的输出

如果你的MATLAB代码调用一个函数,接受一个不同数量的输出在不同网站打电话,每次调用的代码生成器可以生产专门化。例如:

[b] = foo ();c = foo ();

让每个调用返回相同数量的输出和避免重复功能,使用~符号:

[b] = foo ();[c ~] = foo ();

另请参阅

||

相关的话题