[Rcpp-devel] Status of ARMA_64BIT_WORD in RcppArmadillo

Dirk Eddelbuettel edd at debian.org
Mon Dec 15 05:14:17 CET 2014

On 15 December 2014 at 03:49, Balamuta, James Joseph wrote:
| Greetings and Salutations All,
| Recently, I've had the need to collide large matrices 1x10^7 using code written
| in RcppArmadillo.
| Initially, I triggered:
| Error: Mat::init(): requested size is too large; suggest to enable
| Upon a quick search, I stumbled upon a Stack Exchange post by Dirk:
| http://stackoverflow.com/a/16159326/1345455
| "Update on 2013-04-30: This was actually an Armadillo bug, which was just fixed
| upstream. A new RcppArmadillo verion 0.3.810.2 is now in SVN, and should
| migrate soon to CRAN shortly. You no longer need to define ARMA_64BIT_WORD."
| Upon opening,
| [R.home()]/lib/R/library/RcppArmadillo/include/RcppArmadilloConfig.h
| #define ARMA_64BIT_WORD
| The above definition not listed.
| Two quick questions:
| 1. Was the default support for ARMA_64BIT_WORD removed? (RcppArmadillo >=
| If not, is there a trigger I need to add to my source to ensure 
| ARMA_64BIT_WORD is active?
| 2. If I make the code I'm currently working on available as a package on CRAN,
| would I have to direct users to modify the RcppArmadilloConfig.h?

There are two or three things to consider:

i)   R itself now extended indices; Rcpp has not carried this over

ii)  Armadillo can deal with bigger data. From config.hpp:

     #if !defined(ARMA_64BIT_WORD)
     // #define ARMA_64BIT_WORD
     //// Uncomment the above line if you require matrices/vectors capable of holding more than 4 billion elements.
     //// Your machine and compiler must have support for 64 bit integers (eg. via "long" or "long long")

iii) We cannot generally enable these features as we do not generally have
     long long (as previously discussed and in other place -- compilers and
     C++ supported this for years; R insists on the oldest standard which
     does not have it).

So I would think that by doing both of

     a) enabling C++11 to get long long 

     b) defining ARMA_64BIT_WORD

both of which can be done in your src/Makevars, you should be set.

But per i) above you can't bring such large matrices into R yet.  But you can
write C++ code to work on them, and maybe your result set then is smaller.

Hth,  Dirk

http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org

More information about the Rcpp-devel mailing list