2013-09-03 7 views
5

के रूप में एकाधिक ओएस के लिए समानांतर या doParallel का उपयोग कर कस्टम पैकेज मैं आर के लिए एक पैकेज तैयार कर रहा हूं जिसे मैं क्रॉस-प्लेटफार्म बनने में सक्षम होना चाहता हूं। मैं लिनक्स के तहत विकसित कर रहा हूं, और mclapply फ़ंक्शन parallel पैकेज से उपयोग किया जाएगा। यह पैकेज विंडोज के लिए समर्थित नहीं है (जो doParallel का उपयोग करता है)। मुझे वास्तव में parallel पैकेज पसंद है, हालांकि इसकी सादगी और गति के लिए, और मुझे नहीं पता कि यह अलग-अलग ओएस के लिए पैकेज के 2 अलग-अलग संस्करण उपलब्ध होने का कारण होना चाहिए, (बनाए रखने के लिए अतिरिक्त काम की तरह) उल्लेख करने के लिए कि यह भी अनुमति है।एक सीआरएएन पैकेज

विचार?

इसके अलावा, अब के लिए मैं के बारे में हूँ parallel के

mclapply(ldata, function(x), mc.cores=cores) 

doParallel के बराबर होने का है

cl <- makeCluster(cores) 
parLapply(cl, ldata, function(x)) 

सही है कि है? हालांकि mclapply वास्तव में विंडोज पर समानांतर में नहीं चलता है

+1

'समानांतर 'पैकेज से' parLapply' का उपयोग क्यों नहीं करें क्योंकि मुझे लगता है कि यह क्रॉस प्लेटफ़ॉर्म है (या मुझे आशा है कि जब से मैं इसे अपने पैकेज में उपयोग करता हूं)। आप सही सेटअप का उपयोग करने के लिए 'if() {} else {} '' Sys.info() ["sysname"] 'के साथ भी उपयोग कर सकते हैं। –

+0

@ टाइयलर रिंकर, समान रूप से दिखाता है। हर नई लिपि के लिए प्रोमोफाइल लोडिंग? यदि हां, तो मुझे लगता है कि यह अच्छा होना चाहिए क्योंकि यह कांटा नहीं है। – PascalVKooten

+0

'समांतर' ** ** विंडोज़ पर समर्थित है, और 'mclapply' का उपयोग किया जा सकता है। यह सिर्फ सीरियल मूल्यांकन के लिए बदल जाता है, जैसे कि सरल 'लापता'। –

उत्तर

9

सबसे पहले, दोनों mclapply और parLapply, parallel पैकेज में कर रहे हैं। parLapply सभी समर्थित प्लेटफ़ॉर्म पर समानांतर में चलता है, लेकिन यह हमेशा mclapply जितना कुशल नहीं है। doParallel पैकेज का उपयोग foreach पैकेज के साथ किया जाता है, और parallel पैकेज के लिए एडाप्टर के रूप में कार्य करता है।

  • बस parLapply का उपयोग, क्योंकि यह हर जगह
  • विंडोज पर काम करता है का उपयोग करें parLapply और कहीं mclapply
  • :

    एक पैकेज है कि दोनों Windows और गैर विंडोज पर काम करता है लिखना के लिए, आपको उचित विकल्प की एक किस्म है

  • उपयोग doParallelforeach

के साथपैकेज सुविधाजनक है क्योंकि यह गैर-विंडोज प्लेटफ़ॉर्म पर mclapply का उपयोग करता है। उदाहरण के लिए:

library(doParallel) 
registerDoParallel() 
foreach(i=1:10, .options.snow=list(preschedule=TRUE)) %dopar% { 
    Sys.sleep(2) 
} 

यह लिनक्स और मैक ओएस एक्स पर mclapply का उपयोग करता है, लेकिन अपने आप विंडोज पर पर्दे के पीछे एक PSOCK क्लस्टर वस्तु का निर्माण करेगा। preschedule=TRUE का उपयोग (doParallel 1.0.3 में जोड़ा गया) doParallel से preschedule आंतरिक रूप से clusterApply का उपयोग करके कार्य parLapply का उपयोग करेगा।

ध्यान दें कि यदि आप क्लस्टर ऑब्जेक्ट को स्पष्ट रूप से बनाते हैं और पंजीकृत करते हैं, तो mclapply प्लेटफ़ॉर्म पर ध्यान दिए बिना उपयोग किया जाएगा। यह ठीक काम करेगा, लेकिन यह उतना कुशल नहीं हो सकता है। mclapply का उपयोग करने के लिए, आपको registerDoParallel पर एक संख्यात्मक तर्क के साथ, या कोई तर्क नहीं देना चाहिए।

आप अपने प्लेटफ़ॉर्म के आधार पर mclapply या parLapply का उपयोग करने के तरीके के उदाहरण के लिए boot पैकेज के लिए स्रोत कोड देख सकते हैं।

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