Распараллелить итерацию матрицы - PullRequest
0 голосов
/ 30 января 2019

Я играю с этими фиктивными данными, чтобы попытаться распараллелить их, пока я не смог достичь тех же результатов, что и с непараллелизированным кодом.

Матрица-пустышка:

m <- matrix(1, nrow = 500, ncol = 500)
m[1,1] <- 2 # To check the output keeps rows and columns in same order 
m[2,2] <- 2
m[103,203] <- 2

Это работает, как ожидалось:

for (i in 1:dim(m)[1]){
  for (j in 1:dim(m)[2]){
    m[i,j] <- m[i,j] + 1
  } 
}

Это не работает, как ожидалось:

cl <- makeCluster(4, type = "SOCK")
registerDoParallel(cl)
output <- foreach(i=1:dim(m)[1]) %dopar% {
  df <- data.frame()
  for( j in 1:dim(m)[2]){
    df[i,j] <- m[i,j] + 1
  }
  df
}
stopCluster(cl) 

Это также:

cl <- makeCluster(4, type = "SOCK")
registerDoParallel(cl)
output <- foreach(i=1:dim(m)[1],.combine='cbind' ) %:% 
  foreach (j=1:dim(m)[2], .combine='c') %do% {
    m[i,j] <- m[i,j] + 1
  }
stopCluster(cl)
...