Как распараллелить две или более функции - PullRequest
0 голосов
/ 09 мая 2019

Если у меня есть две или более функции с разными параметрами, как я могу сделать их параллельными? Пожалуйста, дайте мне пример, который не слишком сложен.

Я знаю только, как распараллелить одну функцию.

 test <- function(x) {
     for (i in 1:10000000) {
         x <- x + i
     }
     return(x)
 }
 library(snow)
 cl <- makeCluster(type = "SOCK", c("localhost", "localhost"))  # 建立两个本地CPU内核的并行
 system.time({test(5);test(5)})
用户 系统 流逝 
0.58 0.00 0.58 
 system.time(clusterCall(cl, test,5)) # 测试并行循环的耗时
用户 系统 流逝 
0.00 0.00 0.37 

1 Ответ

0 голосов
/ 09 мая 2019

Как насчет использования библиотеки foreach?

Первая установка foreach и doParallel

install.packages('foreach')
install.packages('doParallel')

И я немного отредактировал твой код.

test1 <- function(x) {
 for (i in 1:10000000) {
 x <- x + i
 }
 return(x)
}
library(snow)
cl <- makeCluster(type = "SOCK", c("localhost", "localhost")) 
doParallel::registerDoParallel(cl)

Если у вас есть такие функции, как test1, test2, test3, ...

После registerDoParallel вы можете использовать любую другую функцию, как вам показано ниже.

foreach::foreach(i=1:2) %dopar% {
test1(x)
test2(x)
test3(x)
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...