r语言 - Rcpp函数的编译时间较长



我写了我的第一个Rcpp函数,并与sourceCpp一起采购。这需要很长时间,但并不总是(有时几秒钟,但这是典型的):

system.time(sourceCpp('04_Rcpp_loads.cpp'))
user  system elapsed 
0.03    0.02   77.95

它处理大数据帧的速度非常快,只是编译速度很慢。

这是我的Rcpp函数:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector loads(NumericVector feet, double m1, double base_ft, double base_press, double SF) {
int n = feet.size();
double calc_0 = 0;
double calc_1 = 0;
double calc_2 = 0;
double calc_3 = 0;
double calc_4 = 0;
double calc_5 = 0;
double calc_6 = 0;
double calc_7 = 0;
NumericVector load_psf(n);
for(int i = 0; i < n; ++i) {
calc_0 = pow(2 * feet[i] / base_ft, 2.0);
calc_1 = pow((pow(m1, 2.0) + calc_0) * (calc_0 + 1), 0.5);
calc_2 = pow(m1, 2.0) + calc_0;
calc_3 = 1 + calc_0;
calc_4 = pow(m1, 2.0) + 2 * calc_0 + 1;
calc_5 = (-2) * m1 * feet[i] / base_ft;
calc_6 = pow(m1, 2.0) + calc_0 + 1;
calc_7 = asin(m1 / calc_1);
load_psf[i] = 2 * base_press * SF *((calc_5 / pow(calc_6, 0.5)) * calc_4 / (calc_3 * calc_2) + calc_7) / 3.14159265;
}
return load_psf;   
}

该功能在shinyapps.io上的应用中使用。我不知道那里发生了什么,但启动应用程序需要很长时间,所以我怀疑同样的事情。上面的输出直接来自我的Windows机器上的RStudio。在此发布时,所有软件包已更新为最新版本。

我怀疑有一种方法可以使它更快-通过预编译也许?我如何使它更快?当我这样做时,我将如何在shinyapps.io上运行它?

几点要点:

  1. 如果你把你的函数作为一个包的一部分,它只会离线编译一次,你可以直接加载它,这基本上是"免费的";在资源使用方面……这就是我要做的。

  2. 有编译选项,你现在可以选择头Rcpp/Rcpp,Rcpp/Light,Rcpp/LighterRcpp/Lightest(选择多少可选的Rcpp功能包括在内。

  3. 编译是非常昂贵的。在可能的情况下,我总是尝试通过ccache依赖缓存编译——更多信息请参阅我的这篇博客文章。

希望这对你有帮助。很高兴讨论更多,也许在rpp -devel列表。

最新更新