What do you mean by "doesn't work" ? Compiling error or the result is not right?
I just tried the code, and it seems the code can compile and work. Best, KK On Tue, Dec 9, 2014 at 6:33 AM, Maxime To <maxime...@outlook.fr> wrote: > Hi, > > I started to work with Rcpp and I have some trouble to adapt some code. I > copy below the following code: > > - I want to write a function named contrib1, that is simplified version > here, but the idea is that that function makes a large use of the pnorm > (and qnorm) on marices and I would like to make it faster by applying the > function using Rcpp parallel. > > - Then I started with an example that I tried to adapt > (http://gallery.rcpp.org/articles/parallel-matrix-transform/ > <http://gallery.rcpp.org/articles/parallel-matrix-transform/>) to build > the structure Pnorm and the function pPnorm. I also created the function f > (I wasn't able to use directly the pnorm function as would Sugar allow...) > > The example doesn't work. And I don't really understand why. I guess that > it is a problem of memory allocation... Can anyone help me on that point?? > Moreover, I was able to build a previous version that was working, but once > I started to iterate on the contrib1 function (I execute an optimization > algorithm), the RAM memory saturated I wasn't able to figure out why the > program was not freeing memory after each execution of the function. > > I attach the code below. I am a Rcpp novice, so don't hesitate to comment > on strange things.... > Thanks for your answers! > > Maxime > > -------------------------------------- > > #include <RcppArmadillo.h> > #include <cmath> > #include <algorithm> > #include <RcppParallel.h> > > using namespace Rcpp; > using namespace arma; > using namespace std; > using namespace RcppParallel; > > // [[Rcpp::depends(RcppArmadillo, RcppParallel)]] > > inline double f(double x) { return ::Rf_pnorm5(x, 0.0, 1.0, 1, 0); } > > struct Pnorm : public Worker > { > // source matrix > mat input; > > // destination matrix > mat output; > > // initialize with source and destination > Pnorm(mat input, mat 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, > f); > } > }; > > mat pPnorm(mat x) { > > // allocate the output matrix > mat output(x.n_rows, x.n_cols); > > // Pnorm functor (pass input and output matrixes) > Pnorm ppnorm(x, output); > > // call parallelFor to do the work > parallelFor(0, x.n_elem, ppnorm); > > // return the output matrix > mat outmat(output.begin(), output.n_rows, output.n_cols); > return outmat; > } > > // [[Rcpp::export]] > mat contrib1(mat my_matrix) { > > mat pbound2 = pPnorm(my_matrix); > return pbound2; > } > > > ------------------------------------------ > ### Main R code > > rm(list=ls(all=TRUE)) > > library(Rcpp) > library(RcppGSL) > library(RcppParallel) > library(RcppArmadillo) > setwd('U:/testParallel') > > sourceCpp("test.cpp") > > asd = matrix(runif(1000), ncol = 100) > contrib1(asd) > > > > _______________________________________________ > 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 > -- Qiang Kou q...@umail.iu.edu School of Informatics and Computing, Indiana University
_______________________________________________ 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