主要内容

使用生成多线程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,noise)持续的Rlsf1 ffilt noise_var如果Isempty (rlsf1) rlsf1 = dsp。RLSFilter (32,“ForgettingFactor”, 0.98);Ffilt = dsp。FIRFilter (“分子”fir1(32升至));未知系统Noise_var = 1e-4;结束D = ffilt(x) + noise_var *噪声;期望信号百分比[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真正的
创建单线程MEX文件AdaptiveFilter_st。mexw64创建多线程MEX文件AdaptiveFilter_mt. txt。mexw64创建分析文件AdaptiveFilter_analyzer

运行生成的分析器函数

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

AdaptiveFilter_analyzer (randn (1000 * 4, 1), randn (1000 * 4))
分析多线程MEX文件AdaptiveFilter_mt。mexw64……延迟= 8帧加速= 3.5倍警告:多线程MEX文件AdaptiveFilter_mt的输出结果。mexw64与单线程MEX文件AdaptiveFilter_st.mexw64的输出结果不匹配。在生成多线程MEX文件AdaptiveFilter_mt.mexw64时,检查是否为dsp展开函数提供了正确的状态长度值。有关此问题的最佳实践和可能的解决方案,请参阅dspspread函数参考页中的“Tips”部分。>在code .internal.warning(第8行)在AdaptiveFilter_analyzer ans = Latency: 8 Speedup: 3.4686 Pass: 0

增加状态长度

分析仪未通过验证。对象提供了错误的状态长度值dspunfold函数。将状态长度增加到1000样例并重复前一节中的过程。

dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s1000- f真正的
创建单线程MEX文件AdaptiveFilter_st。mexw64创建多线程MEX文件AdaptiveFilter_mt. txt。mexw64创建分析文件AdaptiveFilter_analyzer

运行生成的分析器。

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

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

提高加速和调整延迟

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

dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s1000- r2- f真正的
创建单线程MEX文件AdaptiveFilter_st。mexw64创建多线程MEX文件AdaptiveFilter_mt. txt。mexw64创建分析文件AdaptiveFilter_analyzer

运行分析器。

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

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

使用自动状态长度检测

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

dspunfoldAdaptiveFilterarg游戏{randn (1000 1), randn (1000 1)}- s汽车- f真正的
创建单线程MEX文件AdaptiveFilter_st。搜索最小状态长度(这可能需要一段时间)检查不足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 Pass: 1

分析仪通过验证。

另请参阅

功能

相关的话题

Baidu
map