Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,在这个自举模型上使用超过四个内核时,为什么计算时间会增加?_R_Parallel Processing_Multiprocessing - Fatal编程技术网

在R中,在这个自举模型上使用超过四个内核时,为什么计算时间会增加?

在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

在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){
     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)))
}