我在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 );
,gstat
,sp
,raster
和parallel
。如果任何行spatstat
不起作用,请先运行library()
。
install.packages()
答案 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部分。