主要内容

dspunfold

生成一个多线程的MEX文件MATLAB函数

描述

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

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

请注意

此函数需要MATLAB编码器™许可证。

输入参数

全部折叠

选项

描述

例子

args参数

单元阵列

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

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

生成的多线程MEX文件专门针对论据

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

  • dsp展开FCN -args {ones(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”后缀,以及带有""后缀。

  • 输出指定名称

    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未指定,单位为州长是帧。

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

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

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

    状态长度是样本。

  • dspunfold fcn-args{randn(10,1),randn(10,1),randn(10,1)}-s3

    的默认值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

例子:dsp展开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文件

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\u mt

单线程MEX文件

MEX文件

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

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

  • dspunfold fcn生成fcn_st.mexw64

单线程MEX文件的帮助文件

MATLAB文件

单线程MEX文件的MATLAB帮助文件。帮助文件与MEX文件同名,但扩展名为“.m”。要调用帮助文件,请键入帮助<墨西哥人文件名>在MATLAB命令提示符处。

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

  • 帮助foo_st

  • 救命啊

自我诊断分析仪功能

p代码文件

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

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

报告包含以下字段:

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

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

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

的输入的第一个维度必须是相应输入的第一个维度的倍数arg游戏选择。其他维度必须完全匹配。

分析器继承输出的名字与一个""后缀。如果没有输出,则此文件的名称从MATLAB函数继承""后缀。

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

    示例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文件同名,但扩展名为“.m”。要调用帮助文件,请键入帮助在MATLAB。

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

帮助foo_分析器

限制

一般的局限性

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

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

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

  • dspunfold不支持:金宝app

    • 瓦拉金varargout在MATLAB函数中

    • 可变大小的输入和输出

    • P编码入口点MATLAB函数

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

分析仪的局限性

以下限制适用于由dspunfold函数。有关分析器功能的更多信息,请参阅“更多关于”部分的“自我诊断分析器”dspunfold

  • 如果分析器输入的多个帧相同,则分析器可能抛出假阳性通过结果。建议您为分析器的每个输入提供至少两个不同的帧。

  • 如果入口点MATLAB函数中的算法根据输入值选择其状态长度,则分析器可能会提供不同的通过不同输入值的结果。有关示例,请参见FIR_Mean函数为什么分析器选择了错误的状态长度?

  • 如果输入到入口点的MATLAB函数确实会立即影响输出,分析器可能会抛出假阳性通过结果。有关示例,请参见输入输出函数为什么分析器选择零状态长度?

  • 如果多线程MEX文件和单线程MEX文件的输出结果在统计上匹配,但在数字上不匹配,则分析器不通过。考虑到过滤噪音函数,它用FIR滤波器滤除随机噪声信号。的函数调用兰登从内部产生随机噪声。因此过滤噪音函数在统计上匹配,但在数值上不匹配。

    函数输出= FilterNoise (x)持续的FIRFilter如果isempty(FIRFilter) FIRFilter = dsp。FIRFilter (“分子”0.4 fir1 (12));结束输出=FIRFilter(x+randn(1000,1));结束
    当您运行自动状态长度检测工具运行时过滤噪音,该工具检测到无限状态长度。由于该工具无法找到有限状态长度的数值匹配,因此它选择了无限状态长度。

    dspunfold过滤噪音arg游戏{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。

    dspunfold过滤噪音arg游戏{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文件的输出匹配的最小状态长度。分析器使用给定的输入的数值arg游戏。要检测最有效的状态长度,请向arg游戏.在该模式下,不能进行输入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文件,请遵循使用dsp展开生成多线程MEX文件的工作流

  • 使用前dspunfold,叫编码基因对MATLAB函数的入口点进行分析,确保该函数成功生成MEX文件。

  • 生成多线程MEX文件后使用dspunfold,运行analyzer函数。确保analyzer功能通过。此规则的例外情况是,算法生成的结果在统计上匹配,但在数字上不匹配。在此异常情况下,analyzer函数不可用通过,尽管dspunfold函数生成有效的多线程MEX文件。有关示例,请参阅“Analyzer限制”。

  • 有关使用MEX文件和分析器的帮助,请在MATLAB命令提示符处输入帮助< mexfile名称>帮助<分析仪名称>

国家长

  • 如果选择的状态长度大于或等于确切状态长度的值,则分析器通过。如果分析器失败,请增加状态长度,重新生成MEX文件,然后再次验证。

  • 如果状态长度大于0,输入标记为帧(通过-f选项)必须具有相同的尺寸。

  • 生成MEX文件并运行分析器时,请使用调用相同状态长度的输入。

自动状态长度检测

当您设置-汽车

  • 如果入口点MATLAB函数中的算法根据输入值选择代码路径,请使用选择状态长度最长的代码路径的输入。

  • 提供随机输入arg游戏

  • 选择对输出有直接影响的输入。看到为什么分析器选择零状态长度?

分析器

  • 确保多线程MEX文件和单线程MEX文件的输出不包含.分析器不能进行数字检查和返回通过作为.自动状态长度检测工具检测无限状态长度并显示警告

    警告

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

  • 为分析器的每个输入提供具有不同值的多帧。为了提高分析器的有效性,沿着第一个维度添加连续的帧。

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

加速

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

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

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

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

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

算法

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

R2015b中引入