2012-09-02 23 views
5

मैं कुछ कोड है कि एक पैकेज पर निर्भर करता है (snow::parLapply का प्रयोग करके) parallelize कोशिश कर रहा हूँ करने के लिए एक पूरे पैकेज पासिंग (यानी, एक पैकेज snow के अलावा)। parLapply द्वारा बुलाए गए फ़ंक्शन में संदर्भित ऑब्जेक्ट को clusterExport का उपयोग करके क्लस्टर में स्पष्ट रूप से पास किया जाना चाहिए। clusterExport में प्रत्येक फ़ंक्शन को स्पष्ट रूप से नामित करने के बजाय क्लस्टर में एक संपूर्ण पैकेज को पास करने का कोई तरीका है (उपयोगकर्ता फ़ंक्शन द्वारा कॉल किए गए पैकेज के आंतरिक कार्यों सहित!)?एक बर्फ क्लस्टर

उत्तर

6

सभी नोड्स पर पैकेज को स्थापित करें, और उपलब्ध आदेशों एक के माध्यम से सभी नोड्स पर अपने कोड कॉल library(thePackageYouUse) है,

clusterApply(cl, library(thePackageYouUse)) 

मुझे लगता है कि parallel पैकेज है जो उदाहरण है हाल ही में आर रिलीज के साथ आता है जैसे अंडा कुछ - - help(clusterApply) से यहां उदाहरण के लिए देखें जहां boot पैकेज हर जगह भरी हुई है:

## A bootstrapping example, which can be done in many ways: 
clusterEvalQ(cl, { 
    ## set up each worker. Could also use clusterExport() 
    library(boot) 
    cd4.rg <- function(data, mle) MASS::mvrnorm(nrow(data), mle$m, mle$v) 
    cd4.mle <- list(m = colMeans(cd4), v = var(cd4)) 
    NULL 
}) 
+1

धन्यवाद डिर्क। क्या क्लस्टर एक्सपोर्ट (एलएस()) 'करने का कोई कारण नहीं है' खतरनाक होगा? यह संकुल से कार्यों को पार करने में मदद नहीं करेगा, लेकिन यह लूप के लिए जल्दी से समानांतर करने के लिए बहुत सी सिरदर्द बचाएगा (कोई एल्स, मेरा नहीं!) जो वैश्विक चर के एक टन पर भरोसा करता है। – Michael

+0

यह सिर्फ खराब डिजाइन है कि यह एक स्कैटरशॉट प्लस रसोई सिंक दृष्टिकोण का उपयोग करता है। एक सीरियल समाधान में आपको जो चाहिए उसे डिज़ाइन करें, फिर इसे समानांतर बनाएं। –

+0

पर्याप्त मेला, मदद के लिए धन्यवाद। – Michael

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