Hi Michael, On 6 April 2011 at 22:49, Michael Braun wrote: | 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.
Sorry, I would like to help but as I am not an OS X user (or even in a position to access an OS X machine) I have to refer you to Romain or maybe Simon and r-sig-mac. You choose your development platform, so you need to sort out how you to get your ducks in a row. It all works trivially well on Linux so maybe you can consider VirtualBox or Parallels for your Mac, or else access another machine on campus. For what it is worth, g++ 4.6.1 works perfectly fine on (Debian) Linux (which is why CRAN already uses it for tests on the incoming/ directory) but g++ 4.4 is still the default on Ubuntu 10.10. It will be a while til 4.6 becomes the default. | 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. Absolutely. If there are issues, we want to know them. Small replicable examples are best. Cheers, Dirk | 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 | | | | xapplication/pkcs7-signatu [Click mouse-2 to save to a file] -- Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com _______________________________________________ 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