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

При запуске следующего скрипта в R:

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 при запуске второго, чтобы весь скрипт всегда выполнялся с использованием трех ядер.


person Marcelo    schedule 13.02.2014    source источник
comment
Вы должны преобразовать свою правку в ответ, чтобы его было легко найти и понять.   -  person bright-star    schedule 15.12.2014
comment
Готово (см. Ответ ниже)   -  person Marcelo    schedule 23.10.2016


Ответы (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)
person Marcelo    schedule 22.10.2016
comment
В этом есть смысл. Вы также можете упомянуть, что foreach использует модульную систему, в которую вы можете добавлять различные серверные модули, с другим синтаксисом и побочными эффектами (например, постоянство ядер). - person bright-star; 23.10.2016