在R中,在这个自举模型上使用超过四个内核时,为什么计算时间会增加?
在64核x86_64-redhat-linux-gnu机器上运行下面的代码片段进行R(版本2.15)中的引导练习时,使用超过4核后,观察到的计算时间似乎会降低。R使用4个以上的核是否需要额外的配置更改在R中,在这个自举模型上使用超过四个内核时,为什么计算时间会增加?,r,parallel-processing,multiprocessing,R,Parallel Processing,Multiprocessing,在64核x86_64-redhat-linux-gnu机器上运行下面的代码片段进行R(版本2.15)中的引导练习时,使用超过4核后,观察到的计算时间似乎会降低。R使用4个以上的核是否需要额外的配置更改 library(doMC) library(plyr) df <- empty <- data.frame(cores = numeric(), trial = numeric(), time = numeric()) for(i in 1:64){ registerDoM
library(doMC)
library(plyr)
df <- empty <- data.frame(cores = numeric(), trial = numeric(), time = numeric())
for(i in 1:64){
registerDoMC(cores=i)
trials <- 1000
stime <- system.time({
r <- foreach(icount(trials), .combine=cbind) %dopar% {
ind <- sample(1000000, 1000000, replace=TRUE)
mean(ind)}})
df<- rbind(df, data.frame(cores=i,trial=1,time=stime[3]))
}
df2 <- ddply(df, c("cores"), summarize, time_avg = mean(time))
我不认为这是配置R的问题:任务太小了,你不能利用很多内核。从“1核心”时间开始,每个任务所花费的时间不到16.5毫秒,而且可能要少得多。foreach的
foreach
包并不是针对这种细粒度问题的
要有希望,您可以尝试使用显式分块:
r <- foreach(n=idiv(trials, chunks=getDoParWorkers()), .combine='c') %dopar% {
sapply(seq_len(n), function(i) mean(sample(1000000, 1000000, replace=TRUE)))
}
r如果你从1k测试到,比如说,100k,会发生什么?这篇文章可能很相关:怎么样?你不能使用比你拥有的更多的内核。j是什么?您是不是错过了一个%dopar%
?请为输入错误道歉。代码已更正
r <- foreach(n=idiv(trials, chunks=getDoParWorkers()), .combine='c') %dopar% {
sapply(seq_len(n), function(i) mean(sample(1000000, 1000000, replace=TRUE)))
}