[petsc-users] MPI_FILE_OPEN in PETSc crashes

Danyang Su danyang.su at gmail.com
Fri Sep 12 16:09:12 CDT 2014


On 12/09/2014 12:10 PM, Barry Smith wrote:
> On Sep 12, 2014, at 1:34 PM, Danyang Su <danyang.su at gmail.com> wrote:
>
>> Hi There,
>>
>> I have some parallel mpi output codes that works fine without PETSc but crashes when compiled with PETSc. To make the problem easy, I test the following example which has the same problem. This example is modified form http://www.mcs.anl.gov/research/projects/mpi/usingmpi2/examples/starting/io3f_f90.htm. It works without PETSc but if I comment out "use mpi" and add PETSc include, it crashes at MPI_FILE_OPEN because of access violation.
>    You should not comment out use mpi; you need that to use the MPI calls you are making!
>
>    You absolutely should have an implicit none at the beginning of your program so the Fortran compiler reports undeclared variables
Done
>
>> Shall I rewrite all the MPI Parallel output with PetscBinaryOpen or PetscViewerBinaryOpen relative functions?
>     No.  You should be able to use the MPI IO with PETSc code.
>
>     First figure out how to get the example working with the use mpi  PLUS petsc include files.
The problem is there is a lot of name conflict if both "use mpi" and 
"petsc include" are included. I will consider rewrite these routines.
>
>    Let us know if you have any problems ASAP
>
>     Barry
>
>> Considering the parallel I/O efficiency, which is more preferable?
>>
>> Thanks and regards,
>>
>> Danyang
>>
>> PROGRAM main
>>      ! Fortran 90 users can (and should) use
>>      !use mpi
>>      ! instead of include 'mpif.h' if their MPI implementation provides a
>>      ! mpi module.
>>      !include 'mpif.h'
>>      
>>      !For PETSc, use the following "include"s
>> #include <finclude/petscsys.h>
>> #include <finclude/petscviewer.h>
>> #include <finclude/petscviewer.h90>
>>      integer ierr, i, myrank, BUFSIZE, thefile
>>      parameter (BUFSIZE=10)
>>      integer buf(BUFSIZE)
>>      integer(kind=MPI_OFFSET_KIND) disp
>>   
>>      call MPI_INIT(ierr)
>>      call MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierr)
>>   
>>      do i = 1, BUFSIZE
>>          buf(i) = myrank * BUFSIZE + i
>>      enddo
>>      
>>      write(*,'(a,1x,i6,1x,a,1x,10(i6,1x))') "myrank", myrank, "buf",buf
>>      
>>      call MPI_FILE_OPEN(MPI_COMM_WORLD, 'testfile.txt', &
>>                         MPI_MODE_CREATE + MPI_MODE_WRONLY, &
>>                         MPI_INFO_NULL, thefile, ierr)
>>      ! assume 4-byte integers
>>      disp = myrank * BUFSIZE * 4
>>      
>>      !Use the following two functions
>>      !call MPI_FILE_SET_VIEW(thefile, disp, MPI_INTEGER, &
>>      !                       MPI_INTEGER, 'native', &
>>      !                       MPI_INFO_NULL, ierr)
>>      !call MPI_FILE_WRITE(thefile, buf, BUFSIZE, MPI_INTEGER, &
>>      !                    MPI_STATUS_IGNORE, ierr)
>>      
>>      !Or use the following one function
>>      call MPI_FILE_WRITE_AT(thefile, disp, buf, BUFSIZE, MPI_INTEGER, &
>>                          MPI_STATUS_IGNORE, ierr)
>>      
>>      call MPI_FILE_CLOSE(thefile, ierr)
>>      call MPI_FINALIZE(ierr)
>>   
>> END PROGRAM main



More information about the petsc-users mailing list