2011-04-07 8 views
28

मुझे कोड के कुछ परीक्षण टुकड़े मिल गए हैं जो मैं विभिन्न मशीनों पर चल रहा हूं, हमेशा एक ही परिणाम के साथ। मैंने सोचा कि विभिन्न कार्यों के पीछे दर्शन ... पैकेज यह था कि उन्हें फोरैच के% डोपर% के लिए बैकएंड के रूप में एक दूसरे के रूप में इस्तेमाल किया जा सकता था। यह मामला क्यों नहीं है?डीएमसी बनाम डूएसओओ बनाम डीएसएमपी बनाम डीएमएमआई: 'फोरैच' के लिए समानांतर बैकएंड क्यों नहीं हैं?

उदाहरण के लिए, इस कोड स्निपेट काम करता है:

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)} पैदावार ठीक उसी परिणाम, तो मैं मुझे पता है पैकेजों को स्थापित किया गया है और प्रत्येक मशीन पर ठीक से काम कर रहा है जिस पर मैंने परीक्षण किया है।

डीएसएमपी, डूएसओओ, और डीएमएमआईआई से अलग-अलग क्या कर रहा है?

उत्तर

31

doMC वर्तमान आर प्रक्रिया को फोर्क करता है ताकि यह सभी मौजूदा चरों को प्राप्त कर सके। अन्य सभी बैकएंड केवल स्पष्ट रूप से अनुरोध किए गए चर पर ही जाते हैं। दुर्भाग्यवश मुझे यह एहसास नहीं हुआ, और केवल doMC के साथ परीक्षण किया गया - यह कुछ है जो मुझे प्लीयर के अगले संस्करण में ठीक करने की उम्मीद है।

+11

क्या आप अभी तक इस जवाब को अपडेट करना चाहते हैं? –

संबंधित मुद्दे