gpt4 book ai didi

r - 了解 R 中 mclapply 和 parLapply 之间的区别

转载 作者:行者123 更新时间:2023-12-03 10:26:45 42 4
gpt4 key购买 nike

我最近开始在一个项目中使用 R 中的并行技术,并使用 mclapply 在 Linux 系统上运行我的程序。来自 parallel包裹。但是,我对 parLapply 的理解遇到了障碍。对于 Windows。

使用 mclapply我可以设置内核数、迭代数,并将其传递给我工作区中的现有函数。

mclapply(1:8, function(z) adder(z, 100), mc.cores=4)

我似乎无法在 Windows 中使用 parLapply 实现相同的目标.据我了解,我需要使用 clusterExport() 传递所有变量并将我想应用到参数中的实际函数传递给它。

这是正确的还是有类似于 mclapply 的东西?适用于Windows的功能?

最佳答案

美的mclapply是在 mclapply 处,所有工作进程都被创建为 master 权限的克隆。被调用,因此您不必担心在每个集群工作器上重现您的环境。不幸的是,这在 Windows 上是不可能的。

使用时 parLapply ,您通常必须执行以下附加步骤:

  • 创建 PSOCK 集群
  • 如果需要,请注册集群
  • 在集群工作器上加载必要的包
  • 将必要的数据和函数导出到集群 worker 的全局环境

  • 此外,完成后,最好使用 stopCluster 关闭 PSOCK 集群。 .

    这是将您的示例翻译为 parLapply :
    library(parallel)
    cl <- makePSOCKcluster(4)
    setDefaultCluster(cl)
    adder <- function(a, b) a + b
    clusterExport(NULL, c('adder'))
    parLapply(NULL, 1:8, function(z) adder(z, 100))

    如果您的 adder函数需要一个包,在使用 parLapply 调用它之前,您必须在每个工作人员上加载该包。 .您可以使用 clusterEvalQ 轻松做到这一点。 :
    clusterEvalQ(NULL, library(MASS))

    请注意 NULL clusterExport 的第一个参数, clusterEvalparLapply表示他们应该使用通过 setDefaultCluster 注册的集群对象.如果您的程序使用 mclapply,这将非常有用。在许多不同的函数中,因此在将程序转换为使用 parLapply 时,您不必将集群对象传递给每个需要它的函数。 .

    当然, adder可能会调用全局环境中的其他函数,这些函数调用其他函数等。在这种情况下,您还必须导出它们并加载它们需要的任何包。另请注意,如果您在程序运行期间导出的任何变量发生更改,您将必须再次导出它们以便在集群工作器上更新它们。同样,这对于 mclapply 来说不是必需的。因为它总是在被调用时创建/克隆/ fork worker ,因此没有必要。

    关于r - 了解 R 中 mclapply 和 parLapply 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196261/

    42 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com