主要内容

使用并行计算实现引导

串行和并行引导

这里有一个例子,在平行和串行引导计时。该示例从两个高斯数据的混合生成数据,构造结果数据的非参数估计,并使用自举来获得抽样可变性的感觉。

  1. 生成数据:

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

    拉特= -4:0.01:12;myfun = @(X) ksdensity(X,latt);Pdfestimate = myfun(x);
  3. 引导估计以了解其抽样可变性。串行运行引导程序进行时间比较。

    B = bootstrp(200,myfun,x);toc耗时10.878654秒。
  4. 并行运行引导程序进行时间比较:

    mypool = parpool()使用“本地”配置文件启动parpool…连接2个工人。mypool = Pool with properties: AttachedFiles: {0x1 cell} NumWorkers: 2 IdleTimeout: 30 Cluster: [1x1 parallel.cluster. properties]本地]RequestQueue: [1x1 parallel。RequestQueue] SpmdEnabled: 1
    opt = statset('UseParallel',true);B = bootstrp(200,myfun,x,'Options',opt);toc耗时为6.304077秒。

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

覆盖的ksdensity用平行自举法得到的200个自举估计的密度估计。你可以从这张图中了解到如何评估密度估算的准确性。

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

可重复并行引导

要以可重复的方式并行运行示例,请适当地设置选项(参见运行可重复并行计算).首先设置问题和并行环境串行和并行引导.然后将选项设置为使用子流以及支持子流的流。万博1manbetx

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

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

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