2015-06-30 7 views
7

मेरी थीसिस में मुझे बहुत सारे सिमुलेशन अध्ययन करने की ज़रूरत है, जो कि कुछ समय लेता है। मेरे कंप्यूटर में 4 कोर हैं, इसलिए मैं सोच रहा हूं कि उदाहरण के लिए दो अलग-अलग कोरों का उपयोग करके, एक ही समय में रुस्टूडियो में दो आर-स्क्रिप्ट्स चलाने के लिए संभव है? यदि यह किया जा सकता है, तो मैं इन सभी स्क्रिप्ट को चलाने वाली रात को कंप्यूटर छोड़कर बहुत समय बचा सकता हूं।एक साथ कई आर-स्क्रिप्ट चलाएं

+0

मुझे लगता है कि ऐसे प्रश्न [लिंक] (http://stackoverflow.com/questions/10835122/multithreading-with-r/10835234) पर उत्तर है, या वहां [लिंक] (http://stackoverflow.com/ प्रश्न/18377870/रनिंग-जॉब्स-इन-बैकग्राउंड-इन-आर) – Batanichek

+1

आप एकाधिक आर सत्र स्थापित कर सकते हैं और प्रति सत्र एक स्क्रिप्ट चला सकते हैं। दुर्भाग्यवश – Hav0k

उत्तर

7

यह मानते हुए कि परिणाम एक ही वातावरण में खत्म करने की जरूरत नहीं, तो आप इस RStudio परियोजनाओं का उपयोग कर प्राप्त कर सकते हैं: https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects

पहले दो अलग-अलग परियोजनाओं पैदा करते हैं। आप दोनों एक साथ खोल सकते हैं, जिसके परिणामस्वरूप दो रियायतें होंगी। फिर आप प्रत्येक प्रोजेक्ट में प्रत्येक स्क्रिप्ट खोल सकते हैं, और प्रत्येक को अलग से निष्पादित कर सकते हैं। कोर आवंटन को प्रबंधित करने के लिए यह आपके ओएस पर है।

3

आप मल्टीकोर समानांतरवाद प्राप्त कर सकते हैं निम्नलिखित कोड

if(Sys.info()["sysname"]=="Windows"){ 
    library(doParallel) 
    cl<-makeCluster(numberOfCores) 
    registerDoParallel(cl) 
}else{ 
    library(doMC) 
    registerDoMC(numberOfCores) 
} 
library(foreach) 

someList<-list("file1","file2") 
returnComputation <- 
    foreach(x=someList) %dopar%{ 
    source(x) 
    } 


if(Sys.info()["sysname"]=="Windows") stopCluster(cl) 

आप अभी भी अपने उत्पादन अनुकूलन की आवश्यकता होगी के साथ एक ही सत्र में (जैसा कि यहां बताया https://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf)।

+0

, ऐसा लगता है कि यह विंडोज़ पर समर्थित नहीं है (उद्धृत दस्तावेज़ों के अनुसार) – mrjoseph

4

यदि आप RStudio पर राइट क्लिक करते हैं, तो आप RStudio (चाहे आप प्रोजेक्ट का उपयोग करते हैं) के कई अलग-अलग "सत्र" खोलने में सक्षम होना चाहिए। डिफ़ॉल्ट रूप से ये प्रत्येक 1 कोर का उपयोग करेंगे।

nohup Rscript script.R & 

यहाँ "&: पृष्ठभूमि में चल रहा है

RCMD script.R 
RScript script.R 

: हालांकि, अगर आप कई स्क्रिप्ट त्रुटियों के बिना चलाने पता है कि है, मैं कमांड लाइन के माध्यम से विभिन्न मापदंडों पर इन चल सलाह देते हैं "पृष्ठभूमि में स्क्रिप्ट चलाता है (इसे fg के साथ पुनर्प्राप्त किया जा सकता है, htop के साथ निगरानी की गई, और kill <pid> या pkill rsession के साथ मारे गए) और nohup फ़ाइल में आउटपुट सहेजता है और टर्मिनल बंद होने पर चलना जारी रहता है।

एक स्क्रिप्ट के लिए तर्क पासिंग:

Rscript script.R 1 2 3 

यह commandArgs() के उत्पादन के रूप में आर के c(1, 2, 3) पारित करेंगे ताकि पार्टी में एक पाश एक बैश पाश के साथ Rscript के कई उदाहरण चला सकते हैं:

for ii in 1 2 3 
    do 
    nohup Rscript script.R $ii & 
    done 

समानांतर कोड चलाना (आर के भीतर):

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

cl <- makeCluster(n) 
# n = number of cores (I'd recommend one less than machine capacity) 
clusterExport(list=ls()) #export input data to all cores 
output_list <- parLapply(cl, input_list, function(x) ...) 
stopCluster() # close cluster when complete (particularly on shared machines) 

उपयोग इस कहीं भी आप सामान्य रूप से एक lapply समारोह आर में समानांतर में इसे चलाने के लिए प्रयोग करेंगे।

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