You can add this somewhere on top of your cpp file // [[Rcpp::depends(RcppParallel)]]
Romain > Le 31 mai 2017 à 12:22, f.k...@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@lists.r-forge.r-project.org > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
_______________________________________________ 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