主要内容

使用并行计算实现引导

串行和并行引导

下面是一个并行与串行启动计时的例子。该示例从两种高斯混合中生成数据,构造结果数据的非参数估计,并使用自助方法获得抽样变异性的感觉。

  1. 生成数据:

    从两个高斯分布的混合物中生成一个大小为1000的随机样本x = [randn(700,1);4 + 2 * randn (300 1)];
  2. 根据数据构造密度的非参数估计:

    奈= 4:0.01:12;myfun = @(X) ksdensity(X,latt);pdfestimate = myfun (x);
  3. 引导估计,以获得其抽样变异性的感觉。串行运行引导程序以进行时间比较。

    运行时间为10.878654秒。
  4. 并行运行引导程序以进行时间比较:

    mypool = parpool()使用'local'配置文件启动parpool…与2名工人相连。mypool = Pool with properties: attachhedfiles: {0x1 cell} NumWorkers: 2 IdleTimeout: 30 Cluster: [1x1 parallel.cluster.]请求队列:[1x1并行。RequestQueue] SpmdEnabled: 1
    选择= statset(“UseParallel”,真正的);B = bootstrp(200,myfun,x,'Options',opt);toc Elapsed time is 6.304077 seconds。

    在这个例子中,并行计算几乎是串行计算的两倍。

覆盖的ksdensity利用并行bootstrap中获得的200个bootstrap估计的密度估计。你可以从这幅图中了解到如何评估密度估算的准确性。

hold on for i=1:size(B,1), plot(latt,B(i,:),'c:') end plot(latt,pdfestimate);包含(“x”);ylabel(密度估计的)

可再生的并行自举

要以可复制的方式并行运行该示例,请适当设置选项(参见运行可重复并行计算).首先设置问题和并行环境串行和并行引导.然后设置选项以在支持子流的流中使用子流。金宝app

s = RandStream(“mlfg6331_64”);%有子流opts = statset('UseParallel',true,…“流”,年代,“UseSubstreams”,真正的);myfun B2 = bootstrp(200年,x,“选项”,选择);

要重新运行引导程序并获得相同的结果:

重置(s) %设置流初始状态B3 = bootstrp(200,myfun,x,'Options',opts);isequal(B2,B3) %检查是否相同的结果ans = 1