gpt4 book ai didi

r - 使用 mclapply 时,每个单核都比其非并行版本慢

转载 作者:行者123 更新时间:2023-12-04 18:08:02 33 4
gpt4 key购买 nike

我正在学习 R 中的并行计算,我在实验中发现了这种情况。

简而言之,在下面的示例中,为什么 t 中 'user' 的大多数值小于 mc_t 中的值?我的机器有 32GB 内存,2 个 CPU,4 核和 8 个超线程。

system.time({t = lapply(1:4,function(i) {
m = matrix(1:10^6,ncol=100)
t = system.time({
m%*%t(m)
})
return(t)
})})


library(multicore)
system.time({
mc_t = mclapply(1:4,function(m){
m = matrix(1:10^6,ncol=100)
t = system.time({
m%*%t(m)
})
return(t)
},mc.cores=4)
})

> t
[[1]]
user system elapsed
11.136 0.548 11.703

[[2]]
user system elapsed
11.533 0.548 12.098

[[3]]
user system elapsed
11.665 0.432 12.115

[[4]]
user system elapsed
11.580 0.512 12.115

> mc_t
[[1]]
user system elapsed
16.677 0.496 17.199

[[2]]
user system elapsed
16.741 0.428 17.198

[[3]]
user system elapsed
16.653 0.520 17.198

[[4]]
user system elapsed
11.056 0.444 11.520

sessionInfo():

> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] multicore_0.1-7

澄清:抱歉,我的描述可能含糊不清。我知道并行对于整个任务来说仍然更快。但是time-counter只是在函数中计算,没有考虑mclapply中每个子进程的设置开销时间。所以我仍然很困惑,为什么这种纯计算(即 m%*%t(m))的速度变慢了。

最佳答案

我猜想时序差异是由于核心之间的资源争用造成的,可能是内存或缓存,特别是如果您的 CPU 有一个在核心之间共享的缓存。即使有足够的主内存,也可能存在访问它的争用,导致性能不会随内核数量线性扩展。

请注意,如果您的 R 安装使用多线程数学库(如 MKL 或 ATLAS),则 %*% 运算符将使用多个内核。通过在此基础上使用多个进程,您可能拥有比核心更多的线程,从而损害您的性能。

关于r - 使用 mclapply 时,每个单核都比其非并行版本慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21730027/

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