C++11 versus R Standalone Random Number Generation Performance Comparison
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
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 <iostream> #include <vector> #include <random> #include <chrono> #include "Rmath.h" int main(int argc, char *argv[]) { int ndraws=100000000; std::vector<double> Z(ndraws); std::mt19937 engine; std::normal_distribution<double> 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<double> 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:
[michael@michael coda]$ g++ normal.cpp -o normal -std=c++11 -O3 -lRmath [michael@michael 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.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.