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@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel