2015-06-30 24 views
7

Tezim, oldukça uzun süren çok fazla simülasyon çalışması yapmam gerekiyor. Bilgisayarımın 4 çekirdeği var, bu yüzden iki farklı çekirdeği kullanmasına izin vererek, Rstudio'da iki R-betiğini aynı anda çalıştırmanın mümkün olup olmadığını merak ediyorum. Eğer bu yapılabilirse, tüm bu senaryoları çalıştıran bilgisayarı gece bırakarak çok zaman kazandırabilirim. Sonuçlar aynı ortamda sona gerekmez varsayarsakAynı anda birden fazla R-betiği çalıştırın

+0

Bence böyle bir sorunun cevabı var [link] (http://stackoverflow.com/questions/10835122/multithreading-with-r/10835234), veya orada [link] (http://stackoverflow.com/ sorular/18377870/running-jobs-in-background-in-r) – Batanichek

+1

Birden çok R oturumu kurabilir ve komut dosyalarınızı her oturum için çalıştırabilirsiniz. – Hav0k

cevap

7

, sen RStudio projeleri kullanarak bunu başarabilirsiniz: https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects

İlk iki ayrı proje oluşturun. İkisini de aynı anda açabilirsiniz, bu da iki işlemle sonuçlanacaktır. Daha sonra her bir senaryodaki her bir komut dosyasını açabilir ve her birini ayrı ayrı yürütebilirsiniz. Daha sonra çekirdek dağıtımını yönetmek için işletim sisteminizde. Aşağıdaki kodu

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) 

Hala ihtiyacınız çıktı adapte olacaktır ile aynı oturumda (burada https://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf açıklandığı gibi) Sen çok çekirdekli paralelliği elde edebilirsiniz

3

.

+0

Ne yazık ki, bu Windows'da desteklenmiyor gibi görünüyor (belirtilen belgelere göre) – mrjoseph

4

Eğer RStudio'ya sağ tıklarsanız, RStudio'nun birkaç ayrı "oturumunu" açabilmeniz gerekir (Projeleri kullanıp kullanmadığınız veya kullanmamanız). Varsayılan olarak, bunlar her biri 1 çekirdek kullanır. İşte

nohup Rscript script.R & 

"&: Arka planda çalışan

RCMD script.R 
RScript script.R 

: Eğer hatasız çalışır biliyorum birkaç komut dosyaları var Ancak, ben komut satırı aracılığıyla farklı parametrelere bu çalışan öneriyoruz "betiği arka planda çalıştırır (fg ile htop ile izlenebilir ve kill <pid> veya pkill rsession ile öldürülmüş olabilir) ve nohup çıkışı bir dosyaya kaydeder ve terminal kapatılırsa çalışmaya devam eder.

bir komut argümanları iletme:

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

Rscript script.R 1 2 3 

Bu çok bash bir döngü Bash döngü ile Rscript birden çok örneğini çalıştırabilir commandArgs() çıktısı olarak R c(1, 2, 3) geçecek

Paralel koşma (R içinde):

Genellikle, R komut dosyanızdaki belirli bir adımın hesaplamaları yavaşlattığını göreceksiniz, önerebilir miyim R kodunuzda paralel kodu çalıştırarak ayrı ayrı çalıştırmak yerine Bunun yerine kullanılması nedeniyle, Genel R. içinde paralel olarak döngüler çalıştırmak için snow package öneriyoruz:

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) 

bunu kullanın yerde normalde paralel olarak çalıştırmak için R bir lapply fonksiyonunu kullanmak.

İlgili konular