[Rcpp-devel] starter

Romain Francois romain at r-enthusiasts.com
Wed May 31 12:26:47 CEST 2017


You can add this somewhere on top of your cpp file 

// [[Rcpp::depends(RcppParallel)]]

Romain

> Le 31 mai 2017 à 12:22, f.krah at mailbox.org a écrit :
> 
> 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; }
> 
> 
> 
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

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


More information about the Rcpp-devel mailing list