【问题标题】:R package that automatically uses several cores?自动使用多个内核的 R 包?
【发布时间】:2011-06-14 02:10:08
【问题描述】:

我注意到 R 在执行我的一个需要大量计算的程序时只使用一个内核。我想利用我的多核处理器让我的程序运行得更快。 我还没有深入研究过这个问题,但我希望能从你们的 cmets 中受益,因为我没有很好的计算机科学知识,而且我很难获得关于该主题的易于理解的信息。

是否有允许 R 在需要时自动使用多个内核的包?

估计没那么简单。

【问题讨论】:

  • Revolutions (revolutionanalytics.com) 提供了 R 的多线程版本。当然,它们的商业地位似乎在 R 社区中产生了两极分化的影响。
  • 我还要补充一点,R 的许多典型用途不适合自动并行化。如果您告诉我们您的程序做了什么,那么您可能会得到更好的答案。
  • @DavidHeffernan 它不是 R 的多线程版本,而是 R 在多线程中使用的特定库,并且该库服务于所有 R 函数的一小部分。

标签: r multicore


【解决方案1】:

R 只能在附加包的帮助下使用多个内核,并且只能用于某些类型的操作。这些选项在 CRAN 上的 High Performance Computing Task View 上进行了详细讨论

更新:由于包含 parallel 包作为 R 附带的推荐包,因此不一定需要从 R 版本 2.14.0 附加包。parallel 包括 multicoresnow 包中的功能,基本没有变化。

【讨论】:

【解决方案2】:

利用多处理器的最简单方法是 multicore 包,其中包含函数 mclapply()。 mclapply() 是 lapply() 的多核版本。因此,任何可以使用 lapply() 的进程都可以轻松转换为 mclapply() 进程。但是,多核在 Windows 上不起作用。我写了一篇关于此last year 的博客文章,这可能会有所帮助。 Revolution Analytics 创建的包 doSMP 不是 R 的多线程版本。它实际上是多核的 Windows 版本。

如果您的工作是embarrassingly parallel,最好熟悉 lapply() 类型的结构。这将使您可以轻松地进入 mclapply() 甚至使用相同抽象的分布式计算。

对于不是“令人尴尬的并行”的操作来说,事情变得更加困难。

[编辑]

顺便说一句,Rstudio 作为 R 的前端越来越受欢迎。我喜欢 Rstudio 并且每天都在使用它。但是需要注意的是,Rstudio 不能很好地与 Multicore 配合使用(至少截至 2011 年 10 月......我知道 RStudio 团队将解决这个问题)。这是因为 Rstudio 在幕后做了一些分叉,而这些分叉与 Multicore 的分叉尝试相冲突。因此,如果您需要多核,您可以在 Rstuido 中编写代码,但在纯简 R 会话中运行它。

【讨论】:

  • Mac OS X 怎么样?我知道它不是 Linux,但至少有点接近。只是好奇那里的状态......
  • 我选择 showfall 是因为我可以在所有运行 Ubuntu 中任一 Windows 的机器上轻松使用它。
  • 我看到多核包现在已被弃用,取而代之的是“并行”包。
  • 时代......他们正在改变
【解决方案3】:

在这个问题上,你总是得到非常简短的答案。我认为最简单的解决方案是基于雪的包snowfall。也就是说,在具有多个内核的 Windows 单台计算机上。另请参阅article of Knaus et al 此处的简单示例。 Snowfall 是 snow 包的包装器,允许您使用一些命令设置多核。它绝对比大多数其他软件包更容易(我没有尝试所有这些)。

在旁注中,确实只有少数任务可以并行化,原因很简单,您必须能够在多核计算有意义之前拆分任务。 apply 系列显然是一个合乎逻辑的选择:多重和独立计算,这对于多核使用至关重要。其他任何东西并不总是那么容易多核。

另请阅读sfApply and custom functions 上的此讨论。

【讨论】:

  • 第一个链接不再指向包含任何包裹信息的页面。
【解决方案4】:

Microsoft R Open 包含多线程数学库以提高 R 的性能。它适用于 Windows/Unix/Mac 所有操作系统类型。它是开源的,如果您有任何现有的 R(来自 CRAN)安装,则可以安装在单独的目录中。您也可以使用流行的 IDE Rstudio。从一开始,R 就被设计为一次只使用一个线程(处理器)。即使在今天,除非与多线程 BLAS/LAPACK 库链接,否则 R 仍以这种方式工作。

当今的多核机器提供并行处理能力。为了利用这一点,Microsoft R Open 包含多线程数学库。 这些库使许多常见的 R 运算(例如矩阵乘法/逆运算、矩阵分解和一些更高级别的矩阵运算)能够并行计算并使用所有可用的处理能力来减少计算时间。

请查看以下链接:

https://mran.revolutionanalytics.com/rro/#about-rro

http://www.r-bloggers.com/using-microsoft-r-open-with-rstudio/

【讨论】:

    【解决方案5】:

    正如 David Heffernan 所说,请查看革命分析博客。但是您应该知道,大多数软件包都是针对 Linux 的。所以,如果你使用windows会更难。 不管怎样,看看这些网站:

    Revolution。在这里你会找到一个关于 R 并行化的讲座。这个讲座实际上非常好,但是,正如我所说,大多数技巧都是针对 Linux 的。

    Stackoverflow 的这个帖子将讨论 Windows 中的一些实现。

    【讨论】:

    • 我认为 Revolutions 的产品偏向于 Windows。
    • @David -- 他们还提供 Red Hat Enterprise Linux 版本。学生/教育工作者可以获得免费的单用户许可证。
    • @richardh 我的意思是他们的东西并不像 Manoel 所暗示的那样专门用于 Linux
    • @David -- 哦,是的,你是对的(对不起,我的评论中没有任何意图:)。
    • 当我说大多数包时,我指的是大多数包,不仅仅是革命包。对不起。和罗马,你指的是什么链接?革命还是在 Stackoverflow?
    【解决方案6】:

    future 包使使用并行和分布式处理在R 中工作变得非常简单。 More info here。如果您想将函数并行应用于元素,future.apply 包提供了一种快速并行使用“应用”系列函数(例如 apply()lapply()vapply())的方法。

    例子:

    library("future.apply")
    library("stats")
    x <- 1:10
    
    # Single core
      y <- lapply(x, FUN = quantile, probs = 1:3/4)
    
    # Multicore in parallel
      plan(multiprocess)
      y <- future_lapply(x, FUN = quantile, probs = 1:3/4)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2013-10-12
      • 2017-05-29
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2012-10-28
      相关资源
      最近更新 更多