R中的条件模拟(使用Kriging)并行化?

时间:2018-05-25 11:53:20

标签: r parallel-processing simulation kriging gstat

我在R中使用gstat包来生成连续的高斯模拟。我的电脑有4个核心,我尝试使用并行包并行化krige()函数,遵循Guzmán提供的脚本来回答问题How to achieve parallel Kriging in R to speed up the process?

然而,所得到的模拟与当时仅使用一个核心(没有并行化)的模拟不同。它看起来是一个几何问题,但我无法找到如何解决它。

接下来,我将提供一个示例(使用4个核心)生成2个模拟。您将看到,在运行代码之后,从并行化派生的模拟地图显示了一些工件(如垂直线),并且与当时仅使用一个核心的工件不同。

代码需要库$('#starts-on').timepicker(...??? //dunno what to use ); gstatsprasterparallel。如果任何行spatstat不起作用,请先运行library()

install.packages()

1 个答案:

答案 0 :(得分:0)

我已尝试过您的代码,我认为问题在于您分割工作的方式:

parts <- split(x = 1:length(srgr), f = 1:no_cores)

在我的双核机器上,这意味着srgr中的所有奇数索引由一个进程处理,所有偶数索引由另一个进程处理。这可能是您看到的垂直工件的来源。

更好的方法应该是将数据拆分成连续的块,如下所示:

parts <- parallel::splitIndices(length(srgr), no_cores)

将此分割与其余代码一起使用,我得到的结果与顺序代码相当。至少对我未经训练的眼睛......

原始答案,这只是次要影响。使用set.seed为顺序和clusterSetRNGStream进行并行处理来修复种子仍然有意义。

根据我所读到的有关Kriging的内容,它要求您绘制随机数字。这些随机数与并行处理不同。有关更多详细信息,请参见并行插图(vignette("parallel"))的第6部分。