gpt4 book ai didi

r - 为什么并行处理不能加快速度?

转载 作者:行者123 更新时间:2023-12-03 17:20:37 25 4
gpt4 key购买 nike

我试图弄清楚如何使用并行处理。为此,我制作了一个测试速度的功能。但是,当使用 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

N.B 我检查了一下,它制造的集群中有 4 个核心,它们都在运行(cpu 性能 = 100% 并行,而 25% 不并行)

最佳答案

您的系统很可能有两个支持超线程的物理内核,看起来像四个内核。您可以通过比较这些命令的输出来对此进行测试:

detectCores(logical = FALSE) 
#> 2
detectCores()
#> 4

上面的值来自我的系统,它给出了与你相似的性能结果。但仅使用两个物理核心与使用四个逻辑核心的性能相同。类比:您有两个可以为人们服务的柜台,每个柜台都有两个可能的队列。如果所有人都被分配到一个队列,看起来只使用了 25% 的容量。如果它们被发送到所有四个队列,看起来就像使用了 100%。然而,只有两个柜台打开,所以从两个队列到四个队列(几乎)没有任何好处。

关于r - 为什么并行处理不能加快速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48935080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com