2014-02-13 1 views
2

При выполнении следующего скрипта в R:R параллельно с использованием библиотеки doMC: как повторно использовать ядра для последующих параллельных процессов?

library(doMC) 
registerDoMC(cores=3) 

# First foreach 
# This runs in 3 threads 
foreach(i=1:3) %dopar% sqrt(i) 

# Second foreach 
# This add 3 threads to the previous ones (now inactive but still consuming memory), totalling 6 threads 
foreach(i=1:3) %dopar% sqrt(i) 

Я хотел бы знать, как повторно использовать нити первого foreach при запуске второй, так что весь сценарий всегда работает с использованием 3-жильный.

+0

Вы должны преобразовать свое редактирование в ответ, чтобы его было легко найти и понять. –

+0

Выполнено (см. Ниже) – Marcelo

ответ

1

Благодаря предложению одного из разработчиков doMC, я мог бы найти обходное решение. Используя другую библиотеку, следующий код делает то, что я искал:

library(doParallel) 
cores=makeForkCluster(3) 
registerDoParallel(cores) 

# First foreach 
# This runs in 3 threads 
foreach(i=1:3) %dopar% sqrt(i) 

# Second foreach 
# This reuses the previous 3 threads (total of 3 active threads) 
foreach(i=1:3) %dopar% sqrt(i) 
+1

Это имеет смысл. Вы также можете упомянуть, что 'foreach' использует модульную систему, в которой вы можете подключать разные бэкенды, с различным синтаксисом и побочными эффектами (например, сохранение ядер). –

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

  • Нет связанных вопросов^_^