【问题标题】:sourcing Rcpp locally works, but doesn't in parallelization在本地采购 Rcpp 可以工作,但不能并行化
【发布时间】:2020-12-04 12:35:19
【问题描述】:

您好,我曾经使用 Rcpp 代码并将其并行化到多个内核,但在更改我的桌面后它不再工作了。

例如,我正在尝试运行以下代码,

rm(list = ls())
options(repos = c(CRAN = "http://cran.rstudio.com"))

n_cluster <- 2


## library ----------------------------------------------------------
name_pkg <- c(
  # Parallelization
  "foreach",
  "doParallel",
  
  # Rcpp
  "Rcpp"
)
name_pkg <- unique(name_pkg)
invisible(lapply(name_pkg, library, character.only = T)) # load multiple packages


## Assign clusters for parallel computing ----------------------------------------------------------
cl <- makeCluster(n_cluster, outfile = "/Users/Sungshin/Desktop/Result_verbose.txt")
registerDoParallel(cl)


## start -------------------------------------------------------------------
res_fit <- foreach(i = 1:4, .packages = name_pkg) %dopar% {
  evalCpp("1+1")
}
stopCluster(cl)

但它会返回

Error in { : task 1 failed - "Error 1 occurred building shared library."
  • 但是,我可以在本地 Rstudio 上运行 evalCpp("1+1")(未并行化时)。因此,我想我已经准备好(本地)运行 Rcpp 代码,但是结合并行计算时错误仍然存​​在。

  • 我检查了输出文件(“/Users/Sungshin/Desktop/Result_verbose.txt”),但没有任何报告。

  • writeLines(strsplit(Sys.getenv("PATH"), ";")[[1L]]) 给了我这个:

\usr\bin
C:\Program Files\R\R-4.0.2\bin\x64
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\WindowsPowerShell\v1.0\
C:\WINDOWS\System32\OpenSSH\
C:\Program Files\PuTTY\
C:\Users\Sungshin\AppData\Local\Programs\Python\Python39\Scripts\
C:\Users\Sungshin\AppData\Local\Programs\Python\Python39\
C:\Program Files\MySQL\MySQL Shell 8.0\bin\
C:\Users\Sungshin\AppData\Local\Microsoft\WindowsApps
C:\texlive\2020\bin\win32
C:\Program Files\R\R-4.0.2\bin\x64
C:\rtools40\mingw64\bin

谁能帮我解决这个问题?我真的很感激。

【问题讨论】:

  • 可能重复;将代码放到集群中的工作节点上以组织代码在每个节点上加载的包中的最简单方法。
  • @DirkEddelbuettel 谢谢,但我认为如果代码没有经过足够好的测试,我们肯定不想构建一个包,因此会不断更改。
  • 当然。但是你需要在每个节点上重建编译的函数。因为只是希望它不会移动到那里,便携。正如我所说,这一切都已经讨论过了。
  • rcpp 标签目前在 2586 问题。我知道我们每个人都非常特别,但有 2500 个问题实际上之前已经被问过。这里的搜索功能可能是你不知道的最好的朋友……
  • 不会在foreach 中采购 Rcpp 代码在每个节点上编译它吗?当然,我也会多看rcpp标签贴。

标签: r rcpp parallel.foreach


【解决方案1】:

我很惭愧,但我发现了缺少的东西。

我将此C:/rtools40/usr/bin 添加到系统路径(通过读取this answer)。

我认为添加的C:\rtools40\mingw64\bin 之一是正确的,但事实证明不是。希望以后不会有人对我刚刚学到的东西感到困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2012-04-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多