2017-08-01 2 views
1

Ich habe eine Liste von Objekten rücksichts Größe, dass ich brauche, um eine PSOCKcluster in R. zu exportierenListe exportieren parallel über ClusterExport in R

ich dies auf folgende Weise tun:

cl <- makePSOCKcluster(3, methods = TRUE) 

listOfMatrices <- c(bigMatrix1, bigMatrix2, bigMatrix3) 

for(i in 1:3){ 
    bigMatrix <- listOfMatrices[i] 
    clusterExport(cl[i], "bigMatrix", envir = environment()) 
} 

Dieser Ansatz ist jedoch sequentiell, da der Export n + 1 für den Export n benötigt wird, um zuerst zu beenden.

Gibt es eine effizientere Möglichkeit, dies parallel zu tun?

+0

nicht sicher, ob ich völlig verstanden, was Sie wollten, aber wenn das Problem ist, Bei der Verwendung von Parallelismus auf großen Matrizen könnte das Paket bigmemory Ihr Problem lösen. –

Antwort

1

Sie können dies mit der clusterApply Funktion:

library(parallel) 
cl <- makePSOCKcluster(3) 
listOfMatrices <- list(matrix(1,2,2), matrix(2,2,2), matrix(3,2,2)) 
clusterApply(cl, listOfMatrices, function(m) {bigMatrix <<- m; NULL}) 

Sie können überprüfen, dass es korrekt clusterEvalQ mit gearbeitet:

clusterEvalQ(cl, bigMatrix)