**Lindons Log » R**, and kindly contributed to R-bloggers)

If you are writing some C++ code with the intent of calling it from R or even developing it into a package you might wonder whether it is better to use the pseudo random number library native to C++11 or the R standalone library. On the one hand users of your package might have an outdated compiler which doesn’t support C++11 but on the other hand perhaps there are potential speedups to be won by using the

#define MATHLIB_STANDALONE #include#include #include #include #include "Rmath.h" int main(int argc, char *argv[]) { int ndraws=100000000; std::vector Z(ndraws); std::mt19937 engine; std::normal_distribution N(0,1); auto start = std::chrono::steady_clock::now(); for(auto & z : Z ) { z=N(engine); } auto end = std::chrono::steady_clock::now(); std::chrono::duration elapsed=end-start; std::cout << elapsed.count() << " seconds - C++11" << std::endl; start = std::chrono::steady_clock::now(); for(auto & z : Z ) { z=rnorm(0,1); } end = std::chrono::steady_clock::now(); elapsed=end-start; std::cout << elapsed.count() << " seconds - R Standalone" << std::endl; return 0; }

Compiling and run with:

[[email protected] coda]$ g++ normal.cpp -o normal -std=c++11 -O3 -lRmath [[email protected] coda]$ ./normal

## Normal Generation

5.2252 seconds - C++11 6.0679 seconds - R Standalone

## Gamma Generation

11.2132 seconds - C++11 12.4486 seconds - R Standalone

## Cauchy

6.31157 seconds - C++11 6.35053 seconds - R Standalone

As expected the C++11 implementation is faster but not by a huge amount. As the computational cost of my code is dominated by other linear algebra procedures of O(n^3) I’d actually be willing to use the R standalone library because the syntax is more user friendly.

The post C++11 versus R Standalone Random Number Generation Performance Comparison appeared first on Lindons Log.

**leave a comment**for the author, please follow the link and comment on their blog:

**Lindons Log » R**.

R-bloggers.com offers

**daily e-mail updates**about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...