Using rcpptimer with Rcpp::sourceCpp

Using Rcpp::Timer together with Rcpp::sourceCpp is similar to using it in an R package (c.f. vignette("packages")). However, instead of linking to rcpptimer in the DESCRIPTION file, we declare this dependency in the C++ file. We can do this by adding //[[Rcpp::depends(rcpptimer)]]. In the following, find a simple example file called 'fibonacci_omp.cpp':

// fibonacci_omp.cpp

//[[Rcpp::depends(rcpptimer)]]
#include <rcpptimer.h>

long int fib(long int n)
{
  return ((n <= 1) ? n : fib(n - 1) + fib(n - 2));
}

//[[Rcpp::export]]
std::vector<long int> fibonacci_omp(std::vector<long int> n)
{
  Rcpp::Timer timer;
  // This scoped timer measures the total execution time of 'fibonacci'
  Rcpp::Timer::ScopedTimer scpdtmr(timer, "fib_body");
  std::vector<long int> results = n;
#pragma omp parallel for
  for (unsigned int i = 0; i < n.size(); ++i)
  {
    timer.tic("fib_" + std::to_string(n[i]));
    results[i] = fib(n[i]);
    timer.toc("fib_" + std::to_string(n[i]));
  }
  return (results);
}

Place that file in your working directory and run:

Rcpp::sourceCpp("fibonacci_omp.cpp")

This will compile the C++ code and load the function fibonacci_omp into your R environment. You can now call it with fibonacci_omp(n = rep(20:25, 10)) and observe the timings by executing print(times).



Try the rcpptimer package in your browser

Any scripts or data that you put into this service are public.

rcpptimer documentation built on Sept. 30, 2024, 9:30 a.m.