繁体   English   中英

具有递归功能的并行计算

[英]Parallel computing with recursive function

我的挑战是并行计算递归函数。 但是,递归非常深,因此(用我自己的新手来讲)在所有工作人员都忙时分配工作人员存在问题。 简而言之,它粉碎了。

这是一些可复制的代码。 代码非常愚蠢,但是结构才是最重要的。 这是正在发生的事情的简化版本。

我在Windows机器上工作,如果解决方案是使用linux,请说一句话。 由于实际功能可能很深,因此在上层管理所需的工作人员数量将无法解决问题。 也许有一种方法可以知道递归处于哪个级别?

  FUN <- function(optimizer,neighbors,considered,x){
    considered <- c(considered,optimizer)
    neighbors <- setdiff(x=neighbors,y=considered)

    if (length(neighbors)==0) {
      # this loop is STUPID, but it is just an example.
      z <- numeric(10)
      for (i in 1:100)
      {
        z[i] <- sample(x,1)
      } 
      return(max(z)) 
    } else {
      # Something embarrassingly parallel, 
      # but cannot be vectorized.
      z <- numeric(10)
      z <- foreach(i=1:10, .combine='c') %dopar%{
        FUN(optimizer=neighbors[1],neighbors=neighbors,
                  considered=considered,x=x)}
    return(max(z))
    }
}

require(doParallel,quietly=T)
cl <- makeCluster(3)
clusterExport(cl, c("FUN"))
registerDoParallel(cl)
getDoParWorkers()



>FUN(optimizer=1,neighbors=c(2),considered=c(),x=1:500)
[1] 500
>FUN(optimizer=1,neighbors=c(2,3),considered=c(),x=1:500)
Error in { : task 1 failed - "could not find function "%dopar%""
>FUN(optimizer=1,neighbors=c(2,3),considered=c(),x=1:500)
Error in { : task 1 failed - "could not find function "%dopar%""

这个错误是真的因为递归太深还是仅仅是因为您的FUN函数中没有require(doParallel)吗? 因此,当在工作程序上调用FUN时,R的实例未在其列表中包含该程序包。

您的第一个示例不执行此操作,因为它很简单,无法进入内部%dopar%循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM