dspunfold
对象生成一个多线程MEX文件MATLAB函数
描述
输入参数
输出文件
当你调用dspunfold
在MATLAB函数的入口点上,dspunfold
生成以下文件。
文件 |
价值 |
描述 |
例子 |
---|---|---|---|
多线程MEX文件 |
墨西哥人文件 |
多线程MEX文件生成的入口点MATLAB函数。MEX文件继承 |
|
用于多线程MEX文件的帮助文件 |
MATLAB文件 |
MATLAB帮助文件的多线程MEX文件。帮助文件与MEX文件具有相同的名称,但是带有'。米的扩展。要调用帮助文件,键入 此帮助文件显示有关如何调用MEX文件、其语法、 |
|
单线程MEX文件 |
墨西哥人文件 |
单线程生成的MEX文件的入口点MATLAB函数。MEX文件继承 |
|
帮助文件用于单线程MEX文件 |
MATLAB文件 |
MATLAB帮助文件的单线程MEX文件。帮助文件与MEX文件具有相同的名称,但是带有'。米的扩展。要调用帮助文件,键入 帮助文件显示有关如何调用MEX文件、它的语法和MEX文件输入的类型(大小、类和复杂性)的信息。调用MEX文件的语法应该与帮助文件中显示的语法相同。 |
|
自诊断分析仪功能 |
p代码文件 |
分析仪输入的第一个维度必须是给定的相应输入的第一个维度的倍数 解析器继承 |
|
自诊断分析仪功能的帮助文件 |
MATLAB文件 |
自诊断分析仪功能的帮助文件。帮助文件与MEX文件具有相同的名称,但是带有'。米的扩展。要调用帮助文件,键入 自诊断分析器函数的帮助文件显示了有关如何调用分析器函数、分析器函数的语法和分析器函数输入的类型(大小、类和复杂性)的信息。调用分析器函数的语法应该与帮助文件中显示的语法相同。 |
|
限制
一般的局限性:
在Windows和Linux上,必须使用支持Open Multiprocessing (OpenMP)万博1manbetx应用程序接口的编译器。看到万博1manbetx支持编译器.
如果你有macOS与一个Xcode版本12.0或更高版本,使用
dspunfold
函数不支持。万博1manbetx如果输入MATLAB函数有运行时错误,则在运行多线程MEX文件时不会捕获错误。在使用
dspunfold
函数,调用codegen
在MATLAB函数上,确保MEX文件成功生成。如果生成的代码使用大量内存来存储局部变量,则大约
4
MB
在Windows平台上,生成的多线程MEX文件可能有意想不到的行为。这个限制因平台而异。作为一种解决方法,减少输入信号的大小或重构MATLAB函数以使用更少的本地内存。dspunfold
不支持:万博1manbetx可变大小的输入和输出
属性的系统对象输入具有任意帧长度的信号
DecimationFactor
财产。当输入信号的帧长不是抽取因子的倍数时,认为该输入信号具有任意帧长。在这种情况下,生成的代码中对象的输出是一个可变大小的信号,并且dspunfold
不支持可变大小的输万博1manbetx出信号。在的情况下
dsp。FarrowRateConverter
对象时,可以使用getRateChangeFactors
函数。p编码的入口点MATLAB函数
单元格数组作为输入和输出
分析仪的局限性:
类生成的分析器函数适用于以下限制dspunfold
函数。有关分析仪功能的更多信息,请参阅的“更多关于”部分中的“自诊断分析仪”dspunfold
.
如果分析器输入的多个帧相同,分析器可能抛出假阳性通过结果。建议您为分析器的每个输入提供至少两个不同的帧。
如果入口点MATLAB函数中的算法根据输入值选择其状态长度,分析仪可能会提供不同的通过不同输入值的结果。有关示例,请参见
FIR_Mean
函数为什么分析器选择错误的状态长度?.如果进入点MATLAB函数的输入确实立即影响输出,则分析仪可能抛出假阳性通过结果。有关示例,请参见
Input_Output
函数为什么分析器选择零状态长度?.如果多线程MEX文件和单线程MEX文件的输出结果在统计上匹配,但在数值上不匹配,则分析器不通过。考虑到
FilterNoise
函数,它用FIR滤波器对随机噪声信号进行滤波。函数调用randn
从内部产生随机噪声。的输出结果FilterNoise
函数在统计上匹配,但在数值上不匹配。函数输出= FilterNoise(x)持续的FIRFilter如果isempty(FIRFilter) FIRFilter = dsp。FIRFilter (“分子”0.4 fir1 (12));结束输出= FIRFilter(x+randn(1000,1));结束
FilterNoise
,该工具检测到无限的状态长度。因为该工具无法为有限的状态长度找到数值匹配,所以它选择无限的状态长度。dspunfoldFilterNoisearg游戏{randn (1000 1)}- s汽车
创建单线程MEX文件FilterNoise_st。搜索最小状态长度(这可能需要一段时间)检查不足1…不足检查无限…充分检查2…创建多线程的MEX文件FilterNoise_mt. xml。mexw64警告:由于性能考虑,多线程被禁用。当状态长度大于或等于(Threads-1)*重复帧(在本例中为3帧)时,就会发生这种情况。>在code .internal.warning(第8行)在unfoldingEngine/BuildParallelSolution(第25行)在unfoldingEngine/generate(第207行)在dsp展开(第234行)中创建分析器文件FilterNoise_analyzer
该算法不需要无限状态。FIR滤波器的状态长度,因此算法为
12
.调用
dspunfold
状态长度设置为12。dspunfoldFilterNoisearg游戏{randn (1000 1)}- s12- f真正的
创建单线程MEX文件FilterNoise_st。mexw64创建多线程MEX文件FilterNoise_mt。mexw64创建分析文件FilterNoise_analyzer
运行analyzer函数。
FilterNoise_analyzer (randn (1000 * 4,1))
分析多线程MEX文件FilterNoise_mt。mexw64……延迟= 8帧加速= 0.5x警告:多线程MEX文件FilterNoise_mt的输出结果。mexw64不匹配单线程MEX文件FilterNoise_st.mexw64的输出结果。在生成多线程MEX文件FilterNoise_mt.mexw64时,检查是否为dsp展开函数提供了正确的状态长度值。有关此问题的最佳实践和可能的解决方案,请参阅dspspread函万博 尤文图斯数参考页中的“Tips”部分。>在code .internal.warning(第8行)在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文件,请执行使用dspspread生成多线程MEX文件的工作流程.
使用前
dspunfold
,叫codegen
对MATLAB函数的入口点,并确保该函数成功生成MEX文件。生成后使用多线程的MEX文件
dspunfold
,运行analyzer函数。确保分析器函数通过。该规则的例外情况是,算法产生的结果在统计上匹配,但在数值上不匹配。在这个例外中,分析器函数没有通过
,即使dspunfold
函数生成有效的多线程MEX文件。有关示例,请参见“分析器限制”。有关使用MEX文件和分析器的帮助,请在MATLAB命令提示符处输入
帮助
而且< mexfile名称>
帮助
.<分析仪名称>
国家长
如果您选择的状态长度大于或等于确切的状态长度值,分析器将通过。如果分析器失败,增加状态长度,重新生成MEX文件,并再次验证。
如果状态长度大于
0
,输入标记为帧(通过- f
选项)都必须具有相同的尺寸。在生成MEX文件并运行分析器时,使用调用相同状态长度的输入。
状态长度自动检测
当你设置- s
来汽车
:
如果入口点MATLAB函数中的算法根据输入值选择代码路径,则使用选择状态长度最长的代码路径的输入。
提供随机输入
arg游戏
.选择对输出有直接影响的输入。看到为什么分析器选择零状态长度?.
分析仪
确保多线程MEX文件和单线程MEX文件的输出不包含
南
或者一个正
.分析器不能进行数值检查和返回通过
作为假
.自动状态长度检测工具检测无限状态长度并显示警告警告
即使是无限状态长度,多线程MEX文件的输出结果也与单线程MEX文件的输出结果不匹配。一个可能的原因是,即使输入值相同,输入MATLAB函数在连续运行之间也会产生不同的输出结果。
为分析器的每个输入提供多个具有不同值的帧。为了提高分析器的有效性,沿着第一个维度附加连续的帧。
向分析器提供输入,以实现有效的代码覆盖。
加速
要提高多线程MEX文件的速度,请在示例中指定确切的状态长度。的至少一个项,可以指定样本中的状态长度
frameinputs
来真正的
.样本的使用减少了开销并提高了速度。要以更大的延迟为代价来提高加速,您可以:
增加重复系数。使用
- r
选择。增加线程数。使用
- t
选择。
对于每个可以划分为样本而不改变算法行为的输入,将帧状态设置为
真正的
使用- f
选择。然后在示例中考虑输入,这可以提高生成的多线程MEX文件的速度。
算法
多线程MEX文件将多个输入信号帧缓冲到的缓冲区中2
×线程×重复帧,线程线程数,和重复是重复因子。MEX文件使用多个核心同时处理这些帧。这个过程引入了一些确定性延迟,其中延迟=2
×线程×重复.延迟与通过增加线程数量或重复因子可能获得的加速相互抵消。
版本历史
在R2015b中引入