简单加速R 2012-07-20

我们知道在R中通过Rcpp包调用C\C++代码可以把一些尤其是矩阵计算的算法加速,我们还知道如果机器足够给力就可以使用parallel包或者snowfall包运用多核或者多机并行计算来加速,但有时我们大可不必这么费劲。在R 2.14版本之后提供了一个compiler的基础包,使得我们可以在执行自己的函数之前把它编译成二进制程序(正如编译语言比脚本语言快)。如果仅仅想加速一些R中既有的函数,不妨试试这个办法。举个简单的for循环例子如下,可以看到带来的速度提升达到13.67倍之多。八卦一下,据说该包作者作为R Project核心成员进入开发组许多年都没有commit过,第一次commit就是这个成果,可谓十年磨一剑。废话不多说,看例子。

S> myFunction<-function() { for(i in 1:1e7) { 1*(1+1) } }
S> library(compiler)
S> myCompiledFunction <- cmpfun(myFunction) # 编译函数
S> system.time( myFunction() )
   user  system elapsed
 10.280   0.017  10.303
S> system.time( myCompiledFunction() )
   user  system elapsed
  0.752   0.024   0.776


Powered by Jekyll on GitHub | ©2016 Meroa | Last modified: 2018-03-22