Tamam, cevabı biliyorum, ancak this question'dan esinlenerek, aşağıdakiler hakkında güzel fikirler almak istiyorum: Aşağıdaki Rcpp alıştırması ca. Dahili exp()
'dan% 15 daha hızlı (uzun vektörler için)? Hepimiz Rcpp'nin R/C API'sine bir sarıcı olduğunu biliyoruz, bu yüzden biraz daha kötü bir performans beklemeliyiz.Kendiliğinden yazılan bir Rcpp vektörel matematiksel fonksiyonu, temel karşılıklarından daha hızlı mıdır?
Rcpp::cppFunction("
NumericVector exp2(NumericVector x) {
NumericVector z = Rcpp::clone(x);
int n = z.size();
for (int i=0; i<n; ++i)
z[i] = exp(z[i]);
return z;
}
")
library("microbenchmark")
x <- rcauchy(1000000)
microbenchmark(exp(x), exp2(x), unit="relative")
## Unit: relative
## expr min lq median uq max neval
## exp(x) 1.159893 1.154143 1.155856 1.154482 0.926272 100
## exp2(x) 1.000000 1.000000 1.000000 1.000000 1.000000 100
iyi tahmin: lokal R arasındaki derleyici bayrakları/optimizasyon düzeylerindeki fark CRAN ve 'cppFunction' derlenen olarak derlenmiş? Rcpp kodunu derlerken optimizasyon için bu ve potansiyel olarak daha fazla fırsat (Rcpp'de kodlanmış tip bilgisinden yararlanarak) –
@KevinUshey: Kendi başıma R'yi derledim. Rcpp için aynı derleyici bayraklarını kullanıyorum. – gagolews
Sistemimde 'exp' daha hızlıdır. – Roland