主要内容

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

  1. 运行入口点MATLAB®函数带有要测试的输入。确保函数没有运行时错误。调用codegen并确保它成功生成一个MEX文件。

  2. 使用。生成多线程MEX文件dspunfold.属性指定状态长度- s选择。状态长度必须至少与MATLAB函数中的算法长度相同。默认情况下,- s被设置为0,表示该算法是无状态的。

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

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

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

使用。获取生成多线程MEX文件的最佳实践dspunfold的“提示”部分dspunfold

工作流示例

运行入口点MATLAB函数

创建入口点MATLAB函数。

函数[y, mse] = AdaptiveFilter (x,噪音)持续的rlsf1 ffilt noise_var如果Isempty (rlsf1) rlsf1 = dsp。RLSFilter (32,“ForgettingFactor”, 0.98);ffilt = dsp。FIRFilter (“分子”fir1(32升至));%未知系统noise_var = 1的军医;结束D = ffilt(x) + noise_var * noise;%期望信号[y,e] = rlsf1(x, d);mse = 10 * log10 (sum (e。^ 2));结束

这个函数模拟了一个RLS滤波器,它对输入信号进行滤波x,使用d作为所需的信号。函数返回过滤后的输出y滤波器出现了错误e

运行AdaptiveFilter使用您想要测试的输入。验证函数运行时没有错误。

AdaptiveFilter (randn (1000 1), randn (1000,1));

调用codegenAdaptiveFilter并生成一个MEX文件。

codegenAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}

使用生成一个多线程的MEX文件dspunfold

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

dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s32- f真正的
分析MATLAB输入函数AdaptiveFilter创建多线程MEX文件AdaptiveFilter_mt。mexw64创建分析器文件AdaptiveFilter_analyzer

运行生成的分析器功能

分析器考虑输入的实际值。为了提高分析器的有效性,在输入的第一个维度上提供至少两个不同的帧。

AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……Warning: The output results of The multi-thread MEX file AdaptiveFilter_mt. txtmexw64与单线程MEX文件AdaptiveFilter_st.mexw64的输出结果不匹配。在生成多线程MEX文件AdaptiveFilter_mt.mexw64时,检查是否为dspopened函数提供了正确的状态长度值。有关此问题的最佳实践和可能的解决方案,请参阅dsp展开函数参考页金宝搏官方网站中的“技巧”一节。> In code .internal.warning (line 8) In AdaptiveFilter_analyzer ans = Latency: 8 Speedup: 3.4686 Pass: 0

增加状态长度

分析仪未通过检定。显示的警告消息表明提供了错误的状态长度值dspunfold函数。将状态长度增加为1000示例并重复上一节的过程。

dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s1000- f真正的
分析MATLAB输入函数AdaptiveFilter创建多线程MEX文件AdaptiveFilter_mt。mexw64创建分析器文件AdaptiveFilter_analyzer

运行生成的分析器。

AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……延迟= 8帧加速= 1.8x ans =延迟:8加速:1.7778通过:1

分析仪通过了验证。建议您为analyzer函数提供不同的数值,并确保analyzer函数通过。

提高加速和调整延迟

如果您想提高加速,并且您的系统能够承受更大的延迟,那么将重复因子增加到2

dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s1000- r2- f真正的
分析MATLAB输入函数AdaptiveFilter创建多线程MEX文件AdaptiveFilter_mt。mexw64创建分析器文件AdaptiveFilter_analyzer

运行分析器。

AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……延迟= 16帧加速= 2.4倍ans =延迟:16加速:2.3674通过:1

重复这个过程,直到达到满意的加速和延迟。

使用自动状态长度检测

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

dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s汽车- f真正的
分析MATLAB输入函数AdaptiveFilter搜索最小状态长度(这可能需要一段时间)检查无状态…检查1000…足够检查500…检查不足750…检查875…足够检查812…检查843…足够检查827…检查不足835…检查839… Sufficient Checking 837 ... Sufficient Checking 836 ... Sufficient Minimal state length is 836 Creating multi-threaded MEX file AdaptiveFilter_mt.mexw64 Creating analyzer file AdaptiveFilter_analyzer

最小状态长度为836样本。

运行生成的分析器。

AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……延迟= 8帧加速= 1.9x ans =延迟:8加速:1.9137通过:1

分析仪通过了验证。

另请参阅

功能

相关的话题