正如问题标题所示,我想知道为什么编译R代码(使用compiler::cmpfun)的字节比以下数学函数的等效Rcpp代码更快:
func1 <- function(alpha, tau, rho, phi) {
abs((alpha + 1)^(tau) * phi - rho * (1- (1 + alpha)^(tau))/(1 - (1 + alpha)))
}
Run Code Online (Sandbox Code Playgroud)
由于这是一个简单的数值运算,我原本期望Rcpp(funcCpp和funcCpp2)比编译的R(func1c和func2c)字节快得多,特别是因为R会有更多的开销用于存储(1+alpha)**tau或需要重新计算它.事实上,计算这个指数两次似乎比R(func1cvs func2c)中的内存分配更快,这似乎特别违反直觉,因为n它很大.我的另一个猜测是,也许compiler::cmpfun是在扯掉一些魔法,但我想知道是否确实如此.
真的,我想知道的两件事是:
为什么funcCpp和funcCpp2比func1c和func2c慢?(Rcpp比编译的R函数慢)
为什么funcCpp比func2慢?(Rcpp代码比纯R慢)
FWIW,这是我的C++和R版本数据
user% g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.0 (clang-700.0.72)
Target: x86_64-apple-darwin14.3.0
Thread model: posix
user% R --version
R version 3.2.2 (2015-08-14) -- "Fire Safety"
Copyright (C) 2015 …Run Code Online (Sandbox Code Playgroud)