[Rcpp-devel] Rcpp-devel Digest, Vol 57, Issue 18

Dirk Eddelbuettel edd at debian.org
Thu Jul 17 23:13:07 CEST 2014


On 17 July 2014 at 16:50, JJ Allaire wrote:
| It very well may be thread-safe, but my thinking is that it could be dangerous
| to use a class where some methods are thread-safe and some are not (and there
| isn't necessarily documentation or a formal contract on what's safe and what's
| not). Your current use is likely fine, I'm just being cautious.

And that is *totally* the right approach as the Rcpp code base is somewhat
large and complex.  And sometimes we do make calls back to R for convenience
(and I keep forgetting about that too).  Case in point was Gabor's recent
message to r-devel about deletion from an environment.

If in dount, use STL classes or lightweight wrappers such as the delightful
RMatrix in RcppParellel when entering multithreaded code.  

Dirk
 
| J.J.
| 
| 
| On Thu, Jul 17, 2014 at 4:40 PM, Alessandro Mammana <mammana at molgen.mpg.de>
| wrote:
| 
|     Sorry,  I read this post just by chance,
|     did I understand correctly, the class Rcpp::Matrix are not thread safe?
|     Is there any problem in writing code such as:
| 
|     mat(i,j) = something
| 
|     in a multithreaded environment (such as inside a "#pragma omp parallel
|     for" loop)?
|     My scripts are full of such loops. I have assumed that it was the same as
|     doing:
| 
|     double* M = mat.begin();
|     M[i + ncol*j] = something;
| 
|     This at least should be thread safe, right?
| 
|     Thx a lot!
|     Ale
| 
| 
| 
|     On Tue, Jul 15, 2014 at 12:00 PM,
|     <rcpp-devel-request at lists.r-forge.r-project.org> wrote:
|     > Send Rcpp-devel mailing list submissions to
|     >         rcpp-devel at lists.r-forge.r-project.org
|     >
|     > To subscribe or unsubscribe via the World Wide Web, visit
|     >         https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/
|     rcpp-devel
|     >
|     > or, via email, send a message with subject or body 'help' to
|     >         rcpp-devel-request at lists.r-forge.r-project.org
|     >
|     > You can reach the person managing the list at
|     >         rcpp-devel-owner at lists.r-forge.r-project.org
|     >
|     > When replying, please edit your Subject line so it is more specific
|     > than "Re: Contents of Rcpp-devel digest..."
|     >
|     >
|     > Today's Topics:
|     >
|     >    1. Re: parallel distance matrix calculation (JJ Allaire)
|     >    2. Re: parallel distance matrix calculation (JJ Allaire)
|     >
|     >
|     > ----------------------------------------------------------------------
|     >
|     > Message: 1
|     > Date: Mon, 14 Jul 2014 10:45:06 -0400
|     > From: JJ Allaire <jj.allaire at gmail.com>
|     > To: Dirk Eddelbuettel <edd at debian.org>
|     > Cc: "rcpp-devel at lists.r-forge.r-project.org"
|     >         <rcpp-devel at lists.r-forge.r-project.org>
|     > Subject: Re: [Rcpp-devel] parallel distance matrix calculation
|     > Message-ID:
|     >         <CAKw=oCxkxeHkM4Q=aFMk+9SrQaM1e-Hao1Mh=
|     qgKzn22HCOB5g at mail.gmail.com>
|     > Content-Type: text/plain; charset="utf-8"
|     >
|     > Here's a parallel version:
|     >
|     > https://github.com/jjallaire/RcppParallel/blob/master/inst/examples/
|     parallel-distance-matrix.cpp
|     >
|     > To make the code reasonable I introduced a new RMatrix<T> class in
|     > RcppParallel that makes offsetting into rows and columns safe and
|     > straightforward. This class has no connection on the R or Rcpp APIs so is
|     > guaranteed to be thread-safe.
|     >
|     > On a 4 core machine (8 with hyperthreading) I'm observing a 10x speedup.
|     > The parallel related speedup is 4x. There is an additional 2.5x speedup
|     > which appears to be related to the lower level access to the Matrix
|     memory
|     > done by RMatrix<T> (and perhaps some elimination of copying).
|     >
|     >
|     >
|     >
|     > On Sun, Jul 13, 2014 at 7:27 AM, Dirk Eddelbuettel <edd at debian.org>
|     wrote:
|     >
|     >>
|     >> On 12 July 2014 at 12:37, JJ Allaire wrote:
|     >> | If you could send the full source code to your example (including
|     >> js_distance
|     >> | and whatever R code you are using to test/exercise the functions) I'll
|     >> see if I
|     >> | can come up with the code you'd use to parallelize the outer loop.
|     >> Depending on
|     >> | how it turns out perhaps we can even convert this into another gallery
|     >> article!
|     >>
|     >> That's the spirit!  [ I had another quick look at the inner-product
|     example
|     >> which is short and nice, but there is just too little of a pickup
|     there...
|     >> ]
|     >>
|     >> Dirk
|     >>
|     >> --
|     >> http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
|     >>
|     > -------------- next part --------------
|     > An HTML attachment was scrubbed...
|     > URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments
|     /20140714/a4fcf62a/attachment-0001.html>
|     >
|     > ------------------------------
|     >
|     > Message: 2
|     > Date: Mon, 14 Jul 2014 12:48:25 -0400
|     > From: JJ Allaire <jj.allaire at gmail.com>
|     > To: Dirk Eddelbuettel <edd at debian.org>
|     > Cc: "rcpp-devel at lists.r-forge.r-project.org"
|     >         <rcpp-devel at lists.r-forge.r-project.org>
|     > Subject: Re: [Rcpp-devel] parallel distance matrix calculation
|     > Message-ID:
|     >         <CAKw=
|     oCyCdv98hTUHRUf+XLbKKFUMp3L64hJX4Ku6uoDjjarvSw at mail.gmail.com>
|     > Content-Type: text/plain; charset="utf-8"
|     >
|     >> On a 4 core machine (8 with hyperthreading) I'm observing a 10x speedup.
|     >> The parallel related speedup is 4x. There is an additional 2.5x speedup
|     >> which appears to be related to the lower level access to the Matrix
|     memory
|     >> done by RMatrix<T> (and perhaps some elimination of copying).
|     >>
|     >
|     > It turns out that the additional slowdown in the serial version was due
|     to
|     > repeatedly calling Vector::length as a loop termination condition. I
|     > re-wrote the serial version using iterators and now the speedup from
|     > parallel is about 5x (more in line with expectations).
|     > -------------- next part --------------
|     > An HTML attachment was scrubbed...
|     > URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments
|     /20140714/39077e47/attachment-0001.html>
|     >
|     > ------------------------------
|     >
|     > _______________________________________________
|     > Rcpp-devel mailing list
|     > Rcpp-devel at lists.r-forge.r-project.org
|     > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
|     >
|     > End of Rcpp-devel Digest, Vol 57, Issue 18
|     > ******************************************
|    
| 
| 
|     --
|     Alessandro Mammana, PhD Student
|     Max Planck Institute for Molecular Genetics
|     Ihnestraße 63-73
|     D-14195 Berlin, Germany
|     _______________________________________________
|     Rcpp-devel mailing list
|     Rcpp-devel at lists.r-forge.r-project.org
|     https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
| 
| 
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

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


More information about the Rcpp-devel mailing list