From jcrudy at gmail.com  Sun Feb 20 23:39:00 2011
From: jcrudy at gmail.com (Jason Rudy)
Date: Sun, 20 Feb 2011 14:39:00 -0800
Subject: [Rd] Problem using F77_CALL(dgemm) in a package
In-Reply-To: <19809.15657.103744.21821@max.nulle.part>
References: <AANLkTimAHcu_=_rMR9bFVYK86bmWhs8Pimgv3L-LiHsV@mail.gmail.com>
	<19809.14419.760969.854831@max.nulle.part>
	<19809.15657.103744.21821@max.nulle.part>
Message-ID: <AANLkTikP74hDvS9RAyzR68pKU6fHXuMWMtZ9o3tzZkAx@mail.gmail.com>

I've never used C++ before, so for this project I think I will stick
with just using the BLAS and LAPACK routines directly.  Another issue
is that I will need to do some sparse matrix computations, for which I
am planning to use CSPARSE, at least to begin with.  I am interested
by RcppArmadillo, and would consider it for future projects.  If you
don't mind, what in your opinion are the major pros and cons of an
RcppArmadillo solution compared to simply using the BLAS or LAPACK
routines through the .C interface?

-Jason

On Sun, Feb 20, 2011 at 8:11 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> On 20 February 2011 at 09:50, Dirk Eddelbuettel wrote:
> | There is of course merit in working through the barebones API but in case you
> | would consider a higher-level alternative, consider these few lines based on
> | RcppArmadillo (which end up calling dgemm() for you via R's linkage to the BLAS)
>
> PS I always forget that we have direct support in Rcpp::as<> for Armadillo
> matrices. The examples reduces to three lines in C++, and you never need to
> worry about row or column dimension, or memory allocation or deallocation:
>
> ?R> suppressMessages(library(inline))
> ?R> txt <- '
> ?+ ? ?arma::mat Am = Rcpp::as< arma::mat >(A);
> ?+ ? ?arma::mat Bm = Rcpp::as< arma::mat >(B);
> ?+ ? ?return Rcpp::wrap( Am * Bm );
> ?+ ? ?'
> ?R> mmult <- cxxfunction(signature(A="numeric", B="numeric"),
> ?+ ? ? ? ? ? ? ? ? ? ? ?body=txt,
> ?+ ? ? ? ? ? ? ? ? ? ? ?plugin="RcppArmadillo")
> ?R> A <- matrix(1:9, 3, 3)
> ?R> B <- matrix(9:1, 3, 3)
> ?R> C <- mmult(A, B)
> ?R> print(C)
> ? ? ? [,1] [,2] [,3]
> ?[1,] ? 90 ? 54 ? 18
> ?[2,] ?114 ? 69 ? 24
> ?[3,] ?138 ? 84 ? 30
> ?R>
>
> Matrices A and B from directly initialise Armadillo matrices, and the result
> can be returned directly.
>
> Hth, Dirk
>
> --
> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>



[Rd] Problem using F77_CALL(dgemm) in a package
Jason Rudy