【问题标题】:REvolution for RR的革命
【发布时间】:2009-11-17 12:36:48
【问题描述】:

自从最新的 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 

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

谢谢:-)

【问题讨论】:

  • 你似乎有两次“没有”的情况。

标签: r mathematical-packages


【解决方案1】:

是的,在多核机器上,实现 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 整合了这些内容)

【讨论】:

  • 谢谢,还有关于时间的提示:-)
  • 我在Ubuntu 13.04上安装了revolution r,基于benchmark 2.5脚本,安装后性能完全没有变化。我想知道是不是出了什么问题。另请参阅此问题:askubuntu.com/questions/297968/…
  • 现在我在 R3.0.1 和 R2.15 上都使用了基准脚本,无论是否使用revolution-r,结果几乎相同。有人可以确认一下吗?
【解决方案2】:

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

  • 经过优化以利用处理器缓存、向量指令和多线程 (Intel Math Kernel Library - MKL) 和
  • 的高性能数学库
  • 优化编译器和运行时库。

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

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

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

【讨论】:

    【解决方案3】:

    只是重申一下 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% 的时间用于转置。

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2016-01-05
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多