2014-06-10 26 views
5
'un arka taraf olarak kullanıldığı bir durumda, farklı makinelerde farklı davranışlar üretir.

Ubuntu 12.04.4 LTS çalıştıran bir linux sunucusunda, aşağıdaki kod (foreach vingette'dan uyarlanmıştır), eş zamanlı olarak tek bir çekirdekte 5 iş çalıştırır; bu, istenen davranış değildir.R foreach birden çok çekirdek kullanmıyor

library(foreach) 
library(doMC) 

registerDoMC(cores=5) 
getDoParWorkers() 

x <- iris[which(iris[,5] != "setosa"), c(1,5)] 
trials <- 10000 
r <- foreach(icount(trials), .combine=cbind) %dopar% { 
    ind <- sample(100, 100, replace=TRUE) 
    result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) 
    coefficients(result1) 
} 

Oturum bilgisi:

> sessionInfo() 
R version 3.1.0 (2014-04-10) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C   LC_TIME=C   LC_COLLATE=C   LC_MONETARY=C  
[6] LC_MESSAGES=C  LC_PAPER=C   LC_NAME=C   LC_ADDRESS=C   LC_TELEPHONE=C  
[11] LC_MEASUREMENT=C  LC_IDENTIFICATION=C 

attached base packages: 
[1] parallel stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] doMC_1.3.3  iterators_1.0.7 foreach_1.4.2 

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 compiler_3.1.0 tools_3.1.0 

OSX 10.7.5 çalıştıran bir Mac üzerinde aynı kod çalıştırmak 5 farklı çekirdek üzerinde 5 iş çalışan istenen ve beklenen davranış üretir.

Oturum bilgisi:

> sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-apple-darwin10.8.0 (64-bit) 

locale: 
[1] C 

attached base packages: 
[1] parallel stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] doMC_1.3.2  iterators_1.0.6 foreach_1.4.1 

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 compiler_3.0.1 tools_3.0.1 

Ben de diğer paralel arka uçları kullanarak aynı davranışı gözlemledim. Her iki makinede 20'den fazla çekirdek var. Neler olduğu hakkında bir fikrin var mı?

cevap

5

Sorun OpenBLAS tarafından yapılmıştır. ATLAS'a geçmek sorunu çözdü. Linux BLAS kütüphaneleri arasında geçiş için reçete Nathan VanHoudnos's blog üzerindedir: Orada

sudo update-alternatives --config libblas.so.3gf

: BLAS arasındaki

Geçiş

Şimdi yüklenir farklı BLAS seçenekler arasında geçiş yapabilirsiniz kütüphaneler Alternatif libblas.so.3gf için 3 seçenek (sağlama /usr/lib/libblas.so.3gf).

Selection Path Priority Status 
------------------------------------------------------------ 
* 0 /usr/lib/openblas-base/libopenblas.so.0 40 auto mode 
1 /usr/lib/atlas-base/atlas/libblas.so.3gf 35 manual mode 
2 /usr/lib/libblas/libblas.so.3gf 10 manual mode 
3 /usr/lib/openblas-base/libopenblas.so.0 40 manual mode 
Press enter to keep the current choice[*], or type selection number: 

Yan Not: Yukarıda döndürdüyse:

update-alternatives: error: no alternatives for libblas.so.3gf 

deneyin

sudo update-alternatives --config libblas.so.3 
İlgili konular