自动使用多个内核的R包?

自动使用多个内核的R包?,r,multicore,R,Multicore,我注意到R在执行一个需要大量计算的程序时只使用一个内核。我想利用我的多核处理器使我的程序运行得更快。 我还没有深入调查这个问题,但我希望能从你的评论中获益,因为我对计算机科学没有很好的了解,而且我很难获得关于这个问题的容易理解的信息 是否有一个软件包允许R在需要时自动使用多个内核 我想这并不是那么简单。R只能在附加包的帮助下使用多核,并且只能用于某些类型的操作。在起重机上详细讨论了这些选项 更新:不一定需要R版本2.14.0的附加软件包,因为R随附的推荐软件包中包含了并行软件包。并行包括多核和雪

我注意到R在执行一个需要大量计算的程序时只使用一个内核。我想利用我的多核处理器使我的程序运行得更快。 我还没有深入调查这个问题,但我希望能从你的评论中获益,因为我对计算机科学没有很好的了解,而且我很难获得关于这个问题的容易理解的信息

是否有一个软件包允许R在需要时自动使用多个内核


我想这并不是那么简单。

R只能在附加包的帮助下使用多核,并且只能用于某些类型的操作。在起重机上详细讨论了这些选项


更新:不一定需要R版本2.14.0的附加软件包,因为R随附的推荐软件包中包含了并行软件包。并行包括多核雪地软件包的功能,基本不变。

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

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

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

[编辑]


顺便说一句,Rstudio作为R的前端越来越受欢迎。我喜欢Rstudio,每天都使用它。但是需要注意的是,Rstudio在多核上的表现并不好(至少在2011年10月……我知道Rstudio团队会解决这个问题)。这是因为Rstudio在幕后进行了一些分叉,这些分叉与Multicore的分叉尝试相冲突。所以,如果您需要多核,您可以用Rstuido编写代码,但要在普通的janer会话中运行

正如大卫·赫弗南(David Heffernan)所说,请看革命分析(revolution Analytics)的博客。但是您应该知道,大多数软件包都是针对Linux的。因此,如果你使用windows,它将变得更加困难。 无论如何,看看这些网站:

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


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

关于这个问题,你总能得到非常简短的答案。根据我的说法,最简单的解决方案是基于雪的软件包。也就是说,在具有多核的Windows单机上。另请参见此处,以获取一个简单的示例。Snowfall是snow软件包的包装,它允许您使用一些命令设置多核。它肯定比其他大多数软件包都要省事(我没有全部试用)

顺便说一句,可以并行化的任务确实很少,原因很简单,在多核计算变得有意义之前,您必须能够拆分任务。
apply
系列显然是一个合理的选择:多核和独立的计算,这对于多核使用至关重要。其他的东西并不总是那么容易着色


另请阅读上的讨论。

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

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

请查看以下链接:


该软件包
future
使在
R
中使用并行和分布式处理变得极其简单。如果要将函数并行应用于元素,该软件包提供了一种快速方法来并行使用“应用”系列函数(例如,
apply()
lappy()
,和
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)

库(“future.apply”)
图书馆(“统计数据”)

x Revolutions()提供了R的多线程版本。当然,它们的商业地位似乎在R社区中具有两极分化的效果。我还想补充一点,R的许多典型用途都不适合自动并行化。如果你告诉我们你的程序是做什么的,那么你可能会得到更好的答案。@DavidHeffernan的可能副本它不是R的多线程版本,而是R在多线程中使用的特定库,这个库只提供了R函数的一小部分。我认为Revolutions的产品偏向于Windows。@David——他们还提供了红帽企业版Linux。学生/教育者可以获得一个免费的单用户许可证。@richardh我的观点是,他们的东西并不像Manoel所说的那样专门用于Linuximply@David--哦,是的,你是对的(对不起,我的评论中没有故意嘲弄的意思:)。当我说得最多的时候