主要内容

用于生成多线程MEX文件的工作流程dspunfold.

  1. 运行入口点Matlab®使用要测试的输入功能。确保函数没有运行时错误。称呼Codegen.在函数上并确保它成功生成MEX文件。

  2. 使用Multhreaded MEX文件使用dspunfold.。使用该状态长度指定状态长度-选项。状态长度必须至少与MATLAB功能中的算法相同的长度。默认情况下,-被设定为0.,表示算法无状态。

  3. 运行生成的分析仪功能。使用经过标志以验证多线程MEX文件的输出结果和单线程MEX文件匹配。此外,检查分析仪功能显示的加速和延迟是否令人满意。

  4. 如果输出结果不匹配,则增加状态长度并再次生成多线程MEX文件。或者,使用自动状态长度检测(使用指定使用-s auto.)确定与输出匹配的最小状态长度。

  5. 如果输出结果匹配但加速和延迟不令人满意,请增加重复因子-R.或者增加使用线程的数量-T.。此外,您还可以调整状态长度。调整dspunfold.选项并生成新的多线程MEX文件,直到您对结果满意..

有关使用Multithread MEX文件的最佳实践dspunfold.,查看“提示”部分dspunfold.

工作流示例

运行入口点matlab函数

创建切口点MATLAB函数。

功能[Y,MSE] = AdaptiveFilter(x,噪声)执着的RLSF1 FFILT COMPET_VAR.如果isempty(rlsf1)rlsf1 = dsp.rlsfilter(32,'忘记就活跃',0.98);ffilt = dsp.firfilter('分子',fir1(32,25));%未知系统COUNT_VAR = 1E-4;结尾d = ffilt(x)+ keate_var *噪声;%期望信号[y,e] = rlsf1(x,d);MSE = 10 * log10(总和(例如^ 2));结尾

该功能模拟RLS过滤器,其过滤输入信号X, 使用D.作为所需的信号。该函数返回过滤的输出y和过滤器错误E.

适应性熏碎使用您要测试的输入。验证功能是否运行而不会错误。

AdaptiveFilter(Randn(1000,1),Randn(1000,1));

称呼Codegen.适应性熏碎并生成MEX文件。

Codegen.适应性熏碎-  args.{Randn(1000,1),Randn(1000,1)}

使用多线程MEX文件使用dspunfold.

将状态长度设置为32.样品和重复因子1。提供大于或等于MATLAB函数中算法的状态长度。当至少一个条目FrameInputs.被设定为真的,在样本中考虑状态长度。

dspunfold.适应性熏碎-  args.{Randn(1000,1),Randn(1000,1)}-32.-F真的
分析输入MATLAB函数AdaptiveFilter创建单线程MEX文件AdaptiveFilter_st.mexw64创建多线程MEX文件AdaptiveFilter_mt.mexw64创建分析仪文件AdaptiveFilter_Analyzer

运行生成的分析仪功能

分析仪考虑输入的实际值。为了增加分析仪的效果,沿着输入的第一维提供至少两个不同的帧。

AdaptiveFilter_Analyzer(Randn(1000 * 4,1),Randn(1000 * 4,1))
分析多线程MEX文件AdaptiveFilter_mt.mexw64 ... latency = 8帧speedup = 3.5x警告:多线程mex文件Adaptivefilter_mt.mexw64的输出结果与单线程MEX文件AdaptiveFilter_st的输出结果不匹配。mexw64。在生成多线程MEX文件AdaptiveFilter_mt.mexW64时,检查您是否为DSPUNFOLD函数提供了正确的状态长度值。有关此问题的最佳实践和可能的解决方案,请参阅“DSPUNFOLD金宝搏官方网站函数参考”页面中的“提示”部分。>在Coder.internal.warning(第8行)在AdaptiveFilter_Analyzer ANS =延迟:8 Speedup:3.4686通过:0

增加状态长度

分析仪没有通过验证。显示的警告消息指示提供了错误的状态长度值dspunfold.功能。增加状态长度1000样本并从上一节重复该过程。

dspunfold.适应性熏碎-  args.{Randn(1000,1),Randn(1000,1)}-1000-F真的
分析输入MATLAB函数AdaptiveFilter创建单线程MEX文件AdaptiveFilter_st.mexw64创建多线程MEX文件AdaptiveFilter_mt.mexw64创建分析仪文件AdaptiveFilter_Analyzer

运行生成的分析仪。

AdaptiveFilter_Analyzer(Randn(1000 * 4,1),Randn(1000 * 4,1))
分析多线程MEX文件AdaptiveFilter_mt.mexw64 ...延迟= 8帧Speedup = 1.8x ans =延迟:8加速:1.7778通过:1

分析仪通过了验证。建议您向分析器功能提供不同的数字,并确保分析仪功能通过。

提高加速和调整延迟

如果您想提高Speedup,您的系统可以承受更大的延迟,请将重复因子增加到2

dspunfold.适应性熏碎-  args.{Randn(1000,1),Randn(1000,1)}-1000-R.2-F真的
分析输入MATLAB函数AdaptiveFilter创建单线程MEX文件AdaptiveFilter_st.mexw64创建多线程MEX文件AdaptiveFilter_mt.mexw64创建分析仪文件AdaptiveFilter_Analyzer

运行分析仪。

AdaptiveFilter_Analyzer(Randn(1000 * 4,1),Randn(1000 * 4,1))
分析多线程MEX文件AdaptiveFilter_mt.mexw64 ...延迟= 16帧Speedup = 2.4x ans =延迟:16加速:2.3674通过:1

重复此过程,直到您实现满意的加速和延迟。

使用自动状态长度检测

选择大于或等于算法状态长度的状态长度。如果在分析地确定算法的状态长度不容易,请使用自动状态长度检测工具。通过设置调用自动状态长度检测-汽车。该工具检测分析器通过验证的最小状态长度。

dspunfold.适应性熏碎-  args.{Randn(1000,1),Randn(1000,1)}-汽车-F真的
分析输入MATLAB函数AdaptiveFilter创建单螺纹MEX文件AdaptiveFilter_st.st.st.mexw64搜索最小状态长度(这可能需要一段时间)检查无状态......不足检查1000 ...足以检查500 ......不足检查750 ...不足检查875 ...足够的检查812 ......检查843的不足......足够的检查827 ......检查835不足......不足检查839 ...足以检查837 ...足以检查836 ...足够的最小状态长度为836创建多线程MEX文件AdaptiveFilter_mt.mexw64创建分析器文件AdaptiveFilter_Analyzer

最小的状态长度是836.样品。

运行生成的分析仪。

AdaptiveFilter_Analyzer(Randn(1000 * 4,1),Randn(1000 * 4,1))
分析多线程MEX文件AdaptiveFilter_mt.mexw64 ...延迟= 8帧Speedup = 1.9x ans =延迟:8加速:1.9137通过:1

分析仪通过了验证。

也可以看看

职能

相关话题