Estou usando o pacote atakrig . Ao definir o número de núcleos como 8 para computação paralela, recebo este erro: 0%Error in serialize(data, node$con) : error writing to connection
. Se eu definir o número de núcleos como 4, o processamento paralelo funciona bem (sem erros). Estou recebendo este erro quando uso a função do pacote ataStartCluster()
.
Encontrei uma solução alternativa para esse problema se eu definisse cl <- parallel::makeCluster(8, type = "PSOCK")
em vez de ataStartCluster()
. Também comparei os tempos de execução ao usar o parallel::makeCluster()
versus sem paralelo, para ver se a computação paralela funciona como esperado, e de fato funciona.
Ao usar cl <- parallel::makeCluster(8, type = "PSOCK")
o código paralelo, o tempo de execução é de 1,5 minuto, enquanto ao NÃO usar o código paralelo, o tempo de execução é de 3,2 minutos. O problema é que não tenho esse problema no meu outro laptop, que tem 4 GB de RAM e Windows 10, mas com a mesma versão do R e pacotes que estou usando neste laptop (consulte as informações da sessão abaixo).
O código que estou usando:
library(atakrig)
library(terra)
rpath <- system.file("extdata", package="atakrig")
aod3k <- rast(file.path(rpath, "MOD04_3K_A2017042.tif"))
aod10 <- rast(file.path(rpath, "MOD04_L2_A2017042.tif"))
aod3k.d <- discretizeRaster(aod3k, 1500)
aod10.d <- discretizeRaster(aod10, 1500)
grid.pred <- discretizeRaster(aod3k, 1500, type = "all")
aod3k.d$areaValues$value <- log(aod3k.d$areaValues$value)
aod10.d$areaValues$value <- log(aod10.d$areaValues$value)
## area-to-area Kriging ---# point-scale variogram from combined AOD-3k and AOD-10
aod.combine <- rbindDiscreteArea(x = aod3k.d, y = aod10.d)
vgm.ok_combine <- deconvPointVgm(aod.combine, model="Exp", ngroup=12, rd=0.75)
# point-scale cross-variogram
aod.list <- list(aod3k=aod3k.d, aod10=aod10.d)
aod.list <- list(aod3k=aod3k.d, aod10=aod10.d)
vgm.ck <- deconvPointVgmForCoKriging(aod.list, model="Exp", ngroup=12, rd=0.75,fixed.range = 9e4)
# prediction
cl <- parallel::makeCluster(8, type = "PSOCK")
pred.ataok <- ataKriging(aod10.d, grid.pred, vgm.ck$aod10, showProgress = TRUE, nopar = FALSE)
parallel::stopCluster(cl)
Informações da sessão:
R version 4.4.3 (2025-02-28 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26100)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C LC_TIME=English_United States.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] terra_1.8-42 atakrig_0.9.8.1
loaded via a namespace (and not attached):
[1] DBI_1.2.3 KernSmooth_2.23-26 sf_1.0-20 doSNOW_1.0.20 zoo_1.8-13 spacetime_1.3-3 xts_0.14.1
[8] e1071_1.7-16 snow_0.4-4 sp_2.2-0 gstat_2.1-3 grid_4.4.3 classInt_0.4-11 foreach_1.5.2
[15] FNN_1.1.4.1 intervals_0.15.5 compiler_4.4.3 codetools_0.2-20 Rcpp_1.0.14 rstudioapi_0.17.1 lattice_0.22-7
[22] class_7.3-23 parallel_4.4.3 magrittr_2.0.3 tools_4.4.3 proxy_0.4-27 iterators_1.0.14 units_0.8-7
EDITAR
Ao chamar o pacote foreach
(ie, library(foreach)
), fiz o código rodar com sucesso. Não sei por que e como isso ajudou.
Não tenho certeza de como
ataKriging
usar os clusterscl <- parallel::makeCluster(8, type = "PSOCK")
semregisterDoSNOW
o cluster e definir ooptions
queataKriging
você deseja. Além disso, você mostranopar=TRUE
que está definido. Talvez tenteparallel::makePSOCKcluster
o que é "uma versão aprimorada desnow::makeSOCKcluster
".Para mim
ataStartCluster
também funciona, já que uso Linux.Pode haver um problema com um sistema operacional desatualizado em uma de suas máquinas. (Você pode instalar o Linux lá, que é gratuito ;)