2013-08-27 25 views
5

Bir grup csv dosyasını işlemeye ve veri çerçevelerini R, mclapply() kullanarak paralel olarak döndürmeye çalışıyorum. 64 çekirdekli bir makinem var ve şu anda mclapply() kullanarak şu anda kullanılan 1 çekirdeğe sahip olamıyorum. Aslında, şu anda mclapply() yerine lapply() çalıştırmak biraz daha hızlıdır. İşte bir örnek mclapply() daha fazla çekirdek mevcut kullanan olmadığını gösteriyor olmasıdır: bu işe yaraması için bazı hileBirden fazla çekirdek kullanmıyor mclapply

library(parallel) 

test <- lapply(1:100,function(x) rnorm(10000)) 
system.time(x <- lapply(test,function(x) loess.smooth(x,x))) 
system.time(x <- mclapply(test,function(x) loess.smooth(x,x), mc.cores=32)) 

user system elapsed 
    0.000 0.000 7.234 
user system elapsed 
    0.000 0.000 8.612 

var mı? Bu makinedeki R kaynağını derlemem gerekti (v3.0.1), forking'e izin vermeyi özlediğim bazı derleme bayrakları var mı? detectCores() bana gerçekten oynamak için 64 çekirdek var olduğunu söylüyor ... Herhangi bir ipucu takdir!

+2

Hangi İşletim Sistemini kullanıyorsunuz? Bu sizin durumunuzla alakalı görünmüyor, ancak Windows'daki 'mclapply', 'lapply' için sadece bir sarıcı olduğunu belirtmekte fayda var. – Frank

+0

Linux. Redhat kesin olmalı. – reptilicus

+1

Yukarıdaki örneğin, aslında yardımcı olacak olan mclapply() ile gerçekten hızlandığını doğrulayabiliyorsa. – reptilicus

cevap

6

Size benzer sonuçları alıyorum, ancak rnorm(10000) değerini rnorm(100000) olarak değiştirirseniz, önemli hızlanma elde ederim. Ek yükün böyle küçük çaplı bir problem için herhangi bir performans avantajını iptal ettiğini tahmin ediyorum.