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). Could I be on track, or way off base? 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 _______________________________________________ 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