[Rcpp-devel] starter

f.krah at mailbox.org f.krah at mailbox.org
Wed May 31 12:22:33 CEST 2017


Hi all,

I am very new to Rcpp and I wrote a function which I now want to parallelize.
The function is working fine, and is much faster than in R, however, it really is slow for bigger datasets.

Since the function is running I don’t need to explain what it does, however, it is has 
3 nested for loops. It loops through columns and within each column if loops through the rows and in a third loop produces pair comparisons… 

So the parallelisation should parallelize the column loop.

I found the RcppParallel package and for the beginning wanted to run on of the example to understand the
workflow first. However, I already have issues running the code below:

following is sourced with: Rcpp::sourceCpp("src/par_example.cpp")
However, I get the error: 

par_example.cpp:6:10: fatal error: 'RcppParallel.h' file not found
#include <RcppParallel.h>
         ^
1 error generated.
make: *** [par_example.o] Error 1

I would much appreciate if someone could give me a start with this!

Cheers, 
Franz



#include <Rcpp.h>

using namespace Rcpp;
#include <cmath>
#include <algorithm>
#include <RcppParallel.h>

// [[Rcpp::export]]
NumericMatrix matrixSqrt(NumericMatrix orig) {
  // allocate the matrix we will return
  NumericMatrix mat(orig.nrow(), orig.ncol());
  // transform it
  std::transform(orig.begin(), orig.end(), mat.begin(), ::sqrt);
  // return the new matrix
  return mat;
}


using namespace RcppParallel;
struct SquareRoot : public Worker {
  const RMatrix<double> input;
  // source matrix RMatrix<double> output; // destination matrix
  // initialize with source and destination
  SquareRoot(const NumericMatrix input, NumericMatrix output)
    : input(input), output(output) {}
  // take the square root of the range of elements requested
  void operator()(std::size_t begin, std::size_t end) { std::transform(input.begin() + begin,
    input.begin() + end,
    output.begin() + begin,
    ::sqrt);
  }
};

// [[Rcpp::export]]
NumericMatrix parallelMatrixSqrt(NumericMatrix x) {
  // allocate the output matrix
  NumericMatrix output(x.nrow(), x.ncol());
  // SquareRoot functor (pass input and output matrixes)
  SquareRoot squareRoot(x, output);
  // call parallelFor to do the work
  parallelFor(0, x.length(), squareRoot);
  // return the output matrix
  return output; }



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20170531/4dd48738/attachment.html>


More information about the Rcpp-devel mailing list