Dirk:

I've been able to upgrade my compiler to g++ 4.6 on the Mac, and I also checked 
this on a Red Hat Linux system with g++ 4.4.  In both cases, the OpenMP code 
does compile and run, so I agree that it must have been a compiler issue.  
However, 4.6 appears to be an experimental version, with some odd quirks (like 
not recognizing the -arch option).  I was able to find only a binary for 4.6, 
and compiling 4.5 takes a very, very long time.  So I'm wondering if you could 
suggest a source for a binary of a stable version of gcc for the Mac, or 
possibly suggest a way that Rcpp could run under the compiler that ships with 
Snow Leopard.

I'll start another thread for the second issue, about the compiler not being 
able to compile one of the Rcpp-sugar examples, since it is still unsolved and 
unrelated.

Thanks again.

Michael



On Mar 24, 2011, at 6:15 PM, Dirk Eddelbuettel wrote:

> 
> 
> On 24 March 2011 at 17:50, Michael Braun wrote:
> | Dirk:
> | 
> | This does work when I use the Intel compiler, so perhaps you are right.  I 
> am, however, using the standard Apple-provided version, which is 4.2.1. 
> | 
> | I suspect there is a related issue in how OpenMP handles private Rcpp 
> objects in a parallel section.  For example, if I declare
> | 
> | NumericVector X;
> | 
> | #pragma omp parallel (private X)
> | {
> | #pragma omp for
> | for (i=0; i<n; i++) {
> |     // some code that uses X
> | 
> | }
> | }
> | 
> | then I would have thought that the compiler would create an instance of X 
> for each thread.  Instead, I am getting memory segfaults even with the Intel 
> compiler, and I wonder if these two issues are related (i.e., perhaps the 
> compielr doesn't know what to do with code like this, and hence the error).
> 
> There should never be a segfault.  Even is copies are made (which would be
> shallow, deep copies require clone) I fail to see how that would great out of
> bounds access.  Maybe there are other issue with the Intel compiler and Rcpp 
> so
> maybe you could try a full 'R CMD check Rcpp_0.9.2.tar.gz' for it?
> 
> | Could I be on track, or way off base?
> 
> I don't not know but fear the latter.  Anyway, as I had already compiled your
> example earlier (as shown in the quoted text below):
> 
> edd@max:/tmp$ cat michael.cpp 
> 
> #include <Rcpp.h>
> 
> RcppExport SEXP omptest (SEXP X) {
> 
>  BEGIN_RCPP
> 
> Rcpp::NumericVector Y = X;
> int n = Y.size();
> Rcpp::NumericVector Z(n);
> int i;
> double a;
> 
> #pragma omp parallel
> {
> #pragma omp for
> for (i=0; i<n; i++) {
>   a = sqrt(Y(i));
>   Z(i) = a;
> }
> }
> return Z;
> 
> END_RCPP
> 
> }
> edd@max:/tmp$ R --quiet
> R> dyn.load("michael.so")
> R> .Call("omptest", 1:10)
> [1] 1.00000 1.41421 2.64575 2.00000 2.64575 2.44949 2.64575 2.82843 3.00000 
> 3.16228
> R> q()
> Save workspace image? [y/n/c]: n
> edd@max:/tmp$ 
> 
> So still no issue here....
> 
> Dirk
> 
> | 
> | Thanks,
> | 
> | Michael
> | 
> | 
> | 
> | 
> | On Mar 24, 2011, at 1:03 PM, Dirk Eddelbuettel wrote:
> | 
> | > 
> | > Michael,
> | > 
> | > As a quick off-the-cuff remark, I suspect it is your compiler. I have done
> | > quite a few builds with OpenMP when experimenting with a parallel version 
> of
> | > RcppDE (the differential evolution optimisation I "ported" from C to
> | > C++/Rcpp).  I had no issues building this (but issues getting replicable
> | > streams going which is still unsolved though I have some tests working).
> | > 
> | > The incomplete RcppParDE fragment is actually in Rcpp's SVN and there I
> | > simply do 
> | > 
> | > ## Hey Emacs make this a -*- mode: makefile; -*- file 
> | > ##
> | > ## -- compiling for OpenMP 
> | > PKG_CXXFLAGS=-fopenmp
> | > ##
> | > ## -- linking for OpenMP
> | > #PKG_LIBS= -fopenmp -lgomp $(shell $(R_HOME)/bin/Rscript -e 
> "Rcpp:::LdFlags()") $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
> | > ##
> | > ## -- linking for OpenMP and Google Perftools profiling
> | > PKG_LIBS= -fopenmp -lgomp $(shell $(R_HOME)/bin/Rscript -e 
> "Rcpp:::LdFlags()") $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -lprofiler
> | > 
> | > and that is all it takes to deploy OpenMP with R and Rcpp on my Linux box:
> | > 
> | > edd@max:~/svn/rcpp/pkg/RcppParDE$ R CMD INSTALL .
> | > * installing to library ‘/usr/local/lib/R/site-library’
> | > * installing *source* package ‘RcppParDE’ ...
> | > ** libs
> | > ccache g++ -I/usr/share/R/include   
> -I"/usr/local/lib/R/site-library/Rcpp/include" 
> -I"/usr/local/lib/R/site-library/RcppArmadillo/include"  -fopenmp -fpic  -g 
> -O3 -Wall -pipe -pedantic -Wno-variadic-macros  -c deoptim.cpp -o deoptim.o
> | > ccache g++ -I/usr/share/R/include   
> -I"/usr/local/lib/R/site-library/Rcpp/include" 
> -I"/usr/local/lib/R/site-library/RcppArmadillo/include"  -fopenmp -fpic  -g 
> -O3 -Wall -pipe -pedantic -Wno-variadic-macros  -c devol.cpp -o devol.o
> | > ccache g++ -I/usr/share/R/include   
> -I"/usr/local/lib/R/site-library/Rcpp/include" 
> -I"/usr/local/lib/R/site-library/RcppArmadillo/include"  -fopenmp -fpic  -g 
> -O3 -Wall -pipe -pedantic -Wno-variadic-macros  -c permute.cpp -o permute.o
> | > g++ -shared -o RcppParDE.so deoptim.o devol.o permute.o -fopenmp -lgomp 
> -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp 
> -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -llapack -lblas -lgfortran 
> -lm -lprofiler -L/usr/lib64/R/lib -lR
> | > installing to /usr/local/lib/R/site-library/RcppParDE/libs
> | > ** R
> | > ** preparing package for lazy loading
> | > ** help
> | > *** installing help indices
> | > ** building package indices ...
> | > ** testing if installed package can be loaded
> | > 
> | > * DONE (RcppParDE)
> | > edd@max:~/svn/rcpp/pkg/RcppParDE$ 
> | > 
> | > Now this packages has run-time issue, and my recent test code is 
> somewhere so
> | > take the package for a working package -- but it does prove that OpenMP 
> can
> | > easily be thrown in the mix on suitable systems.
> | > 
> | > And what "suitable systems" are is an open question. We know Rtools for
> | > Windows does not include the libgomp library needed.  Maybe OS X is not
> | > suitable either in that version?
> | > 
> | > Your file certainly builds here:
> | > 
> | > edd@max:/tmp$ cat michael.cpp 
> | > 
> | > #include <Rcpp.h>
> | > 
> | > RcppExport SEXP omptest (SEXP X) {
> | > 
> | >  BEGIN_RCPP
> | > 
> | > Rcpp::NumericVector Y = X;
> | > int n = Y.size();
> | > Rcpp::NumericVector Z(n);
> | > int i;
> | > double a;
> | > 
> | > #pragma omp parallel
> | > {
> | > #pragma omp for
> | > for (i=0; i<n; i++) {
> | >   a = sqrt(Y(i));
> | >   Z(i) = a;
> | > }
> | > }
> | > return Z;
> | > 
> | > END_RCPP
> | > 
> | > }
> | > edd@max:/tmp$ PKG_LIBS="-fopenmp -lgomp 
> -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp 
> -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -llapack -lblas -lgfortran 
> -lm -L/usr/lib64/R/lib -lR" PKG_CXXFLAGS="-I/usr/share/R/include   
> -I"/usr/local/lib/R/site-library/Rcpp/include" 
> -I"/usr/local/lib/R/site-library/RcppArmadillo/include"  -fopenmp -fpic  -g 
> -O3 -Wall -pipe -pedantic" R CMD SHLIB michael.cpp
> | > ccache g++ -I/usr/share/R/include     -I/usr/share/R/include   
> -I/usr/local/lib/R/site-library/Rcpp/include 
> -I/usr/local/lib/R/site-library/RcppArmadillo/include  -fopenmp -fpic  -g -O3 
> -Wall -pipe -pedantic -fpic  -g -O3 -Wall -pipe -pedantic 
> -Wno-variadic-macros  -c michael.cpp -o michael.o
> | > g++ -shared -o michael.so michael.o -fopenmp -lgomp 
> -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp 
> -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -llapack -lblas -lgfortran 
> -lm -L/usr/lib64/R/lib -lR -L/usr/lib64/R/lib -lR
> | > edd@max:/tmp$ 
> | > 
> | > I am using g++ 4.4 (and sometimes 4.5), current R 2.12.2, current Rcpp 
> 0.9.2.
> | > 
> | > Regards, Dirk
> | > 
> | > 
> | > 
> | > 
> | > -- 
> | > Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com
> | 
> | -------------------------------------------
> | Michael Braun
> | Homer A. Burnell (1928) Career Development Professor, 
> |     and Assistant Professor of Management Science (Marketing Group)
> | MIT Sloan School of Management
> | 100 Main St.., E62-535
> | Cambridge, MA 02139
> | bra...@mit.edu
> | 617-253-3436
> | 
> | 
> 
> -- 
> Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com

-------------------------------------------
Michael Braun
Homer A. Burnell (1928) Career Development Professor, 
        and Assistant Professor of Management Science (Marketing Group)
MIT Sloan School of Management
100 Main St.., E62-535
Cambridge, MA 02139
bra...@mit.edu
617-253-3436



Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
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

Reply via email to