使用并行计算工具箱模拟

此示例显示了如何提高涉及BER模拟的通信系统的执行速度。为了提高这些系统的性能,其中一个可用选项是并行化模拟。此示例介绍了在BER模拟中的并行计算工具箱™(PCT)的使用情况。它提出了两种可能的并行化BER模拟的方式,并推荐更好的方法。

许可证检查并打开并行池

本节检查PCT的可用性。如果可用,它会打开一个并行工人池,并将池中的最大可用工人数分配给变量NumWorkers。如果不可用,则会分配NumWorkers = 1,在这种情况下,示例在单个核心上运行。

[LineedPct,〜] =许可证('查看''distrid_computing_toolbox');如果(LineedPct &&〜isempty(ver('平行'))))如果Isempty(GCP('noicreate'))parpool;结尾池= GCP;numworkers = pool.numworkers;别的numworkers = 1;结尾

初始化

此示例并行化空间多路复用示例以演示PCT的使用。以下是模拟此示例所需的参数。

EBNO = 1:2:11;%EB / NO在DB中n = 2;百分比的发射天线数量m = 2;%接收天线数量modord = 2;%星座大小= 2 ^ modordnumbits = 1e6;%的位数numerrs = 100;%错误数量Lenebno =长度(EBNO);%创建一个用于数据生成的本地随机流%重复性。自它以来使用组合的多个递归生成器%支万博1manbetx持子流。hstr = randstream('MRG32K3A');%设置随机流[Berzf,Bermmse] =交易(零(Lenebno,3));[NERRSZF,NBITSZF,NERRSMSE,NBITSMSE] =交易(零(Numworkers,Lenebno));

在EB / NO范围内并行化

第一种方法在EB / No范围内并行化,其中一个人处理单个EB / No值。这里,性能受到处理最高EB / NO值所需的时间。

simindex = 1;str ='跨越EB / No Range';DISP('用一个工人处理一个人的eB /没有价值......');Tic.议案IDX = 1:Lenebno [Ber_ZF,BER_MMSE] = SIMBERWITHPCT(n,m,eBno,modord,IDX,Hstr,Numbits,NumErs);Berzf(IDX,:) = Ber_ZF(IDX,:);BERMMSE(IDX,:) = BER_MMSE(IDX,:);结尾timerange = toc;Clockberwithpct(Simindex,timerange,timerange,str);

并行化平行池中的工人数量

第二种方法并行横跨可用工人的数量,每个工人处理完整的EB / No范围。但是,每个工人在继续下一个EB / NO值之前计数(总错误/ numworkers)错误。该方法同样有效地使用所有可用的核心。

simindex = simindex + 1;str ='跨越可用工人的数量;种子= 0:numworkers-1;DISP('用每个工人处理整个范围的BER模拟......');Tic.议案n = 1:numworkers hstr = randstream('MRG32K3A''种子',种子(n));为了idx = 1:lenebno [ber_zf,ber_mmse] = simberwithpct(n,m,eBno,modord,idx,hstr,numbits / numworkers,numerrs / numworkers);NERRSZF(N,IDX)= BER_ZF(IDX,2);nbitszf(n,idx)= ber_zf(idx,3);NERRSMSE(N,IDX)= BER_MMSE(IDX,2);nbitsmmse(n,idx)= ber_mmse(idx,3);结尾结尾bzf = sum(nerrszf,1)./ sum(nbitszf,1);bmmse = sum(nerrsmms,1)./ sum(nbitsmmse,1);timeworker = toc;

以下是在Windows®7,64位,Intel®Xeon®CPUW3550,〜3.1GHz,12.288GB使用四个核心的结果获得的结果。该表显示了上述方法的性能比较。我们看到第二种方法比第一个方法更好。这些是在单个运行时获得的结果,可能因运行而异。

-------------------------------------------------------------------------------------------------------经过时间(秒)|加速比1.跨越EB / NO范围|89.7366 |1.0000 2.跨越可用工人的数量|28.4443 |3.1548 ---------------------------------------------------------------------------------

下面的曲线显示了使用不同的并行化方法的零强制(ZF)和最小平均平均误差(MMSE)接收器获得的BER曲线。

Plotberwithpct(Ebno,Berzf(:,1),Bermmse(:,1),BZF,BMMSE);

要为计算机生成性能比较表,请取消注释以下代码行并运行此整个脚本。

%shodberwithpct(simindex,timerange,timeworker,str);

附录

在此示例中使用以下功能: