5

自从最新的 Ubuntu 版本(karmic koala)以来,我注意到内部 R 包在启动时会宣传 REvolution包。它似乎是一个用于高性能矩阵计算的库集合。显然,它似乎真的有效。例如在使用 REvolution 的矩阵转置上:

> system.time(t(matrix(rnorm(10000000),ncol=1000)))
   user  system elapsed 
  1.280   0.150   1.556 

没有革命:

> system.time(t(matrix(rnorm(10000000),ncol=1000)))
   user  system elapsed 
  1.320   0.170   1.725 

有人在用吗?它真的有效吗?它正在改进哪些特定类型的计算以及如何改进?有什么缺点吗?

谢谢 :-)

4

3 回答 3

10

是的,在多核机器上,实现 BLAS 的英特尔 MKL 库 - 由包提供并由包revolution-mkl打开,r-revolution-revobase将并行处理线性代数问题,您应该看到与仅使用libblas* 软件包。

但是,你上面的例子并不重要,我经常做类似的事情

 mean(replicate(N, system.time( someStuffHere() )["elapsed"]), trim=0.05)

计算多次复制的修剪平均值。

更重要的是,请注意,您的示例包括 RNG 绘制的时间,这些时间是 i)昂贵的,并且 ii)与所使用的方法无关,因此您应该在system.time().

除了 MKL,revolution-r还引入了一些来自 CRAN 的 REvolution 编写的包,可用于并行执行。

(免责声明:我帮助 REvo 为 Ubuntu 9.10 整合了这个)

于 2009-11-17T13:37:41.253 回答
4

只是重申一下 Dirk 提到的时间 - 在您的情况下,构建矩阵几乎花费了所有时间。看看当我将它拉到计时功能之外时会发生什么(在我的系统上,我没有 REvolution):

> system.time(t(matrix(rnorm(10000000),ncol=1000)))
   user  system elapsed 
  2.256   0.317   2.576 

> mt <- matrix(rnorm(10000000),ncol=1000)
> system.time(t(mt))
   user  system elapsed 
  0.137   0.070   0.204 

换句话说,超过 90% 的时间用于构建矩阵,不到 10% 的时间用于转置。

于 2009-11-18T20:42:11.853 回答
4

有关更多信息,请参阅 REvolution 的这篇博文。REvolution R 3.0 应该 100% 兼容CRAN的 R-2.9.2 。基本上,他们使用多线程、高性能的线性代数库和优化编译器。REvolution 增强功能包括:

  • 高性能数学库经过优化以利用处理器缓存、向量指令和多线程(英特尔数学内核库 - MKL)和
  • 优化编译器和运行时库。

REvolution 网页上有一些基准测试:REvolution R PerformanceSimple Benchmarks

尽管他们在 OSS 许可下为 R 社区贡献了几个有趣的扩展(foreachiteratorsdoSNOWdoMC),但 MKL 扩展是专有的。

就个人而言,我已切换到 (CRAN) R 2.10.0 以拥有最新的 R 功能。

于 2009-11-17T13:33:59.280 回答