/ / Паралельна та багатоядерна обробка в R [закритий] - r, паралельна обробка, багатоядерна

Паралельна та багатоканальна обробка в R [closed] - r, паралельна обробка, багатоканальний

Я думаю, що це до крайніх можливостей R, але тут ...

Я роблю важку обробку в R, в якій я написав функцію, яка виконує роботу всіх ніг з одного дзвінка. Однак я "хотів би нитку або використовувати більше, ніж одне ядро.

Я "дивився на пакет" Паралель ", який виглядає як застарілий. В ідеалі я хотів би викликати функцію як новий потік.

Я розумію складнощі паралеліобчислення і що це "не найпростіша річ у світі, але я" буду вдячний, якби хтось знав про якісь пакети, які були б корисні чи що-небудь, що я "не помітив.

Підбадьорює

Відповіді:

18 за відповідь № 1

The 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)