Я думаю, що це до крайніх можливостей R, але тут ...
Я роблю важку обробку в R, в якій я написав функцію, яка виконує роботу всіх ніг з одного дзвінка. Однак я "хотів би нитку або використовувати більше, ніж одне ядро.
Я "дивився на пакет" Паралель ", який виглядає як застарілий. В ідеалі я хотів би викликати функцію як новий потік.
Я розумію складнощі паралеліобчислення і що це "не найпростіша річ у світі, але я" буду вдячний, якби хтось знав про якісь пакети, які були б корисні чи що-небудь, що я "не помітив.
Підбадьорює
Відповіді:
18 за відповідь № 1The multicore
пакет застарілий: ні parallel
. Погляньте на документацію для mclapply
функція: це найпростіший спосіб виконання функцій паралельно в parallel
пакет. Це дуже схоже на lapply
але з кількома новими, необов'язковими аргументами:
library(parallel)
myfun <- function(i) { Sys.sleep(1); i }
mclapply(1:8, myfun, mc.cores=4)
Зауважте, що mclapply
використовує процеси, а не потоки, і не підтримує паралельне виконання у Windows. Для Windows слід поглянути parLapply
, що також в parallel
. Це також схоже на lapply
, але вимагає об’єкт кластера в якості першого аргументу. Ось такий самий приклад, але це працює практично на будь-якій платформі:
library(parallel)
cl <- makePSOCKcluster(4)
myfun <- function(i) { Sys.sleep(1); i }
parLapply(cl, 1:8, myfun)
stopCluster(cl)