Будущая многопроцессорная параллель в Windows - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь реализовать параллельный процесс для преобразования растрового демона в продукты рельефа, такие как аспект, наклон и т. Д. Я делаю это, используя будущее со следующим кодом:

dem = raster("./dem/dem.asc")
output = "./output/"
crs(dem) <- epsg

plan(multiprocess, workers = availableCores()-1, gc = TRUE)
f1 %<-% terrain(dem, filename = paste0(output,"01_slope.asc"), opt = "slope", unit = 'degrees', neighbors = 8)
f2 %<-% terrain(dem, filename = paste0(output,"02_aspect.asc"), opt = "aspect", unit = 'degrees', neighbors = 8)
f1; f2

Процессы запускаются параллельно, но это делает что-то странное: он создает оба файла одновременно и каждый со своим именем, но оба файла абсолютно одинаковы (в этом случае оба растра являются растрами с уклоном). Что я делаю не так?

1 Ответ

0 голосов
/ 22 мая 2019

Я наконец-то воспользовался этой функцией, и она заработала:

dempath = "./dem/dem.asc"
output = "./output/"
crs(dem) <- epsg    

#CREATE DEM PRODUCTS IN PARALLEL
demproductspar <- function(dempath, output, epsg = crs('+init=epsg:25829'), cor = 3){

    print ('Leyendo dem...')
    dem = raster(dempath)
    crs(dem) <- epsg
    plan(multiprocess, workers = cor, gc = TRUE)
    plan(multiprocess, workers = availableCores(), gc = TRUE)

    f1 <- future({ terrain(dem, filename = paste0(output,"01_slope.asc"), opt = "slope", unit = 'degrees', neighbors = 8) })
    f2 <- future({
        terrain(dem, filename = paste0(output,"02_aspect.asc"), opt = "aspect", unit = 'degrees', neighbors = 8)
        aspectreclass(aspectdir = paste0(output,"02_aspect.asc"), output = paste0(output,"02r_aspect.asc")) })
    f3 <- future({ terrain(dem, filename = paste0(output,"03_roughness.asc"), opt = "roughness", unit = 'degrees', neighbors = 8) })
    f4 <- future({ terrain(dem, filename = paste0(output,"04_tri.asc"), opt = "tri", unit = 'degrees', neighbors = 8) })
    f5 <- future({ terrain(dem, filename = paste0(output,"05_tpi.asc"), opt = "tpi", unit = 'degrees', neighbors = 8) })

    print ('Procesando dem...')
    f1; f2; f3; f4; f5
    gc()
}

demproductspar(dempath, output)
...