Erin Hodgess
2016-Feb-27 20:30 UTC
[R] Using Fortran with MPI, RInside, and calling R functions
Sorry...thought it was ok since it uses RInside and Rcpp. On Sat, Feb 27, 2016 at 2:15 PM, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:> This is off topic here... wrong audience. Read the Posting Guide. > -- > Sent from my phone. Please excuse my brevity. > > On February 27, 2016 12:00:23 PM PST, Erin Hodgess < > erinm.hodgess at gmail.com> wrote: > >> Hello again. >> >> This time, I would like to add MPI to my Fortran program. Here are the >> Fortran and C++ codes: >> >> program buzzy >> use iso_c_binding >> implicit none >> include '/opt/openmpi/include/mpif.h' >> >> >> >> >> integer :: rank,size,ierror,tag,status(MPI_STATUS_SIZE), i,np >> integer :: argc = 1000000 >> real :: x,tot1 >> character(len=32) :: argv >> >> >> INTERFACE >> SUBROUTINE R_FUN(argc,argv) bind(C, name="buzzyC") >> use iso_c_binding >> character(kind=c_char), INTENT(INOUT) :: argv >> INTEGER(kind=c_int), INTENT(IN) :: argc >> >> END SUBROUTINE R_FUN >> END INTERFACE >> >> call MPI_INIT(ierror) >> call MPI_COMM_SIZE(MPI_COMM_WORLD,size,ierror) >> call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierror) >> >> >> >> >> print *, "Fortran Calling RInside",rank >> CALL >> R_FUN (argc,argv) >> print *,rank >> >> call MPI_FINALIZE(ierror) >> >> end program buzzy >> >> and >> >> #include <iostream> >> #include <RInside.h> >> >> void buzzyC_(int argc,char *argv[]); >> >> extern "C" void buzzyC(int argc,char *argv[]) { >> >> // create an embedded R instance >> RInside R(argc,argv); >> >> // convert to string for RInside assignment >> >> >> // eval the string, give R notice >> R.parseEvalQ("cat(mean(rnorm(argc))"); >> } >> >> Now my steps for compiling and linking are the following: >> >> erin at erin-Bonobo-Extreme:~$ mpif90 -c buzzy.f90 >> erin at erin-Bonobo-Extreme:~$ mpic++ buzzyC.cpp -c >> -I/home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/include >> -I/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include >> -I/usr/share/R/include -libstdc++ >> erin at erin-Bonobo-Extreme:~$ mpifort -o fcra buzzy.o buzzyC.o >> -L/usr/lib/R/lib -lR >> -L >> /home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib -lRInside >> -L/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/libs/ >> -Wl,-rpath,/home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib/ >> -lRInside >> -Wl,-rpath,/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/libs/ -lstdc++ >> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 >> >> So far so good >> But when I run this, disaster strikes: >> >> erin at erin-Bonobo-Extreme:~$ mpirun -np 4 ./fcra >> Fortran Calling RInside 0 >> Fortran Calling RInside 1 >> Fortran Calling RInside 3 >> Fortran Calling RInside 2 >> >> Program received signal SIGSEGV: Segmentation fault - invalid memory >> reference. >> >> Backtrace for this error: >> >> Program received signal SIGSEGV: Segmentation fault - invalid memory >> reference. >> >> Backtrace for this error: >> #0 0x7FC59706CE48 >> #1 0x7FC59706BFD0 >> #2 0x7FC596AA52EF >> #3 >> 0x7FC596AFB69A >> #4 0x7FC597C5E8E8 >> #5 0x7FC5979671E8 >> #6 0x7FC5979677A1 >> #7 0x402A55 in buzzyC >> #8 0x402891 in MAIN__ at buzzy.f90:? >> #0 0x7F2482294E48 >> #1 0x7F2482293FD0 >> #2 0x7F2481CCD2EF >> #3 0x7F2481D2369A >> #4 0x7F2482E868E8 >> #5 0x7F2482B8F1E8 >> #6 0x7F2482B8F7A1 >> #7 0x402A55 in buzzyC >> #8 0x402891 in MAIN__ at buzzy.f90:? >> ------------------------------ >> >> mpirun noticed that process rank 1 with PID 2188 on node >> erin-Bonobo-Extreme exited on signal 11 (Segmentation fault). >> ------------------------------ >> >> erin at erin-Bonobo-Extreme:~$ >> >> Maybe I should be asking: is this even possible, please? >> >> Thanks, >> Erin >> >>-- Erin Hodgess Associate Professor Department of Mathematical and Statistics University of Houston - Downtown mailto: erinm.hodgess at gmail.com [[alternative HTML version deleted]]
peter dalgaard
2016-Feb-27 20:39 UTC
[R] Using Fortran with MPI, RInside, and calling R functions
Yeah, well, not much harm done, but once compilers are involved, r-devel is usually preferred over r-help. -pd> On 27 Feb 2016, at 21:30 , Erin Hodgess <erinm.hodgess at gmail.com> wrote: > > Sorry...thought it was ok since it uses RInside and Rcpp. > > > On Sat, Feb 27, 2016 at 2:15 PM, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> > wrote: > >> This is off topic here... wrong audience. Read the Posting Guide. >> -- >> Sent from my phone. Please excuse my brevity. >> >> On February 27, 2016 12:00:23 PM PST, Erin Hodgess < >> erinm.hodgess at gmail.com> wrote: >> >>> Hello again. >>> >>> This time, I would like to add MPI to my Fortran program. Here are the >>> Fortran and C++ codes: >>> >>> program buzzy >>> use iso_c_binding >>> implicit none >>> include '/opt/openmpi/include/mpif.h' >>> >>> >>> >>> >>> integer :: rank,size,ierror,tag,status(MPI_STATUS_SIZE), i,np >>> integer :: argc = 1000000 >>> real :: x,tot1 >>> character(len=32) :: argv >>> >>> >>> INTERFACE >>> SUBROUTINE R_FUN(argc,argv) bind(C, name="buzzyC") >>> use iso_c_binding >>> character(kind=c_char), INTENT(INOUT) :: argv >>> INTEGER(kind=c_int), INTENT(IN) :: argc >>> >>> END SUBROUTINE R_FUN >>> END INTERFACE >>> >>> call MPI_INIT(ierror) >>> call MPI_COMM_SIZE(MPI_COMM_WORLD,size,ierror) >>> call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierror) >>> >>> >>> >>> >>> print *, "Fortran Calling RInside",rank >>> CALL >>> R_FUN (argc,argv) >>> print *,rank >>> >>> call MPI_FINALIZE(ierror) >>> >>> end program buzzy >>> >>> and >>> >>> #include <iostream> >>> #include <RInside.h> >>> >>> void buzzyC_(int argc,char *argv[]); >>> >>> extern "C" void buzzyC(int argc,char *argv[]) { >>> >>> // create an embedded R instance >>> RInside R(argc,argv); >>> >>> // convert to string for RInside assignment >>> >>> >>> // eval the string, give R notice >>> R.parseEvalQ("cat(mean(rnorm(argc))"); >>> } >>> >>> Now my steps for compiling and linking are the following: >>> >>> erin at erin-Bonobo-Extreme:~$ mpif90 -c buzzy.f90 >>> erin at erin-Bonobo-Extreme:~$ mpic++ buzzyC.cpp -c >>> -I/home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/include >>> -I/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include >>> -I/usr/share/R/include -libstdc++ >>> erin at erin-Bonobo-Extreme:~$ mpifort -o fcra buzzy.o buzzyC.o >>> -L/usr/lib/R/lib -lR >>> -L >>> /home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib -lRInside >>> -L/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/libs/ >>> -Wl,-rpath,/home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib/ >>> -lRInside >>> -Wl,-rpath,/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/libs/ -lstdc++ >>> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 >>> >>> So far so good >>> But when I run this, disaster strikes: >>> >>> erin at erin-Bonobo-Extreme:~$ mpirun -np 4 ./fcra >>> Fortran Calling RInside 0 >>> Fortran Calling RInside 1 >>> Fortran Calling RInside 3 >>> Fortran Calling RInside 2 >>> >>> Program received signal SIGSEGV: Segmentation fault - invalid memory >>> reference. >>> >>> Backtrace for this error: >>> >>> Program received signal SIGSEGV: Segmentation fault - invalid memory >>> reference. >>> >>> Backtrace for this error: >>> #0 0x7FC59706CE48 >>> #1 0x7FC59706BFD0 >>> #2 0x7FC596AA52EF >>> #3 >>> 0x7FC596AFB69A >>> #4 0x7FC597C5E8E8 >>> #5 0x7FC5979671E8 >>> #6 0x7FC5979677A1 >>> #7 0x402A55 in buzzyC >>> #8 0x402891 in MAIN__ at buzzy.f90:? >>> #0 0x7F2482294E48 >>> #1 0x7F2482293FD0 >>> #2 0x7F2481CCD2EF >>> #3 0x7F2481D2369A >>> #4 0x7F2482E868E8 >>> #5 0x7F2482B8F1E8 >>> #6 0x7F2482B8F7A1 >>> #7 0x402A55 in buzzyC >>> #8 0x402891 in MAIN__ at buzzy.f90:? >>> ------------------------------ >>> >>> mpirun noticed that process rank 1 with PID 2188 on node >>> erin-Bonobo-Extreme exited on signal 11 (Segmentation fault). >>> ------------------------------ >>> >>> erin at erin-Bonobo-Extreme:~$ >>> >>> Maybe I should be asking: is this even possible, please? >>> >>> Thanks, >>> Erin >>> >>> > > > -- > Erin Hodgess > Associate Professor > Department of Mathematical and Statistics > University of Houston - Downtown > mailto: erinm.hodgess at gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
Erin Hodgess
2016-Feb-27 20:40 UTC
[R] Using Fortran with MPI, RInside, and calling R functions
Got it. thanks. On Sat, Feb 27, 2016 at 2:39 PM, peter dalgaard <pdalgd at gmail.com> wrote:> Yeah, well, not much harm done, but once compilers are involved, r-devel > is usually preferred over r-help. > > -pd > > > On 27 Feb 2016, at 21:30 , Erin Hodgess <erinm.hodgess at gmail.com> wrote: > > > > Sorry...thought it was ok since it uses RInside and Rcpp. > > > > > > On Sat, Feb 27, 2016 at 2:15 PM, Jeff Newmiller < > jdnewmil at dcn.davis.ca.us> > > wrote: > > > >> This is off topic here... wrong audience. Read the Posting Guide. > >> -- > >> Sent from my phone. Please excuse my brevity. > >> > >> On February 27, 2016 12:00:23 PM PST, Erin Hodgess < > >> erinm.hodgess at gmail.com> wrote: > >> > >>> Hello again. > >>> > >>> This time, I would like to add MPI to my Fortran program. Here are the > >>> Fortran and C++ codes: > >>> > >>> program buzzy > >>> use iso_c_binding > >>> implicit none > >>> include '/opt/openmpi/include/mpif.h' > >>> > >>> > >>> > >>> > >>> integer :: rank,size,ierror,tag,status(MPI_STATUS_SIZE), i,np > >>> integer :: argc = 1000000 > >>> real :: x,tot1 > >>> character(len=32) :: argv > >>> > >>> > >>> INTERFACE > >>> SUBROUTINE R_FUN(argc,argv) bind(C, name="buzzyC") > >>> use iso_c_binding > >>> character(kind=c_char), INTENT(INOUT) :: argv > >>> INTEGER(kind=c_int), INTENT(IN) :: argc > >>> > >>> END SUBROUTINE R_FUN > >>> END INTERFACE > >>> > >>> call MPI_INIT(ierror) > >>> call MPI_COMM_SIZE(MPI_COMM_WORLD,size,ierror) > >>> call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierror) > >>> > >>> > >>> > >>> > >>> print *, "Fortran Calling RInside",rank > >>> CALL > >>> R_FUN (argc,argv) > >>> print *,rank > >>> > >>> call MPI_FINALIZE(ierror) > >>> > >>> end program buzzy > >>> > >>> and > >>> > >>> #include <iostream> > >>> #include <RInside.h> > >>> > >>> void buzzyC_(int argc,char *argv[]); > >>> > >>> extern "C" void buzzyC(int argc,char *argv[]) { > >>> > >>> // create an embedded R instance > >>> RInside R(argc,argv); > >>> > >>> // convert to string for RInside assignment > >>> > >>> > >>> // eval the string, give R notice > >>> R.parseEvalQ("cat(mean(rnorm(argc))"); > >>> } > >>> > >>> Now my steps for compiling and linking are the following: > >>> > >>> erin at erin-Bonobo-Extreme:~$ mpif90 -c buzzy.f90 > >>> erin at erin-Bonobo-Extreme:~$ mpic++ buzzyC.cpp -c > >>> -I/home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/include > >>> -I/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include > >>> -I/usr/share/R/include -libstdc++ > >>> erin at erin-Bonobo-Extreme:~$ mpifort -o fcra buzzy.o buzzyC.o > >>> -L/usr/lib/R/lib -lR > >>> -L > >>> /home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib -lRInside > >>> -L/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/libs/ > >>> -Wl,-rpath,/home/erin/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib/ > >>> -lRInside > >>> -Wl,-rpath,/home/erin/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/libs/ > -lstdc++ > >>> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 > >>> > >>> So far so good > >>> But when I run this, disaster strikes: > >>> > >>> erin at erin-Bonobo-Extreme:~$ mpirun -np 4 ./fcra > >>> Fortran Calling RInside 0 > >>> Fortran Calling RInside 1 > >>> Fortran Calling RInside 3 > >>> Fortran Calling RInside 2 > >>> > >>> Program received signal SIGSEGV: Segmentation fault - invalid memory > >>> reference. > >>> > >>> Backtrace for this error: > >>> > >>> Program received signal SIGSEGV: Segmentation fault - invalid memory > >>> reference. > >>> > >>> Backtrace for this error: > >>> #0 0x7FC59706CE48 > >>> #1 0x7FC59706BFD0 > >>> #2 0x7FC596AA52EF > >>> #3 > >>> 0x7FC596AFB69A > >>> #4 0x7FC597C5E8E8 > >>> #5 0x7FC5979671E8 > >>> #6 0x7FC5979677A1 > >>> #7 0x402A55 in buzzyC > >>> #8 0x402891 in MAIN__ at buzzy.f90:? > >>> #0 0x7F2482294E48 > >>> #1 0x7F2482293FD0 > >>> #2 0x7F2481CCD2EF > >>> #3 0x7F2481D2369A > >>> #4 0x7F2482E868E8 > >>> #5 0x7F2482B8F1E8 > >>> #6 0x7F2482B8F7A1 > >>> #7 0x402A55 in buzzyC > >>> #8 0x402891 in MAIN__ at buzzy.f90:? > >>> ------------------------------ > >>> > >>> mpirun noticed that process rank 1 with PID 2188 on node > >>> erin-Bonobo-Extreme exited on signal 11 (Segmentation fault). > >>> ------------------------------ > >>> > >>> erin at erin-Bonobo-Extreme:~$ > >>> > >>> Maybe I should be asking: is this even possible, please? > >>> > >>> Thanks, > >>> Erin > >>> > >>> > > > > > > -- > > Erin Hodgess > > Associate Professor > > Department of Mathematical and Statistics > > University of Houston - Downtown > > mailto: erinm.hodgess at gmail.com > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > > -- > Peter Dalgaard, Professor, > Center for Statistics, Copenhagen Business School > Solbjerg Plads 3, 2000 Frederiksberg, Denmark > Phone: (+45)38153501 > Office: A 4.23 > Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com > > > > > > > > > >-- Erin Hodgess Associate Professor Department of Mathematical and Statistics University of Houston - Downtown mailto: erinm.hodgess at gmail.com [[alternative HTML version deleted]]