主要内容

dspunfold

生成从多线程MEX文件MATLAB函数

描述

dspunfold文件从入口点MATLAB生成一个多线程MEX文件®指定的功能文件,使用了展开技术。展开是一种通过并行化来提高吞吐量的技术。多线程MEX文件利用了主机的多核CPU架构,可以显著提高速度。除了多线程的MEX文件外,该函数还生成一个单线程的MEX文件、一个自诊断分析器函数和相应的帮助文件。

dspunfold选项文件从指定的入口点MATLAB函数生成一个多线程的MEX文件文件,使用指定的函数参数选项

笔记

此功能需要一个MATLAB编码器™执照。

输入参数

全部折叠

选项

描述

例子

args参数

单元阵列

输入点MATLAB函数的参数类型,指定为单元格数组。

单元格数组接受数字元素coder.typeof功能,编码器。常数函数。

生成的多线程MEX文件专门针对的大小、类和复杂性论据

单元格数组中的元素数量必须与入口点MATLAB函数所期望的参数数量相同。

  • dspunfold FCN -args {酮(10,1),5}

    dspunfold属性中的元素提取类型(大小、类和复杂性)信息论据单元阵列。

    fcn是MATLAB的入口点函数。

  • dsp展开FCN -args {code .typeof(ones(10,1)), code .typeof(5)}

    coder.typeof用于指定fcn参数。

  • dsp展开fcn -args {coder.Constant(ones(10,1)), coder.Constant(5)}

  • dspunfold fcn-args{}

    默认情况下,论据{}.空单元格数组{}表明fcn不接受输入参数。

- o输出

特征向量

输出多线程MEX文件的名称,指定为字符向量。如果没有输出,则生成的多线程MEX文件的名称继承自输入的MATLAB函数“_mt”后缀。dspunfold还为此名称添加特定于平台的扩展名。此外dspunfold生成与单线程MEX文件“_st”后缀,以及带有“_analyzer”后缀。

  • 输出指定名称

    dspunfold FCN

    生成的文件:fcn_mt.mexw64fcn_st.mexw64fcn_analyzer.p

  • 输出指定名称

    这句话的意思是

    生成的文件:foo.mexw64foo_st.mexw64foo_分析器

-s statelength

大于或等于零的标量整数

汽车

入口点MATLAB函数中算法的状态长度,指定为大于或等于零的标量整数,或汽车。默认情况下州长帧,表示算法是无状态的。

如果至少有一项frameinputs真正的州长在样本中考虑。

有关框架和示例的信息,请参见样品 - 和基于框架的概念

- s汽车触发状态长度自动检测。在此模式下,必须向论据单元阵列。这些输入检测算法的状态长度。你可以输入编码器。常数但不是coder.typeof.当调用自动状态长度检测,建议您提供随机输入到论据数组。请参阅自动状态长度检测

  • dsp展开FCN -args {randn(10,1), randn(10,1), randn(10,1)} -s 3 -f[假,假,假]

    状态长度是三个帧。

  • dspunfold fcn-args{randn(10,1),randn(10,1),randn(10,1)}-s3-f[真,假,假]

    状态长度是三个样本。国家长度样品考虑,因为至少一个条目-f选择是真正的

  • dsp展开FCN -args {randn(10,1), randn(10,1), randn(10,1)} -s auto

    调用自动状态长度检测。

  • dsp展开FCN -args{编码器。-s auto . Typeof (randn(10,1)), code . Typeof (randn(10,1)), code . Typeof (randn(10,1)))生成此错误消息:输入参数1的类型是coder。PrimitiveType在使用-s auto时不受支金宝app持

-f帧输入

标量的逻辑

逻辑值向量

帧状态的输入参数的入口点MATLAB函数,指定为之一真正的

  • 真正的-输入是帧,可以细分为样本,而不改变系统行为。

  • -如果不更改系统行为,则无法将输入细分为样本。例如,如果不更改过滤器的特性,则无法细分过滤器的系数。

默认情况下,frameinputs

frameinputs设置为标量逻辑值将同时设置所有输入的帧状态。

指定州长在示例中,至少设置一个frameinputs真正的

如果frameinputs未指定,则单元的州长是帧。

  • dspunfold FCN -args {randn(10,1),randn(10,1),randn(10,1)} -s 3 -f真

    所有输入都被标记为帧。状态长度是三个样本。

  • dspunfold fcn-args{randn(10,1),randn(10,1),randn(10,1)}-s3-f[真,假,假]

    状态长度是三个样本。

  • dsp展开FCN -args {randn(10,1), randn(10,1), randn(10,1)} -s 3

    的默认值frameinputs.状态长度是三个帧。

-重复

正整数

用于生成多线程MEX文件的重复因子,指定为正整数。的默认值重复1. 看见重复的因素

dspunfold fcn-args{randn(10,2),randn(20,2),randn(30,3)}-r2

-t形螺纹

正整数

多线程MEX文件使用的线程数,指定为正整数。的默认值线程是机器上物理CPU核的数量。看到线程

dspunfold-fcn-args{randn(10,1),randn(20,2),randn(30,3)}-t4

- v详细

标量的逻辑

选项显示代码生成期间的详细输出,指定为真正的.默认值是真正的

  • dsp展开FCN -args {randn(10,1), randn(20,2), randn(30,3)} -v true

  • dsp展开FCN -args {randn(10,1), randn(20,2), randn(30,3)} -v假

入口点MATLAB函数从dspunfold生成多线程MEX文件。该函数必须支持代码生成。金宝app

例子:dspunfold FCN -args {randn(10,1),randn(10,2),randn(20,1)}

fcn是MATLAB函数的入口点和1) {randn(10日,randn (10, 2), randn(20日1)}是它的输入参数。

输出文件

当你调用dspunfold在一个入口点MATLAB函数上,dspunfold生成以下文件。

文件

价值

描述

例子

多线程MEX文件

墨西哥人文件

从入口点MATLAB函数生成的多线程MEX文件。MEX文件继承输出的名字。如果没有输出被指定的名称,该文件的名称从MATLAB功能继承与“_mt”后缀。名称中还添加了特定于平台的扩展名。

  • 这句话的意思是生成foo.mexw64

  • dspunfold FCN生成fcn_mt.mexw64

多线程MEX文件的帮助文件

MATLAB文件

多线程MEX文件的MATLAB帮助文件。该帮助文件与MEX文件同名,但扩展名为“.m”。要调用该帮助文件,请键入帮助在MATLAB命令提示符处。

此帮助文件显示有关如何调用MEX文件及其语法的信息,延迟,以及输入到MEX文件的类型(大小、类和复杂性)。此外,帮助文件记录了所使用的参数dspunfold-线程重复,国家长.当您调用MEX文件时,此信息非常有用。调用MEX文件的语法应该与帮助文件中显示的语法相同。

  • 帮助foo

  • 帮助fcn_mt

单线程MEX文件

墨西哥人文件

单线程MEX文件生成的入口点MATLAB函数。MEX文件继承输出的名字与一个“_st”后缀。如果没有输出被指定的名称,该文件的名称从MATLAB功能继承与“_st”后缀。名称中还添加了特定于平台的扩展名。使用此文件作为基准来比较多线程MEX文件的速度。

  • 这句话的意思是生成foo_st.mexw64

  • dspunfold FCN生成fcn_st.mexw64

单线程MEX文件的帮助文件

MATLAB文件

MATLAB帮助文件的单线程MEX文件。帮助文件与MEX文件具有相同的名称,但带有'。米的扩展。要调用帮助文件,输入帮助在MATLAB命令提示符处。

帮助文件显示了关于如何调用MEX文件、它的语法以及输入到MEX文件的类型(大小、类和复杂性)的信息。调用MEX文件的语法应该与帮助文件中显示的语法相同。

  • 帮助foo_st

  • 救命啊

自我诊断分析仪功能

P编码的文件

报告= function_analyzer(输入1,输入2,…输入n)测量多线程MEX文件和单线程MEX文件之间的速度差。此文件验证输出值是否匹配。

报告= function_analyzer(延迟)报告由展开引起的多线程MEX文件的延迟。

报告包含以下字段:

  • 延迟-延迟的值(以帧为单位)

  • 加速-多线程MEX文件和单线程MEX文件之间的加速差异。如果你指定延迟选项时,该字段的值为空[]

  • Pass——逻辑值,显示生成的多线程MEX文件和单线程MEX文件之间的输出是否匹配。如果你指定延迟选项时,该字段的值为空[]

的分析器输入端的第一尺寸必须给予的相应输入端的第一尺寸的倍数,- args.选择。其他维度必须完全匹配。

分析器继承输出的名字与一个“_analyzer”后缀。如果没有输出被指定的名称,该文件的名称从MATLAB功能继承与“_analyzer”后缀。

  • 沿第一个尺寸标注指定了多个具有不同值的框架

    示例1:报告= foo_analyzer(randn(10*2,1), randn(20*2,2), randn(30*3,3)))

    示例2:报告= foo_analyzer ([randn (10,1); randn (10,1)], [randn (20,1); randn (20,1)], [randn(30、1);randn(30、1);randn(30日1)))

  • 报告=foo_分析器(“延迟”)

自我诊断分析仪功能的帮助文件

MATLAB文件

自诊断分析器功能的帮助文件。帮助文件与MEX文件具有相同的名称,但带有'。米的扩展。要调用帮助文件,输入帮助在MATLAB。

自诊断分析器函数的帮助文件显示了关于如何调用分析器函数、它的语法和分析器函数输入的类型(大小、类和复杂性)的信息。调用分析器函数的语法应该与帮助文件中显示的语法相同。

帮助foo_分析器

限制

一般限制

  • 在Windows和Linux上,必须使用支持开放多处理(OpenMP)应用程序接口的编译器。金宝app看到金宝app支持的编译器

  • 如果你有macOS与一个Xcode版本12.0或更高版本,使用dspunfold不支持此函数。金宝app

  • 如果输入MATLAB函数有运行时错误,则在运行多线程MEX文件时不会捕获错误。在你使用dspunfold函数,调用编码基因并确保成功生成MEX文件。

  • 如果生成的代码使用了大量的内存来存储局部变量,围绕4.MB在Windows平台上,生成的多线程MEX文件可能会有意外的行为。这个限制因平台而异。作为一个解决方案,减少输入信号的大小或重构MATLAB函数以使用更少的本地内存。

  • dspunfold不支持:金宝app

    • 瓦拉金varargout在MATLAB函数中

    • 可变大小的输入和输出

    • P编码入口点MATLAB函数

    • 单元格数组作为输入和输出

分析仪的局限性

以下限制适用于由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

更多关于

全部折叠

国长

该算法的状态长度。

大多数时候,状态长度使用dspunfold匹配的入口点功能的MATLAB算法的状态长度。如果该算法简单,状态长度很容易确定。例如,FIR滤波器的状态长度在滤波器抽头数 -1.在某些情况下,为了优化加速,dspunfold选择一个状态的长度是从使用指定的算法状态长度或状态长度不同-选择。例如,当状态长度大于(线程- 1) ×重复框架,dspunfold认为状态长度是无限的。此外,出于性能考虑,多线程被禁用。

自动状态长度检测

您可以自动检测多线程MEX和单线程MEX输出匹配的最小状态长度。

在复杂的算法中,状态长度的解析确定并不容易。在这种情况下,使用分析器来计算状态长度。当您设置-汽车dspunfold调用分析器。所述分析器计算用于不同的状态长度的输出,并检测最小状态长度的量,多线程MEX文件和单线程MEX文件匹配的输出。所述分析仪使用的给定到输入端的数字值- args.。要检测最有效的状态长度,请向- args..在该模式下,不能进行输入coder.typeof论据.由于此工具需要额外的分析,因此生成MEX文件的时间会增加。

当您使用依赖于输入值的代码路径对算法使用自动状态长度检测时,请使用选择状态长度最长的代码路径的输入。此外,输入必须对输出有直接影响。如果输入选择了触发运行时错误的代码路径,则自动状态长度检测将停止,分析器也将停止。确保MATLAB函数支持代码生成,并且测试输入没有运行时错误。金宝app在调用之前dspunfold, 称呼编码基因关于入口点MATLAB函数。另外,模拟入口点MATLAB函数,以确保它没有运行时错误。

线程

-t选项指定多线程MEX文件使用的线程数。

增加此值可提高多线程MEX加速,以更大的延迟的成本。减小该值减少了等待时间并且潜在地减少了多线程MEX加速。

重复的因素

重复因子是每个线程在一个处理步骤中处理的连续帧数。

增加此值可减少每帧数据的开销,可能以更大的延迟为代价提高加速比。减少此值可减少延迟,并可能降低多线程MEX加速比。

自我诊断分析仪

自我诊断分析器函数是一个帮助工具,由MEX文件生成。此函数测量多线程MEX文件与单线程MEX文件相比的加速增益。analyzer函数还验证多线程MEX文件和单线程MEX文件的输出是否匹配。

如果指定的状态长度值不正确,则输出通常不匹配。要检查多线程MEX文件和单线程MEX文件之间的数字匹配,请为分析器的每个输入参数提供至少两个不同的帧。框架将沿第一个维度追加。分析仪在验证输出是否匹配的同时,在这些帧之间交替切换。未能为每个输入提供多个帧可能会降低分析仪的有效性,并可能导致假阳性验证结果。换句话说,分析器可能会产生经过=1即使指定的状态长度值不正确,也会产生结果。分析仪最多交替3次(2×线程×重复)的框架。如果你的算法需要超过3 × (2×线程×重复)帧来验证结果,则分析仪无法准确验证。

提示

一般

  • 不显示图表,范围,还是从多线程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文件并运行分析器时,使用调用相同状态长度的输入。

自动状态长度检测

当您设置-汽车

分析器

  • 确保多线程MEX文件和单线程MEX文件的输出不包含.该分析仪不能做数字支票和退货经过作为.状态长度自动检测工具检测无限状态长度并显示警告

    警告

    多线程MEX文件的输出结果与单线程MEX文件的输出结果不匹配,即使在状态长度为Infinite时也是如此。一个可能的原因是,输入MATLAB函数在连续运行之间产生不同的输出结果,即使是相同的输入值。

  • 提供用于分析仪的每一个输入不同的值的多个帧。为了改善分析器有效性,追加沿着第一维度连续帧。

  • 向分析器提供能够有效覆盖代码的输入。

加速

  • 要提高多线程MEX文件的速度,请在示例中指定准确的状态长度。可以通过设置至少一个项来指定样例中的状态长度frameinputs真正的.使用样例可以减少开销并增加加速。

  • 要以更大的延迟为代价提高加速,您可以:

    • 增加重复系数。使用-r选择。

    • 增加线程的数量。使用-t选择。

  • 对于每个可以被划分为样本而不改变算法行为的输入,设置帧状态为真正的使用-f选择。输入,然后在样品中,这可以增加所产生的多线程MEX文件的加速考虑。

算法

多线程MEX文件将多个输入信号帧缓冲到2×线程×重复框架,在哪里线程是线程的数量,和重复为重复因子。MEX文件使用多个核同时处理这些帧。这个过程引入了一些确定性延迟,其中延迟=2×线程×重复.等待时间为与您可能会通过增加线程数或重复系数获得加速权衡。

R2015b中引入