主要内容

dspunfold

生成一个多线程的MEX文件MATLAB作用

描述

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

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

请注意

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

输入参数

全部崩溃

选项

价值观

描述

例子

-args参数

单元阵列

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

单元格阵列接受数字元素,即编码员功能,以及编码器常数函数。

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

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

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

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

    fcn是MATLAB函数的入口点。

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

    编码员用于指定类型的类型fcn参数。

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

  • dspunfold fcn-args{}

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

- o输出

特征向量

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

  • 输出指定名称

    dspunfold fcn

    生成的文件:fcn_mt.mexw64.fcn_街mexw64fcn_analyzer.p

  • 输出指定名称

    这句话的意思是

    生成的文件:foo.mexw64福乌街mexw64foo_Analyzer.P.

- s statelength

大于或等于零的标量整数

汽车

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

如果至少有一个条目框架输入符合事实的Statelthion.在样品中被考虑。

有关框架和样品的信息,请参阅基于样本和框架的概念

-s自动触发自动状态长度检测。在此模式下,您必须向论据细胞阵列。这些输入检测算法的状态长度。你可以输入编码器常数但不是编码员.在调用自动状态长度检测时,建议您向论据大批。看自动状态长度检测

  • 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)} -s 3 -f [true,false,false]

    状态长度是样本。状态长度在样本中被考虑,因为至少有一个-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 FrameNputs.

标量逻辑

逻辑值向量

帧状态的输入参数的入口点MATLAB函数,指定为之一符合事实的或者

  • 符合事实的-输入以帧为单位,可以细分为样本,而无需更改系统行为。

  • - 在不改变系统行为的情况下无法将输入分为样本。例如,您不能在不改变滤波器的特征的情况下缩小过滤器的系数。

默认情况下,框架输入

框架输入设置为标量逻辑值可同时设置所有输入的帧状态。

指明Statelthion.在样品中,至少设置一个条目框架输入符合事实的

如果框架输入未指定,单位为Statelthion.是帧。

  • 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)} -s 3 -f [true,false,false]

    状态长度是样本。

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

    默认值框架输入. 状态长度为帧。

-R重复

正整数

重复因子用于生成多线程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详细

标量逻辑

用于在代码生成期间显示详细输出的选项,指定为符合事实的或者. 默认值是符合事实的

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

  • dspunfold 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函数继承"后缀。名称中还添加了特定于平台的扩展。

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

  • dspunfold fcn生成fcn_mt.mexw64.

帮助文件为多线程MEX文件

MATLAB文件

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

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

  • 帮助foo

  • 帮助fcn\u mt

单线程MEX文件

MEX文件

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

  • 这句话的意思是生成福乌街mexw64

  • dspunfold fcn生成fcn_街mexw64

帮助文件为单线程MEX文件

MATLAB文件

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

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

  • 帮助foo_st

  • 帮助fcn_st.

自我诊断分析仪功能

p代码文件

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

报告=功能分析仪(“延迟”)报告由展开引入的多线程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_Analyzer('Latency')

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

MATLAB文件

自我诊断分析仪功能的帮助文件。帮助文件与MEX文件同名,但扩展名为“.m”。要调用帮助文件,请键入帮助在MATLAB中。

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

帮助foo_analyzer

局限性

一般的局限性

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

  • 如果输入MATLAB函数有运行时错误,则在运行多线程MEX文件时不会捕获错误dspunfold函数,调用Codegen.在MATLAB函数上,确保MEX文件已成功生成。

  • 如果生成的代码使用大量内存存储局部变量,则4兆字节在Windows平台上,生成的多线程MEX文件可能具有意外行为。该限制因平台而异。作为一种解决方法,减少输入信号的大小或重构MATLAB函数以使用更少的本地内存。

  • dspunfold不支持:金宝app

    • varargin.瓦拉戈特在MATLAB函数中

    • 可变大小的输入和输出

    • P编码入口点Matlab函数

    • 单元阵列作为输入和输出

分析仪限制

以下限制适用于由此产生的分析仪功能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

更多关于

全部崩溃

国家长

算法的状态长度。

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

自动状态长度检测

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

在复杂的算法中,状态长度的解析确定并不容易。在这种情况下,使用分析器来计算状态长度。当您设置-汽车dspunfold调用分析器。分析器计算不同状态长度的输出,并检测多线程MEX文件和单线程MEX文件的输出匹配的最小状态长度。分析器使用给定的输入的数值arg游戏.要检测最有效的状态长度,请提供随机输入arg游戏。在此模式下,您不能输入编码员论据.由于此工具需要额外的分析,因此生成MEX文件的时间会增加。

当您使用依赖于输入值的代码路径对算法使用自动状态长度检测时,请使用选择状态长度最长的代码路径的输入。此外,输入必须对输出有直接影响。如果输入选择了触发运行时错误的代码路径,则自动状态长度检测将停止,分析器也将停止。确保MATLAB函数支持代码生成,并且测试输入没有运行时错误。金宝app在调用之前dspunfold,叫Codegen.在入学点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,叫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×线程×重复.延迟与通过增加线程数或重复因子可能获得的加速相权衡。

介绍在R2015B.