主要内容

多线程的墨西哥人文件生成

这个例子展示了如何使用dspunfold函数来生成一个多线程的墨西哥人从MATLAB®文件函数使用展开技术。MATLAB函数可以包含一个算法是无状态的(没有国家)或状态(状态)。

请注意:下面的例子假定当前主机至少有两个物理CPU核心。给出截图,加速和延迟值收集使用主机有六个物理CPU核心。

需要MathWorks™产品:s manbetx 845

  • DSP系统工具箱™

  • MATLAB编码器™

用dspunfold MATLAB函数包含一个无状态的算法

考虑到MATLAB函数dspunfoldDCTExample。这个函数计算输入信号的DCT和回报的价值和索引的最大能量点

类型dspunfoldDCTExample.m
函数[peakValue peakIndex] = dspunfoldDCTExample (x) %无状态的MATLAB函数计算信号的dct(如音频),和%返回值和指数最高的能源点% 2015年版权MathWorks Inc . x = dct (x);[peakValue, peakIndex] = max (abs (X));结束

加速算法,一种常见的方法是生成一个墨西哥人文件使用codegen函数。这个例子展示了如何使用一个输入时这样做4096双打。文件生成的墨西哥人,dspunfoldDCTExample_mexsinglethreaded。

codegendspunfoldDCTExamplearg游戏{(1:4096)}
代码生成成功。

要生成一个多线程的墨西哥人文件,可以使用dspunfold函数。这个论点- s 0表明该算法dspunfoldDCTExample是无状态的。

dspunfolddspunfoldDCTExamplearg游戏{(1:4096)}- s0
状态长度:0框架,重复:1、输出延时:12帧,线程:6分析:dspunfoldDCTExample。m创建线程的墨西哥人文件:dspunfoldDCTExample_st。mexa64创建多线程的墨西哥人文件:dspunfoldDCTExample_mt。mexa64创建分析器文件:dspunfoldDCTExample_analyzer.p

这个命令生成这些文件:

  • 多线程的墨西哥人文件dspunfoldDCTExample_mt

  • 单线程的墨西哥人文件dspunfoldDCTExample_st,这是相同的墨西哥人文件获得使用codegen函数

  • 自我诊断分析仪功能dspunfoldDCTExample_analyzer

也生成了额外的三个MATLAB文件,包含每个上面的帮助文件。

测量加速多线程的墨西哥人文件相对于单线程的墨西哥人文件,看到函数的例子dspunfoldBenchmarkDCTExample

类型dspunfoldBenchmarkDCTExample
dspunfoldBenchmarkDCTExample %函数用来测量多线程加速的墨西哥人文件% dspunfoldDCTExample_mt dspunfold vs使用单线程获得墨西哥人dspunfoldDCTExample_st %文件。% 2015年版权MathWorks公司清楚dspunfoldDCTExample_mt;%为基准精度目的numFrames = 1 e5;inputFrame = (1:4096) ';%首次运行排除在时间测量dspunfoldDCTExample_st (inputFrame);抽搐;%度量执行时间为单线程的墨西哥人帧= 1:numFrames dspunfoldDCTExample_st (inputFrame);结束timeSingleThreaded = toc;%首次运行排除在时间测量dspunfoldDCTExample_mt (inputFrame);抽搐; % measure execution time for the multi-threaded MEX for frame = 1:numFrames dspunfoldDCTExample_mt(inputFrame); end timeMultiThreaded = toc; fprintf('Speedup = %.1fx\n',timeSingleThreaded/timeMultiThreaded);

dspunfoldBenchmarkDCTExample措施的执行时间dspunfoldDCTExample_stdspunfoldDCTExample_mt来处理numFrames帧。最后,它打印加速,多线程的墨西哥人文件执行时间之间的比例和单线程的墨西哥人文件执行时间。

运行示例。

dspunfoldBenchmarkDCTExample;
加速x = 2.9

改善加速,增加重复的值。修改值,重复使用- r国旗。关于重复值的更多信息,请参阅dspunfold函数引用页面。对于一个例子如何指定重复的值,看到部分的使用dspunfold MATLAB函数包含一个有状态的算法的。

dspunfold生成一个多线程的墨西哥人文件,同时缓冲多个信号帧,然后处理这些帧,使用多个内核。这个过程介绍了确定性输出延迟。执行的帮助dspunfoldDCTExample_mt显示更多关于多线程的墨西哥人的信息文件,包括输出延迟的价值。对于这个示例,多线程的墨西哥人的输出文件的延迟16帧相对于它的输入,这不是单线程的墨西哥人的文件。

运行dspunfoldShowLatencyDCTExample的例子。生成的情节显示单线程和多线程的墨西哥人的输出文件。注意,多线程的墨西哥人的输出由16帧延迟,相对于单线程的墨西哥人。

dspunfoldShowLatencyDCTExample;

用dspunfold MATLAB函数包含一个有状态的算法

MATLAB函数dspunfoldFIRExample执行两个FIR滤波器。

类型dspunfoldFIRExample.m
函数y = dspunfoldFIRExample (u, c1, c2) %有状态的MATLAB函数执行两个FIR滤波器%版权2015年MathWorks公司持久FIRSTFIR SECONDFIR如果isempty (FIRSTFIR) FIRSTFIR = dsp。FIRFilter (“NumeratorSource”、“输入端口”);SECONDFIR = dsp。FIRFilter (“NumeratorSource”、“输入端口”);t =结束步骤(FIRSTFIR u c1);y =步骤(SECONDFIR t c2);

构建多线程墨西哥人文件,您必须提供相对应的状态长度两个FIR滤波器。指定1 s,表明国家长度不超过1帧。

firCoeffs1 = fir1》(192, 0.8);firCoeffs2 = fir1 (0.2, 256“高”);dspunfolddspunfoldFIRExamplearg游戏{(1:4096)、firCoeffs1 firCoeffs2}- s1
状态长度:1帧,重复:1、输出延时:12帧,线程:6分析:dspunfoldFIRExample。m创建线程的墨西哥人文件:dspunfoldFIRExample_st。mexa64创建多线程的墨西哥人文件:dspunfoldFIRExample_mt。mexa64创建分析器文件:dspunfoldFIRExample_analyzer.p

执行这段代码生成:

  • 多线程的墨西哥人文件dspunfoldFIRExample_mt

  • 单线程的墨西哥人文件dspunfoldFIRExample_st

  • 自我诊断分析仪功能dspunfoldFIRExample_analyzer

  • 这三个文件相应的MATLAB帮助文件

多线程的墨西哥人文件的输出延迟12帧。测量加速、执行dspunfoldBenchmarkFIRExample

dspunfoldBenchmarkFIRExample;
加速x = 1.4

改善加速更多线程的墨西哥人的文件,指定具体的国家样本长度。要做到这一点,您必须指定哪些输入参数dspunfoldFIRExample帧。在这个例子中,第一个输入是一个框架,因为这个输入的元素排序。因此,可以进一步划分为子帧。最后两个输入帧因为FIR滤波器系数不能细分不改变算法的本质。的值dspunfoldFIRExampleMATLAB函数长度之和状态两种FIR滤波器的长度(192 + 256 = 448)。使用- f论点,第一个输入参数标记为真(帧),最后两个输入参数错误(nonframes)

dspunfolddspunfoldFIRExamplearg游戏{(1:4096)、firCoeffs1 firCoeffs2}- s448年- f(真,假,假)
长度:448样本,重复:1、输出延时:12帧,线程:6分析:dspunfoldFIRExample。m创建线程的墨西哥人文件:dspunfoldFIRExample_st。mexa64创建多线程的墨西哥人文件:dspunfoldFIRExample_mt。mexa64创建分析器文件:dspunfoldFIRExample_analyzer.p

再一次,测量产生的加速多线程的墨西哥人使用dspunfoldBenchmarkFIRExample函数。注意,加速增加,因为中指定的确切长度是样品,和dspunfold细分框架的输入。

dspunfoldBenchmarkFIRExample;
加速x = 2.0

通常,加速可以增加更多的通过增加重复(- r)调用时提供dspunfold。默认值是1重复。增加这个值时,多线程的墨西哥人缓冲帧内部加工开始前。增加重复因素增加了多线程的效率,但代价更高的输出延迟。

dspunfolddspunfoldFIRExamplearg游戏{(1:4096)、firCoeffs1 firCoeffs2}- s448年- f(真,假,假)- r5
长度:448样本,重复:5,输出延迟:60帧,线程:6分析:dspunfoldFIRExample。m创建线程的墨西哥人文件:dspunfoldFIRExample_st。mexa64创建多线程的墨西哥人文件:dspunfoldFIRExample_mt。mexa64创建分析器文件:dspunfoldFIRExample_analyzer.p

再一次,测量产生的多线程的墨西哥人的加速,使用dspunfoldBenchmarkFIRExample函数。再次加速增长,但现在60帧输出延迟。一般输出延迟公式 2 × 线程 × 重复 。在这些例子中,的数量线程等于物理CPU核的数量。

dspunfoldBenchmarkFIRExample;
加速x = 2.2

自动检测状态长度

要求dspunfold自动侦测状态长度、指定- s汽车。该选项生成一个高效的多线程墨西哥人文件,但是随着时间显著增加一代,由于需要额外的分析。

dspunfolddspunfoldFIRExamplearg游戏{(1:4096)、firCoeffs1 firCoeffs2}- s汽车- f(真,假,假)- r5
状态长度:自动检测样品,重复:5,输出延迟:60帧,线程:6分析:dspunfoldFIRExample。m创建线程的墨西哥人文件:dspunfoldFIRExample_st。mexa64寻找最小状态长度(这可能需要一段时间)检查无状态……检查4096个样本不足……充分检查2048个样本…充分检查1024个样本…充分检查512个样本…充分检查256个样本…检查384个样本不足……检查448个样本不足……充分检查416个样本… Insufficient Checking 432 samples ... Insufficient Checking 440 samples ... Insufficient Checking 444 samples ... Insufficient Checking 446 samples ... Insufficient Checking 447 samples ... Insufficient Minimal state length is 448 samples Creating multi-threaded MEX file: dspunfoldFIRExample_mt.mexa64 Creating analyzer file: dspunfoldFIRExample_analyzer.p

dspunfold检查长度不同的状态,使用作为输入提供的值arg游戏选择。函数的目的是找到最小状态长度多线程的墨西哥人的输出和单线程的墨西哥人都是相同的。注意,它发现了448,最小长度值,这与期望值相匹配,手工计算。

验证生成的多线程墨西哥人使用生成的分析器

创建多线程使用dspunfold墨西哥人文件时,也是创建的线程的墨西哥人文件以及一个分析器的功能。有状态的例子在前面的小节中,分析仪的名称dspunfoldFIRExample_analyzer

分析器的目的是提供一个快速的方法来测量加速多线程的墨西哥人相对于单线程的墨西哥人,并检查如果多线程的墨西哥人的输出和单线程的墨西哥人比赛。输出通常不匹配当一个错误的国家指定长度值。

多线程的墨西哥人的分析器文件执行,dspunfoldFIRExample_mt,生成之前使用- s汽车选择。

firCoeffs1_1 = fir1》(192, 0.8);firCoeffs1_2 = fir1》(192, 0.7);firCoeffs1_3 = fir1》(192, 0.6);firCoeffs2_1 = fir1 (0.2, 256“高”);firCoeffs2_2 = fir1 (0.1, 256“高”);firCoeffs2_3 = fir1 (0.3, 256“高”);dspunfoldFIRExample_analyzer ((1:4096 * 3)”, [firCoeffs1_1; firCoeffs1_2; firCoeffs1_3],[firCoeffs2_1; firCoeffs2_2; firCoeffs2_3]);
分析多线程文件dspunfoldFIRExample_mt.mexa64墨西哥人。为达到最佳效果,请避免与计算机进行交互并停止其他进程,直到分析仪。延迟= 60帧加速= 2.4 x

每个分析器的输入对应的输入dspunfoldFIRExample_mt墨西哥人文件。请注意,每个输入的长度(第一个维度)大于预期的长度。例如,dspunfoldFIRExample_mt预计4096帧双打首次输入 4096年 × 3 样本提供给dspunfoldFIRExample_analyzer。分析器解释这个输入3帧的4096个样本。分析器这些3输入帧之间的交替循环,检查如果多线程和单线程的墨西哥人文件的输出匹配。

使用的表显示输入数值分析每一步的检查。步骤调用分析器的总数是180 3 × 延迟 ,在那里 延迟 在这种情况下是60。

| input1 | input2 | input3

- - - - - - + - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Step1 | (1:4096) | firCoeffs1_1 | firCoeffs2_1

步骤2 | (4097:8192)| firCoeffs1_2 | firCoeffs2_2

Step3 | (8193:12288) | firCoeffs1_3 | firCoeffs2_3

第四| (1:4096)| firCoeffs1_1 | firCoeffs2_1

…|……|……|……

注意:分析仪的正确检查多线程之间的数值匹配墨西哥人,单线程的墨西哥人,至少提供两个框架为每个输入不同的值。代表的输入参数,如滤波器系数,为每个输入帧可以有相同的值。在本例中,您可以指定一组系数的第二个和第三个输入。

引用

另请参阅

相关的话题