【发布时间】:2018-02-23 03:15:12
【问题描述】:
我正在尝试弄清楚如何使用并行处理。为此,我制作了一个测试速度的功能。但是,当使用 4 核而不是 1 核时,我只能获得双倍速度,这是为什么呢?
示例代码:
as <- runif(30) # limit for
bs <- runif(30)
cs <- runif(30) # distribution of food sources ('random'/'clustered')
p_space <- list ()
for (a in as){
for (b in bs){
for (c in cs){
p_space[[length(p_space)+1]] <- c(a,b,c)
}
}
}
made_up <- function(pvec){
a <- pvec[1]
b <- pvec[2]
c <- pvec[3]
for(i in 1:10000){
d <- a*b*c
}
return(list(a,b,c,d))
}
system.time({
z <- lapply(p_space,made_up)
results1 <- data.frame(matrix(unlist(z),ncol = 4, byrow = T))
colnames(results1) <- c('a','b','c','product')
})
user system elapsed
21.23 0.01 21.26
library(parallel)
no_cores <- detectCores()
cl <- makeCluster(no_cores)
clusterExport(cl, c("p_space"))
# clusterEvalQ() #for libraries on all nodes
system.time ({
z <- parLapply(cl, p_space, made_up)
results <- data.frame(matrix(unlist(z),ncol = 4, byrow = T))
colnames(results) <- c('a','b','c','product')
})
user system elapsed
0.02 0.02 10.86
注意,我检查了一下,它制造的集群中有 4 个内核,它们都在运行(cpu 性能 = 100% 并行,而 25% 不并行)
【问题讨论】:
-
我完全不明白为什么你认为你应该通过双倍的核心数获得不止一倍的速度。
-
核心数是 4 倍(我刚刚看到我的错字)
标签: r optimization parallel-processing