У меня есть несколько тестовых фрагментов кода, которые я выполнял на разных машинах, всегда с одинаковыми результатами.Я думал, что философия, лежащая в основе различных пакетов do ..., заключается в том, что они могут использоваться взаимозаменяемо в качестве серверной части для foreach% dopar%.Почему это не так?
Например, этот фрагмент кода работает:
library(plyr)
library(doMC)
registerDoMC()
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
Хотя каждый из этих фрагментов кода завершается ошибкой:
library(plyr)
library(doSMP)
workers <- startWorkers(2)
registerDoSMP(workers)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
stopWorkers(workers)
library(plyr)
library(snow)
library(doSNOW)
cl <- makeCluster(2, type = "SOCK")
registerDoSNOW(cl)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
stopCluster(cl)
library(plyr)
library(doMPI)
cl <- startMPIcluster(count = 2)
registerDoMPI(cl)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)
closeCluster(cl)
Во всех четырехВ некоторых случаях foreach(i = 1:3,.combine = "c") %dopar% {sqrt(i)}
дает точно такой же результат, поэтому я знаю, что пакеты установлены и работают правильно на каждой машине, на которой я их тестировал.
Чем doMC отличается от doSMP, doSNOW и doMPI?