生成一个多线程的MEX文件MATLAB作用
当您调用dspunfold
关于一个入口点MATLAB函数,dspunfold
生成以下文件。
文件 |
价值 |
描述 |
例子 |
---|---|---|---|
多线程MEX文件 |
MEX文件 |
从入口点MATLAB函数生成的多线程MEX文件。MEX文件继承了 |
|
帮助文件为多线程MEX文件 |
MATLAB文件 |
MATLAB帮助文件为多线程MEX文件。帮助文件与MEX文件具有相同的名称,但具有“.m”扩展名。要调用帮助文件,请键入 此帮助文件显示有关如何调用MEX文件的信息,它的语法 |
|
单线程MEX文件 |
MEX文件 |
单线程MEX文件由MATLAB函数的入口点生成。MEX文件继承了 |
|
帮助文件为单线程MEX文件 |
MATLAB文件 |
单线程MEX文件的MATLAB帮助文件。帮助文件与MEX文件同名,但扩展名为“.m”。要调用帮助文件,请键入 帮助文件显示有关如何调用MEX文件、其语法以及MEX文件输入的类型(大小、类和复杂性)的信息。调用MEX文件的语法应与帮助文件中显示的语法相同。 |
|
自我诊断分析仪功能 |
p代码文件 |
的输入的第一个维度必须是相应输入的第一个维度的倍数 分析仪继承了 |
|
自我诊断分析仪功能的帮助文件 |
MATLAB文件 |
自我诊断分析仪功能的帮助文件。帮助文件与MEX文件同名,但扩展名为“.m”。要调用帮助文件,请键入 自诊断分析器函数的帮助文件显示有关如何调用分析器函数、其语法以及分析器函数输入的类型(大小、类和复杂性)的信息。调用analyzer函数的语法应与帮助文件中显示的语法相同。 |
|
一般的局限性:
在Windows和Linux上,必须使用支持开放式多处理(OpenMP)应用程序接口的编译器。请参阅金宝app金宝app支持的编译器.
如果输入MATLAB函数有运行时错误,则在运行多线程MEX文件时不会捕获错误dspunfold
函数,调用Codegen.
在MATLAB函数上,确保MEX文件已成功生成。
如果生成的代码使用大量内存存储局部变量,则4
兆字节
在Windows平台上,生成的多线程MEX文件可能具有意外行为。该限制因平台而异。作为一种解决方法,减少输入信号的大小或重构MATLAB函数以使用更少的本地内存。
dspunfold
不支持:金宝app
分析仪限制:
以下限制适用于由此产生的分析仪功能dspunfold
函数。有关分析器功能的更多信息,请参阅“更多关于”部分的“自我诊断分析器”dspunfold
.
如果分析器输入的多个帧相同,则分析器可能抛出假阳性通过结果。建议您为分析器的每个输入提供至少两个不同的帧。
如果在入口点Matlab函数中的算法基于输入值选择其状态长度,则分析仪可能提供不同通过不同输入值的结果。有关示例,请参见FIR_Mean
作用于为什么分析器选择了错误的状态长度?.
如果输入到入口点的MATLAB函数确实会立即影响输出,分析器可能会抛出假阳性通过结果。有关示例,请参见输入输出
作用于为什么分析器选择零状态长度?.
如果多线程MEX文件和单线程MEX文件的输出结果在统计上匹配,但在数字上不匹配,则分析器不通过。考虑到过滤噪音
函数,它用FIR滤波器滤除随机噪声信号。的函数调用兰德恩
从本身开始产生随机噪声。因此,输出结果过滤噪音
函数匹配统计而不是数字匹配。
作用输出= FilterNoise (x)持续的冷滤机如果isempty(FIRFilter) FIRFilter = dsp。FIRFilter (“分子”,fir1(12,0.4));结束输出= firfilter(x + Randn(1000,1));结束
过滤噪音
,该工具检测到无限状态长度。由于该工具无法找到有限状态长度的数值匹配,因此它选择了无限状态长度。
dspunfold过滤噪音arg游戏{randn(1000,1)}-汽车
创建单线程MEX文件FilterNoise_st。搜索最小状态长度(这可能需要一段时间)检查无状态…检查不足1…检查不足无限…充分检查…创建多线程MEX文件FilterNoise_mt. Infmexw64警告:出于性能考虑,多线程被禁用。当状态长度大于或等于(Threads-1)*重复帧(本例中为3帧)时,会发生这种情况。在unfoldingEngine/generate(第207行)在dsp展开(第234行)创建分析仪文件FilterNoise_analyzer . >在code .internal.warning(第8行
算法不需要无限状态。FIR滤波器的状态长度,因此该算法是12.
.
称呼dspunfold
状态长度设置为12。
dspunfold过滤噪音arg游戏{randn(1000,1)}-12.-F符合事实的
分析输入MATLAB函数FilterNoise创建单线程MEX文件FilterNoise_st.mexw64创建多线程MEX文件FilterNoise_mt.mexw64创建分析器文件FilterNoise_analyzer
运行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 OPTHEAD OFSHAYWOW任何性能收益。在这种情况下,请勿使用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文件,请遵循使用dsp展开生成多线程MEX文件的工作流.
使用前dspunfold
,叫Codegen.
对MATLAB函数的入口点进行分析,确保该函数成功生成MEX文件。
生成多线程MEX文件后使用dspunfold
,运行analyzer函数。确保analyzer功能通过。此规则的例外情况是,算法生成的结果在统计上匹配,但在数字上不匹配。在此异常情况下,analyzer函数不可用通过
,即使dspunfold
函数生成有效的多线程MEX文件。有关示例,请参阅“分析仪限制”。
有关使用MEX文件和分析器的帮助,请在MATLAB命令提示下,输入帮助
和< mexfile名称>
帮助
.<分析仪名称>
国家长
如果选择的状态长度大于或等于确切状态长度的值,则分析器通过。如果分析器失败,请增加状态长度,重新生成MEX文件,然后再次验证。
如果状态长度大于0
,输入标记为帧(通过-F
选项)必须具有相同的尺寸。
生成MEX文件并运行分析器时,请使用调用相同状态长度的输入。
自动状态长度检测
当您设置-
到汽车
:
如果入口点MATLAB函数中的算法根据输入值选择代码路径,请使用选择状态长度最长的代码路径的输入。
提供随机输入到arg游戏
.
选择对输出有直接影响的输入。请参阅为什么分析器选择零状态长度?.
分析仪
确保多线程MEX文件和单线程MEX文件的输出不包含南
或者正
.分析器不能进行数字检查和返回通过
作为假
.自动状态长度检测工具检测无限状态长度并显示警告
警告
多线程MEX文件的输出结果与单线程MEX文件的输出结果不匹配,即使在状态长度为Infinite时也是如此。一个可能的原因是,输入MATLAB函数在连续运行之间产生不同的输出结果,即使是相同的输入值。
为分析器的每个输入提供具有不同值的多帧。为了提高分析器的有效性,沿着第一个维度添加连续的帧。
为分析器提供导致有效代码覆盖的输入。
加速
要提高多线程MEX文件的加速比,请在示例中指定确切的状态长度。您可以通过设置至少一个项目来指定样本中的状态长度框架输入
到符合事实的
. 样本的使用减少了开销并提高了加速比。
为了提高较大延迟成本的加速,您可以:
增加重复系数。使用-R.
选择。
增加线程数。使用-T.
选择。
对于在不改变算法行为的情况下可以划分为样本的每个输入,请将帧状态设置为符合事实的
使用-F
选择。然后在示例中考虑输入,这可以提高生成的多线程MEX文件的速度。
多线程MEX文件将多输入信号帧缓冲到缓冲器中2
×线程×重复框架,在哪里线程是线程数,和重复是重复因子。MEX文件使用多个内核同时处理这些帧。此过程引入了一些确定性延迟,其中潜伏=2
×线程×重复.延迟与通过增加线程数或重复因子可能获得的加速相权衡。