主要内容

系统模拟与并行计算工具

这个例子展示了如何提高执行速度模拟通信系统的误码率。提高这些系统的性能,可用的选项之一是并行化模拟。这个示例介绍了使用模拟并行计算工具箱™的误码率。提出了两种可能的方式并行系统模拟和推荐更好的方法。

许可检查开放一个平行的池

本节检查并行计算工具的可用性。如果可用,它打开了一个平行的工人和分配的最大数量变量numWorkers池中可用的工人。如果没有分配numWorkers = 1,在这种情况下,示例运行在一个单一的核心。

[licensePCT ~] =许可证(“签出”,“Distrib_Computing_Toolbox”);如果(licensePCT & & ~ isempty(版本(“平行”)))如果isempty (gcp (“nocreate”parpool));结束池=质量;numWorkers = pool.NumWorkers;其他的numWorkers = 1;结束
开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:6)。

初始化

这个例子中截然不同空间多路复用示例来演示使用并行计算工具。以下是所需的参数来模拟这个例子。

EbNo = 1:2:11;% Eb在dB /不N = 2;%的发送天线数量M = 2;%的接收天线modOrd = 2;%星座大小= 2 ^ modOrdnumBits = 1 e6;%的比特数numErrs = 100;%的错误数量lenEbNo =长度(EbNo);%用于创建一个本地随机流数据生成%可重复性。使用组合多个递归发电机因为它支持金宝appsubstreams %。hStr = RandStream (“mrg32k3a”);%设置随机流[berZF, berMMSE] =交易(0 (lenEbNo, 3));[nerrsZF, nbitsZF nerrsMMSE nbitsMMSE] =交易(0 (numWorkers lenEbNo));

并行的Eb /不范围

第一种方法截然不同的Eb /不范围,其中一个工作进程一个Eb /没有价值。这里的性能受限于过程所需的时间Eb /不价值最高。

simIndex = 1;str =“在Eb /不范围”;disp (的执行系统模拟一个工人处理一个Eb /没有价值……”);
执行系统模拟一个工人处理一个Eb /没有价值……
抽搐parforidx = 1: lenEbNo BER_ZF BER_MMSE] = simBERwithPCT (N, M, EbNo modOrd,idx、hStr numBits numErrs);berZF (idx:) = BER_ZF (idx:);berMMSE (idx:) = BER_MMSE (idx:);结束timeRange = toc;clockBERwithPCT (simIndex timeRange timeRange, str);

并行的工人数量在并行池

第二种方法截然不同的数量在可用的工人,每个工人过程完整的Eb /不范围。然而,每个工人数量(总错误/ numWorkers)错误在继续之前的Eb /没有价值。这种方法使用所有可用的核心同样有效。

simIndex = simIndex + 1;str =“在可用工人的数量;种子= 0:numWorkers-1;disp (的执行系统模拟每个工人处理整个范围……”);
执行系统模拟每个工人处理整个范围……
抽搐parforn = 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);nerrsMMSE (n, idx) = BER_MMSE (idx 2);nbitsMMSE (n, idx) = BER_MMSE (idx 3);结束结束bZF =总和(nerrsZF, 1)。/总和(nbitsZF, 1);bMMSE =总和(nerrsMMSE, 1)。/总和(nbitsMMSE, 1);计时工人= toc;

下面是获得的结果在Windows®7, 64位的,英特尔®Xeon®CPU W3550 ~ 3.1 ghz,使用四核12.288 gb RAM的机器。表显示了上述方法的性能比较。我们可以看到,第二个比第一个方法执行。这些结果在一个运行,从运行运行可能会有所不同。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -类型的并行化|运行时间(sec) |加速比1。在Eb /不范围| 89.7366 | 1.0000 2。在可用的工人的数量| 28.4443 | 3.1548 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

plotBERwithPCT (EbNo berZF (: 1), berMMSE (: 1), bZF, bMMSE);

生成一个为你的机器性能比较表,取消注释以下行代码和运行整个脚本。

% clockBERwithPCT (simIndex timeRange计时工人,str);

附录

在这个例子中使用以下功能: