Can you post a minimal full example? -Christian On Tue, Dec 4, 2012 at 8:39 PM, Honglang Wang <wanghonglang2...@gmail.com> wrote: > Yes, the main issue for my coding is the allocation of memory. And I have > fixed one of the biggest memory allocation issue: 4000 by 4000 diagonal > matrix. And since I am not familiar with Rcpp and RcppArmadillo, I have no > idea how to reuse the memory. I hope I can have some materials to learn > this. Thanks. > > >> >> What exactly do these timings show? A single call you your function? >> How many calls? >> > Here I called my function for 100 times. > >> >> Building on Romain's point: -- a portion of your function's runtime is >> in memory allocation >> (and you have a lot of allocations here). >> If you're calling your function thousands or millions of times, then >> it might pay to closely >> examine your memory allocation strategies and figure out what's >> temporary, for example. >> It looks like you're already using copy_aux_mem = false in a number >> of places, but you're >> allocating a lot of objects -- of approx what size? >> >> For example, wouldn't this work just as well with one less allocation? >> arma::vec kk = t; >> arma::uvec q1 = arma::find(arma::abs(tp)<h); >> kk.elem(q1) = ((1-arma::pow(tp.elem(q1)/h,2))/h)*0.75; >> // done with q1. let's reuse it. >> q1 = arma::find(arma::abs(tp)>=h); >> // was q2 >> kk.elem(q1).zeros(); >> >> You could potentially allocate memory for temporary working space in >> R, grab it with copy_aux_mem = false, write your temp results there, >> and reuse these objects in subsequent function calls. It doesn't make >> sense to go to this trouble, though, if your core algorithm consumes >> the bulk of runtime. >> >> Have you looked on the armadillo notes r.e. inv? Matrix inversion has >> O(>n^2). You may be aided by pencil-and-paper math here. >> http://arma.sourceforge.net/docs.html#inv >> > Here my matrix for inverse is only 4 by 4, so I think it's ok. > >> >> best, >> Christian >> >> > Dear All, >> > I have tried out the first example by using RcppArmadillo, but I am not >> > sure whether the code is efficient or not. And I did the comparison of >> > the >> > computation time. >> > >> > 1) R code using for loop in R: 87.22s >> > 2) R code using apply: 77.86s >> > 3) RcppArmadillo by using for loop in C++: 53.102s >> > 4) RcppArmadillo together with apply in R: 47.310s >> > >> > It is kind of not so big increase. I am wondering whether I used an >> > inefficient way for the C++ coding: >> >> >> >> -- >> A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama! > >
-- A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal – Panama! _______________________________________________ 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