[R] Using Fortran with MPI, RInside, and calling R functions

Erin Hodgess erinm.hodgess at gmail.com
Sat Feb 27 21:40:27 CET 2016


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]]



More information about the R-help mailing list