[Rcpp-devel] Timings for a program
Shaami
nzshaam at gmail.com
Sat Jan 7 04:53:22 CET 2017
Hello Dear
Your suggestions are quite useful. I have deleted two for loops from my
code and trying to use vectors in place of them. It is hard for me to
produce a minimal example. However, now I am trying to use vectorization. I
am having some error. Following is an example code. My basic purpose is
subcube element wise multiplication with matrix's row. The operand % is not
working in this case. Any suggestion would be appreciated.
Here a is a cube of dimension (3, 3, 1) and b is a matrix of dimension (3,
3).
#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace RcppArmadillo;
using namespace arma;
//[[Rcpp::depends(RcppArmadillo)]]
//[[Rcpp::export]]
arma::cube sub(arma::cube a, arma::mat b)
{
a.subcube(2,0,0,2,2,0) = a.subcube(1, 0, 0, 1, 2, 0) .* b.row(0);
return a;
}
The error is
subcube.cpp: In function ‘arma::cube sub(arma::cube, arma::mat)’:
subcube.cpp:11:65: error: ‘arma::Mat<eT>::row(arma::uword) [with eT =
double; arma::uword = unsigned int](0u)’ cannot be used as a member
pointer, since it is of type arma::subview_row<double>’
a.subcube(2,0,0,2,2,0) = a.subcube(1, 0, 0, 1, 2, 0) .* b.row(0);
Thank You so much again for suggesting how to think about to produce a
speedy code.
Shaami
On Fri, Jan 6, 2017 at 5:03 AM, Martyn Plummer <plummerm at iarc.fr> wrote:
> On Thu, 2017-01-05 at 05:39 -0700, Christian Gunning wrote:
> > >
> > > I am new to Rcpp. I have converted my R program into an Rcpp program.
> > > I want to ask a general question. Using Rcpp, my code is taking about 3
> > > minutes to produce output for 100 observations. But it is taking about
> 2.45
> > > hours to produce output for 1000 observations. Any suggestions or
> technical
> > > hint for this type of problem.
> >
> > First off, please include a minimal working example with your
> > question. Without more information, there's not much we can do to
> > help.
>
> I agree with Christian that a reproducible working example is necessary
> for detailed help with your problem. But I'm also bold enough to make a
> guess about what is going on.
>
> Your program is implementing an algorithm that is not linear in the
> sample size but polynomial. You can verify this by recording run times
> for sample sizes of 50, 60, 70, 80, 90, and 100. Plotting the run time
> against the sample size should show the non-linear relationship. At a
> sample size of 1000 the non-linear effects dominate, giving you a
> roughly 5-fold increase in the run time over what you expect from your
> smaller example.
>
> It was pointed out many years ago by Joel Spolsky that this phenomenon
> can arise from using a high level interface without understanding the
> low-level implementation details. See his Wikipedia entry:
>
> https://en.wikipedia.org/wiki/Joel_Spolsky#Schlemiel_the_Painter.27s_al
> gorithm
>
> Frequent reallocations of existing memory are a typical cause of this
> problem.
>
> All of this means that finding the underlying problem might be quite
> hard for you to find, which is all the more reason to strip down your
> program to find the smallest example that shows this behaviour.
>
> Martyn
>
> > In the meantime, you might find this to be an interesting and helpful
> > read:
> > http://www.burns-stat.com/documents/books/the-r-inferno/
> >
> > Best,
> > Christian---------------------------------------------------
> --------------------
> This message and its attachments are strictly confidential. If you are
> not the intended recipient of this message, please immediately notify
> the sender and delete it. Since its integrity cannot be guaranteed,
> its content cannot involve the sender's responsibility. Any misuse,
> any disclosure or publication of its content, either whole or partial,
> is prohibited, exception made of formally approved use
> -----------------------------------------------------------------------
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20170107/f4ea38da/attachment.html>
More information about the Rcpp-devel
mailing list