生成从多线程MEX文件MATLAB函数
当你调用dspunfold
在一个入口点MATLAB函数上,dspunfold
生成以下文件。
文件 |
价值 |
描述 |
例子 |
---|---|---|---|
多线程MEX文件 |
墨西哥人文件 |
从入口点MATLAB函数生成的多线程MEX文件。MEX文件继承 |
|
多线程MEX文件的帮助文件 |
MATLAB文件 |
多线程MEX文件的MATLAB帮助文件。该帮助文件与MEX文件同名,但扩展名为“.m”。要调用该帮助文件,请键入 此帮助文件显示有关如何调用MEX文件及其语法的信息, |
|
单线程MEX文件 |
墨西哥人文件 |
单线程MEX文件生成的入口点MATLAB函数。MEX文件继承 |
|
单线程MEX文件的帮助文件 |
MATLAB文件 |
MATLAB帮助文件的单线程MEX文件。帮助文件与MEX文件具有相同的名称,但带有'。米的扩展。要调用帮助文件,输入 帮助文件显示了关于如何调用MEX文件、它的语法以及输入到MEX文件的类型(大小、类和复杂性)的信息。调用MEX文件的语法应该与帮助文件中显示的语法相同。 |
|
自我诊断分析仪功能 |
P编码的文件 |
的分析器输入端的第一尺寸必须给予的相应输入端的第一尺寸的倍数, 分析器继承 |
|
自我诊断分析仪功能的帮助文件 |
MATLAB文件 |
自诊断分析器功能的帮助文件。帮助文件与MEX文件具有相同的名称,但带有'。米的扩展。要调用帮助文件,输入 自诊断分析器函数的帮助文件显示了关于如何调用分析器函数、它的语法和分析器函数输入的类型(大小、类和复杂性)的信息。调用分析器函数的语法应该与帮助文件中显示的语法相同。 |
|
一般限制:
在Windows和Linux上,必须使用支持开放多处理(OpenMP)应用程序接口的编译器。金宝app看到金宝app支持的编译器.
如果你有macOS与一个Xcode版本12.0或更高版本,使用dspunfold
不支持此函数。金宝app
如果输入MATLAB函数有运行时错误,则在运行多线程MEX文件时不会捕获错误。在你使用dspunfold
函数,调用编码基因
并确保成功生成MEX文件。
如果生成的代码使用了大量的内存来存储局部变量,围绕4.
MB
在Windows平台上,生成的多线程MEX文件可能会有意外的行为。这个限制因平台而异。作为一个解决方案,减少输入信号的大小或重构MATLAB函数以使用更少的本地内存。
dspunfold
不支持:金宝app
分析仪的局限性:
以下限制适用于由dspunfold
函数。有关分析函数的更多信息,请参见“自诊断分析仪”的‘更多关于’一节中dspunfold
.
如果分析器输入的多个帧是相同的,分析器可能抛出假阳性的通过结果。建议您为分析器的每个输入至少提供两个不同的帧。
如果入口点MATLAB函数中的算法根据输入值选择其状态长度,则分析器可能会提供不同的经过不同输入值的结果。有关示例,请参见FIR_Mean
函数为什么分析器不能选择错误的状态长度是多少?.
如果输入到入口点的MATLAB函数确实会立即影响输出,分析器可能会抛出假阳性经过结果。有关示例,请参见Input_Output
函数为什么分析器不能选择零状态长度是多少?.
如果多线程MEX文件的输出结果和单线程MEX文件匹配统计但不匹配数值,分析仪不及格。考虑到这一点FilterNoise
功能如下,该滤波器与一个FIR滤波器的随机噪声信号。该函数调用兰登
从内部产生随机噪声。因此FilterNoise
函数在统计上匹配,但在数值上不匹配。
函数输出= FilterNoise (x)执着的FIRFilter如果的isEmpty(FIRFilter)FIRFilter = dsp.FIRFilter('分子'0.4 fir1 (12));结尾输出=FIRFilter(x+randn(1000,1));结尾
FilterNoise
,该工具检测到无限状态长度。由于该工具无法找到有限状态长度的数值匹配,因此它选择了无限状态长度。
dspunfoldFilterNoise- args.{randn (1000 1)}-汽车
分析输入MATLAB函数FilterNoise创建单线程MEX文件FilterNoise_st.mexw64搜索最小状态长度(这可能需要一段时间)检查无状态。。。检查不足1。。。检查不充分。。。充分检查2。。。最小状态长度不足,正在创建多线程MEX文件筛选器Noise_mt.mexw64警告:出于性能考虑,已禁用多线程。当状态长度大于或等于(Threads-1)*重复帧(本例中为3帧)时,会发生此情况>在dspunfold(第234行)中展开引擎/BuildParallelSolution(第25行)中展开引擎/generate(第207行)中的coder.internal.warning(第8行)中创建分析器文件过滤器Noise_analyzer
该算法不需要无限状态。FIR滤波器的状态长度,因此该算法是12
.
呼叫dspunfold
与状态长度设定为12。
dspunfoldFilterNoise- args.{randn (1000 1)}-12-f真正的
创建单线程MEX文件FilterNoise_st。创建多线程MEX文件FilterNoise_mt。创建分析器文件FilterNoise_analyzer
运行分析器功能。
FilterNoise_analyzer(randn(1000 * 4,1))
分析多线程MEX文件FilterNoise_mt。mexw64……Warning: The output results of The multithread files FilterNoise_mt. exe . exemexw64与单线程MEX文件FilterNoise_st.mexw64的输出结果不匹配。在生成多线程MEX文件FilterNoise_mt.mexw64时,检查是否为dspopened函数提供了正确的状态长度值。有关此问题的最佳实践和可能的解决方案,请参阅dsp展开函数参考页金宝搏官方网站中的“技巧”一节。> In code .internal.warning (line 8) In FilterNoise_analyzer ans = Latency: 8 Speedup: 0.4970 Pass: 0
即使生成的多线程MEX文件有效,分析器也会查找数字匹配,但验证失败。
加速的局限性:
如果入口点MATLAB函数包含低复杂度的代码,则MATLAB开销或多线程MEX开销会掩盖任何性能增益。在这种情况下,请勿使用dspunfold
.
如果与输入或输出数据的大小相比,输入MATLAB函数中的操作数量很小,那么多线程MEX文件不会提供任何加速增益。有时,即使重复值增加了,它也会导致加速损失。在这种情况下,不要使用dspunfold
.
一般
不显示图表,范围,还是从多线程MEX文件内执行其它用户界面操作。生成的MEX文件可能有意外的行为。
不使用coder.extrinsic
里面输入MATLAB函数。生成的MEX文件可能具有意外行为。
当状态长度小于等于(线程- 1
) ×重复帧:
不要使用随机数的MATLAB函数内。单线程MEX文件和多线程MEX文件的输出可能不匹配。此外,多线程MEX文件的连续执行的输出可能不匹配。该分析仪可能无法通过数字匹配验证。
建议您在MATLAB函数的入口点之外生成随机数,并将其作为参数传递给函数。
除了在MATLAB的入口点函数中,不要在其他地方使用全局变量或持久变量。例如,避免在子函数中使用持久变量。生成的MEX文件可能产生不准确的结果。一般情况下,不推荐使用全局变量。
不要从多线程MEX文件中访问I/O资源。生成的MEX文件可能有意外的行为。这些资源包括文件写入器和读取器、UDP套接字、音频播放器和录音机。
不要在多线程MEX文件中使用带有交互输入(例如,键盘)的函数。生成的MEX文件可能有意外的行为。
工作流程
要生成所需的加速有效的多线程MEX文件和延迟,按照工作流程生成多线程MEX文件使用dspunfold.
使用前dspunfold
, 称呼编码基因
在入口点MATLAB函数,并确保该函数生成一个MEX文件成功。
生成多线程MEX文件后使用dspunfold
,运行分析器功能。确保analyzer函数通过。该规则的例外情况是,算法生成的结果在统计上匹配,但在数字上不匹配。在这个例外情况下,analyzer函数不会经过
,尽管dspunfold
函数生成有效的多线程MEX文件。有关示例,请参阅“Analyzer限制”。
有关使用MEX文件和分析器的帮助,请在MATLAB命令提示符处输入帮助
和帮助
.<分析器名称>
国长
如果您选择的状态长度大于或等于准确的状态长度的值,则分析器通过。如果分析器失败,则增加状态长度,重新生成MEX文件,并再次进行验证。
如果状态长度大于0.
标记为帧的输入(通过-f
选项)必须具有相同的尺寸。
当生成MEX文件并运行分析器时,使用调用相同状态长度的输入。
自动状态长度检测
当您设置-
到汽车
:
如果入口点MATLAB函数中的算法根据输入值选择代码路径,请使用选择状态长度最长的代码路径的输入。
提供随机输入- args.
.
选择对输出有直接影响的输入。看到为什么分析器不能选择零状态长度是多少?.
分析器
确保多线程MEX文件和单线程MEX文件的输出不包含南
或正
.该分析仪不能做数字支票和退货经过
作为假
.状态长度自动检测工具检测无限状态长度并显示警告
警告
多线程MEX文件的输出结果与单线程MEX文件的输出结果不匹配,即使在状态长度为Infinite时也是如此。一个可能的原因是,输入MATLAB函数在连续运行之间产生不同的输出结果,即使是相同的输入值。
提供用于分析仪的每一个输入不同的值的多个帧。为了改善分析器有效性,追加沿着第一维度连续帧。
向分析器提供能够有效覆盖代码的输入。
加速
要提高多线程MEX文件的速度,请在示例中指定准确的状态长度。可以通过设置至少一个项来指定样例中的状态长度frameinputs
到真正的
.使用样例可以减少开销并增加加速。
要以更大的延迟为代价提高加速,您可以:
增加重复系数。使用-r
选择。
增加线程的数量。使用-t
选择。
对于每个可以被划分为样本而不改变算法行为的输入,设置帧状态为真正的
使用-f
选择。输入,然后在样品中,这可以增加所产生的多线程MEX文件的加速考虑。
多线程MEX文件将多个输入信号帧缓冲到2
×线程×重复框架,在哪里线程是线程的数量,和重复为重复因子。MEX文件使用多个核同时处理这些帧。这个过程引入了一些确定性延迟,其中延迟=2
×线程×重复.等待时间为与您可能会通过增加线程数或重复系数获得加速权衡。