2013-08-27 2 views
5

Я пытаюсь обрабатывать кучу файлов csv и возвращать кадры данных в R, параллельно используя mclapply(). У меня 64-ядерная машина, и я не могу больше получить, что 1 ядро ​​используется в данный момент, используя mclapply(). На самом деле, немного быстрее запустить lapply(), а не mclapply(). Вот пример, который показывает, что mclapply() не используя больше ядра доступны: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 

Есть ли какой-нибудь трюк, чтобы получить эту работу? Мне пришлось скомпилировать R из источника на этом компьютере (v3.0.1), есть ли какие-то компилируемые флаги, которые я пропустил, чтобы разрешить разметку? detectCores() говорит мне, что у меня действительно есть 64 ядра, чтобы играть с ... Любые советы оценили!

+2

Какая ОС вы используете? Это не похоже на ваше дело, но стоит отметить, что 'mclapply' в Windows является просто оболочкой для' lapply'. – Frank

+0

Linux. Редхат, если быть точным. – reptilicus

+1

Если кто-то может проверить, что приведенный выше пример действительно ускоряет работу с mclapply(), который также поможет. – reptilicus

ответ

6

Я получаю схожие вам результаты, но если я изменю rnorm(10000) на rnorm(100000), я получаю значительное ускорение. Я предполагаю, что дополнительные накладные расходы отменяют любое преимущество в производительности для такой мелкой проблемы.

Смежные вопросы