使用并行计算实现引导程序
串行和平行的引导程序
这是一个示例定时在串行中与平行与串行中的自举。该示例从两个高斯人的混合物中生成数据,构建了结果数据的非参数估计,并使用引导程序来了解采样可变性。
生成数据:
%生成1000尺寸的随机样品,来自两个高斯分布的混合物x = [randn(700,1);4 + 2*Randn(300,1)];
从数据中构建密度的非参数估计:
latt = -4:0.01:12;myfun = @(x)ksdentens(x,latt);pdfestimate = myFun(x);
引导估算值以了解其采样可变性。在串行中运行bootstrap以进行定时比较。
tic; b = bootstrp(200,myfun,x); toc经过的时间为10.878654秒。
并行运行引导程序以进行计时比较:
mypool = parpool()使用“本地”配置文件...连接到2位工人。mypool =带有属性的池:actactedfiles:{0x1 cell} numworkers:2 idletimeout:30 cluster:[1x1 Parallel.Cluster.Cluster.local] requestSuequequequequequequequequequequequequequeue:[1x1 Parallel.RequeStequeue] spmenabled:1
opt = statset('useparallel',true);tic; b = bootstrp(200,myfun,x,'options',opt); TOC经过的时间为6.304077秒。
在此示例中,并行计算的速度几乎是串行中计算的两倍。
覆盖ksdensity
密度估计值,在平行引导程序中获得的200个自举估计值。您可以了解如何评估该图的密度估计的准确性。
保留i = 1:size(b,1),情节(latt,b(i,:),'c:')结束图(latt,pdfestimate);Xlabel('X'); Ylabel(“密度估计”)
可重复的平行引导程序
要以可重复的方式并行运行示例,请适当设置选项(请参阅运行可重现的并行计算)。首先设置问题和平行环境串行和平行的引导程序。然后设置使用子流的选项以及支持基因的流。金宝app
S = RandStream('MLFG6331_64');%具有substreams opts = statset('useparallel',true,...'streams',s,'useubstreams',true);b2 = bootstrp(200,myfun,x,'options',opts);
重新运行引导程序并获得相同的结果:
重置(S)%将流设置为初始状态B3 = Bootstrp(200,MyFun,x,'options',opts);iSequal(b2,b3)%检查是否相同结果ANS = 1