首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R doParallel预测中的并行处理

R doParallel预测中的并行处理
EN

Stack Overflow用户
提问于 2016-06-07 22:38:47
回答 1查看 410关注 0票数 4

我已经编写了一个运行良好的脚本,但它似乎并不是在执行并行处理。我试着把核心从3改变到16,但是生成数据的速度并没有改变。有谁能让我知道我做错了什么,我如何才能让它发挥作用?

代码语言:javascript
复制
setwd("E:/Infections")

if (!require("pacman")) install.packages("pacman")
pacman::p_load(lakemorpho,rgdal,maptools,sp,doParallel,foreach,
doParallel)

cl <- makeCluster(5, outfile="E:/Infections/debug.txt")
registerDoParallel(cl)
x<-readOGR("E:/Infections/ByHUC6","Kodiak")
x_lake_length<-vector("numeric",length = nrow(x))
for(i in 1:nrow(x)){
  tmp<-lakeMorphoClass(x[i,],NULL,NULL,NULL)
  x_lake_length[i]<-lakeMaxLength(tmp,200)
  print(i)
  Sys.sleep(0.1)
}
df_Kodiak <- data.frame(x_lake_length)
write.table(df_Kodiak,file="E:/Infections/ByHUC6/Kodiak.csv",row.names=TRUE,col.names=TRUE, sep=",")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 20:20:26

好吧,我想我是通过调用foreach%dopar%来得到它的

代码语言:javascript
复制
# Libraries ---------------------------------------------------------------
if (!require("pacman")) install.packages("pacman")
pacman::p_load(lakemorpho,rgdal,maptools,sp,doParallel,foreach,
               doParallel)

# Data --------------------------------------------------------------------
ogrDrivers()
dsn <- system.file("vectors", package = "rgdal")[1]
ogrListLayers(dsn)
ogrInfo(dsn=dsn, layer="trin_inca_pl03")
owd <- getwd()
setwd(dsn)
ogrInfo(dsn="trin_inca_pl03.shp", layer="trin_inca_pl03")
setwd(owd)
x <- readOGR(dsn=dsn, layer="trin_inca_pl03")
summary(x)

# HPC ---------------------------------------------------------------------
cores_2_use <- detectCores() - 4
cl          <- makeCluster(cores_2_use, useXDR = F)
clusterSetRNGStream(cl, 9956)
registerDoParallel(cl, cores_2_use)

# Analysis ----------------------------------------------------------------  
myfun <- function(x,i){tmp<-lakeMorphoClass(x[i,],NULL,NULL,NULL)
                        x_lake_length<-vector("numeric",length = nrow(x))
                        x_lake_length[i]<-lakeMaxLength(tmp,200)
                        print(i)
                        Sys.sleep(0.1)}

foreach(i = 1:nrow(x),.combine=cbind,.packages=c("lakemorpho","rgdal"))  %dopar% (
  myfun(x,i)
)

df_Kodiak <- data.frame(x_lake_length)

正如您在下面的屏幕截图中所看到的,这将使用24个CPU核心中的20个创建大量的Rscript.exe进程。当然,我使用的示例数据很小,所以它并不需要所有这些核心,但是它应该作为概念的证明。

我从来没有超过这一比率,因为如果您使用100%的所有CPU核心,有时会发生不好的事情,其他服务器用户可能不满意您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37690547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档