<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic mvapich2 and ifort: bug? in Intel® MPI Library</title>
    <link>https://community.intel.com/t5/Intel-MPI-Library/mvapich2-and-ifort-bug/m-p/860958#M1612</link>
    <description>Hello Intel&lt;BR /&gt;&lt;BR /&gt;I have found a strange bug in MVAPICH2 using IFORT. The behavior is
very strange indeed - it seems to be related to how ifort deals with
passing pointers to the MVAPICH FORTRAN 90 INTERFACE.&lt;BR /&gt;The MPI call returns successfully, but later calls to a dummy subroutine cause a sigsev.
&lt;BR /&gt;&lt;BR /&gt;Please look at the following code - sorry if the post caused formatting issues, I don't have permission to attach the file.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
! TEST CODE TO FOR POSSIBLE BUG IN MVAPICH2 COMPILED ON IFORT&lt;BR /&gt;
! WRITEN BY: DAVID STUEBE&lt;BR /&gt;! DATE: JAN 23, 2008&lt;BR /&gt;
! &lt;BR /&gt;
! COMPILE WITH: mpif90 -xP mpi_prog.f90 -o xtest&lt;BR /&gt;
!&lt;BR /&gt;
! KNOWN BEHAVIOR:&lt;BR /&gt;
! PASSING A NONE CONTIGUOUS POINTER TO MPI_BCAST CAUSES FAILURE OF&lt;BR /&gt;
! SUBROUTINES USING MULTI DIMENSIONAL EXPLICT SHAPE ARRAYS WITHOUT AN INTERFACE -&lt;BR /&gt;
! EVEN THOUGH THE MPI_BCAST COMPLETES SUCCESUFULLY, RETURNING VALID DATA.&lt;BR /&gt;
!&lt;BR /&gt;
! COMMENTS:&lt;BR /&gt;
! I REALIZE PASSING NON CONTIGUOUS POINTERS IS DANGEROUS - SHAME ON&lt;BR /&gt;
! ME FOR MAKING THAT MISTAKE. HOWEVER, IT SHOULD EITHER WORK OR NOT.&lt;BR /&gt;
! RETURNING SUCCESSFULLY BUT CAUSING INTERFACE ERRORS LATER IS&lt;BR /&gt;
! EXTREMELY DIFFICULT TO DEBUG!&lt;BR /&gt;
!&lt;BR /&gt;
! CONDITIONS FOR OCCURANCE: &lt;BR /&gt;
! COMPILER MUST OPTIMIZE USING 'VECTORIZATION'&lt;BR /&gt;
! ARRAY MUST BE 'LARGE' -SYSTEM DEPENDENT ?&lt;BR /&gt;
! MUST BE RUN ON MORE THAN ONE NODE TO CAUSE CRASH...&lt;BR /&gt;
! ie Running inside one SMP box does not crash.&lt;BR /&gt;
!&lt;BR /&gt;
! RUNNING UNDER MPD, ALL PROCESSES EXIT WHEN THEY HIT DUMMY2&lt;BR /&gt;
! RUNNING UNDER MPIEXEC0.82 FOR PBS, &lt;BR /&gt;
! ONLY SOME PROCESSES EXIT WHEN THEY HIT DUMMY2&lt;BR /&gt;
!&lt;BR /&gt;
! ENVIRONMENTAL INFO:&lt;BR /&gt;
! NODES: DELL 1850 3.0GHZ, 2GB RAM, INFINIBAND PCI-EX 4X&lt;BR /&gt;
! SYSTEM: ROCKS 4.2&lt;BR /&gt;
! gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)&lt;BR /&gt;
!&lt;BR /&gt;
! IFORT/ICC:&lt;BR /&gt;
! Intel Fortran Compiler for Intel EM64T-based applications,&lt;BR /&gt;
! Version 9.1 Build 20061101 Package ID: l_fc_c_9.1.040&lt;BR /&gt;
!&lt;BR /&gt;
! MVAPICH2: mpif90 for mvapich2-1.0&lt;BR /&gt;
! ./configure --prefix=/usr/local/share/mvapich2/1.0
--with-device=osu_ch3:mrail --with-rdma=vapi --with-pm=mpd --enable-f90
--enable-cxx --disable-romio --without-mpe&lt;BR /&gt;
!&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
&lt;BR /&gt;
Module vars&lt;BR /&gt;
 USE MPI&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 &lt;BR /&gt;
&lt;BR /&gt;
 integer :: n,m,MYID,NPROCS&lt;BR /&gt;
 integer :: ipt&lt;BR /&gt;
&lt;BR /&gt;
 integer, allocatable, target :: data(:,:)&lt;BR /&gt;
&lt;BR /&gt;
 contains&lt;BR /&gt;
&lt;BR /&gt;
 subroutine alloc_vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 &lt;BR /&gt;
 integer Status&lt;BR /&gt;
&lt;BR /&gt;
 allocate(data(n,m),stat=status)&lt;BR /&gt;
 if (status /=0) then&lt;BR /&gt;
 write(ipt,*) "alloc
ation error"&lt;BR /&gt;
 stop&lt;BR /&gt;
 end if&lt;BR /&gt;
&lt;BR /&gt;
 data = 0&lt;BR /&gt;
&lt;BR /&gt;
 end subroutine alloc_vars&lt;BR /&gt;
&lt;BR /&gt;
 SUBROUTINE INIT_MPI_ENV(ID,NP) &lt;BR /&gt;
!===================================================================================|&lt;BR /&gt;
! INITIALIZE MPI ENVIRONMENT |&lt;BR /&gt;
!===================================================================================|&lt;BR /&gt;
 INTEGER, INTENT(OUT) :: ID,NP&lt;BR /&gt;
 INTEGER IERR&lt;BR /&gt;
 &lt;BR /&gt;
 IERR=0&lt;BR /&gt;
 &lt;BR /&gt;
 CALL MPI_INIT(IERR)&lt;BR /&gt;
 IF(IERR/=0) WRITE(*,*) "BAD MPI_INIT", ID&lt;BR /&gt;
 CALL MPI_COMM_RANK(MPI_COMM_WORLD,ID,IERR)&lt;BR /&gt;
 IF(IERR/=0) WRITE(*,*) "BAD MPI_COMM_RANK", ID&lt;BR /&gt;
 CALL MPI_COMM_SIZE(MPI_COMM_WORLD,NP,IERR)&lt;BR /&gt;
 IF(IERR/=0) WRITE(*,*) "BAD MPI_COMM_SIZE", ID&lt;BR /&gt;
&lt;BR /&gt;
 END SUBROUTINE INIT_MPI_ENV&lt;BR /&gt;
&lt;BR /&gt;
 !==============================================================================|&lt;BR /&gt;
 SUBROUTINE PSHUTDOWN &lt;BR /&gt;
 !==============================================================================|&lt;BR /&gt;
 INTEGER IERR&lt;BR /&gt;
&lt;BR /&gt;
 IERR=0&lt;BR /&gt;
 CALL MPI_FINALIZE(IERR)&lt;BR /&gt;
 if(ierr /=0) write(ipt,*) "BAD MPI_FINALIZE", MYID&lt;BR /&gt;
 close(IPT)&lt;BR /&gt;
 STOP&lt;BR /&gt;
&lt;BR /&gt;
 END SUBROUTINE PSHUTDOWN&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 SUBROUTINE CONTIGUOUS_WORKS&lt;BR /&gt;
 IMPLICIT NONE&lt;BR /&gt;
 INTEGER, pointer :: ptest(:,:)&lt;BR /&gt;
 INTEGER :: IERR, I,J&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "START CONTIGUOUS:"&lt;BR /&gt;
 n=2000 ! Set size here&lt;BR /&gt;
 m=n+10&lt;BR /&gt;
 &lt;BR /&gt;
 call alloc_vars &lt;BR /&gt;
 write(ipt,*) "ALLOCATED DATA"&lt;BR /&gt;
 ptest =&amp;gt; data(1:N,1:N)&lt;BR /&gt;
 &lt;BR /&gt;
 IF (MYID == 0) ptest=6 &lt;BR /&gt;
 write(ipt,*) "Made POINTER"&lt;BR /&gt;
 &lt;BR /&gt;
 call MPI_BCAST(ptest,N*N,MPI_INTEGER,0,MPI_COMM_WORLD,IERR)&lt;BR /&gt;
 IF(IERR /= 0) WRITE(IPT,*) "BAD BCAST", MYID&lt;BR /&gt;
 &lt;BR /&gt;
 write(ipt,*) "BROADCAST Data; a value:",data(1,6)&lt;BR /&gt;
 &lt;BR /&gt;
 DO I = 1,N&lt;BR /&gt;
 DO J = 1,N&lt;BR /&gt;
 if(data(I,J) /= 6) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!", I,J,data(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
&amp;amp;n
bsp; &lt;BR /&gt;
 DO J = N+1,M&lt;BR /&gt;
 if(data(I,J) /= 0) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!", I,J,data(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 ! CALL THREE DIFFERENT EXAMPLES OF SUBROUTINES W/OUT AN ITERFACE&lt;BR /&gt;
 ! THAT USE AN EXPLICIT SHAPE ARRAY&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY1"&lt;BR /&gt;
 CALL DUMMY1&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY2"&lt;BR /&gt;
 call Dummy2(m,n)&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY3"&lt;BR /&gt;
 call Dummy3&lt;BR /&gt;
 write(ipt,*) "FINISHED!"&lt;BR /&gt;
 &lt;BR /&gt;
 END SUBROUTINE CONTIGUOUS_WORKS&lt;BR /&gt;
&lt;BR /&gt;
 SUBROUTINE NON_CONTIGUOUS_FAILS&lt;BR /&gt;
 IMPLICIT NONE&lt;BR /&gt;
 INTEGER, pointer :: ptest(:,:)&lt;BR /&gt;
 INTEGER :: IERR, I,J&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "START NON_CONTIGUOUS:"&lt;BR /&gt;
&lt;BR /&gt;
 m=200 ! Set size here&lt;BR /&gt;
 n=m+10&lt;BR /&gt;
 &lt;BR /&gt;
 call alloc_vars &lt;BR /&gt;
 write(ipt,*) "ALLOCATED DATA"&lt;BR /&gt;
 ptest =&amp;gt; data(1:M,1:M)&lt;BR /&gt;
 &lt;BR /&gt;
!===================================================&lt;BR /&gt;
! IF YOU CALL DUMMY2 HERE TOO, THEN EVERYTHING PASSES ???&lt;BR /&gt;
!===================================================&lt;BR /&gt;
! CALL DUMMY1 ! THIS ONE HAS NO EFFECT&lt;BR /&gt;
! CALL DUMMY2 ! THIS ONE 'FIXES' THE BUG&lt;BR /&gt;
&lt;BR /&gt;
 IF (MYID == 0) ptest=6 &lt;BR /&gt;
 write(ipt,*) "Made POINTER"&lt;BR /&gt;
 &lt;BR /&gt;
 call MPI_BCAST(ptest,M*M,MPI_INTEGER,0,MPI_COMM_WORLD,IERR)&lt;BR /&gt;
 IF(IERR /= 0) WRITE(IPT,*) "BAD BCAST"&lt;BR /&gt;
 &lt;BR /&gt;
 write(ipt,*) "BROADCAST Data; a value:",data(1,6)&lt;BR /&gt;
 &lt;BR /&gt;
 DO I = 1,M&lt;BR /&gt;
 DO J = 1,M&lt;BR /&gt;
 if(data(J,I) /= 6) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!",I,J,DATA(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 DO J = M+1,N&lt;BR /&gt;
 if(data(J,I) /= 0) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!",I,J,DATA(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 ! CALL THREE DIFFERENT EXAMPLES OF SUBROUTINES W/OUT AN ITERFACE&lt;BR /&gt;
 ! THAT USE AN EXPLICIT SHAPE ARRAY&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY1"&lt;BR /&gt;
 CALL DUMMY1&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY2" &lt;BR /&gt;
 call Dummy2(m,n) ! SHOULD CRASH HERE!&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY3"&lt;BR /&gt;
 call Dummy3&lt;BR /&gt;
 write(ipt,*) "FINISHED!"&lt;BR /&gt;
&lt;BR /&gt;

 END SUBROUTINE NON_CONTIGUOUS_FAILS&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 End Module vars&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Program main&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 CALL INIT_MPI_ENV(MYID,NPROCS) &lt;BR /&gt;
 &lt;BR /&gt;
 ipt=myid+10&lt;BR /&gt;
 OPEN(ipt)&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "Start memory test!"&lt;BR /&gt;
&lt;BR /&gt;
 CALL NON_CONTIGUOUS_FAILS&lt;BR /&gt;
&lt;BR /&gt;
! CALL CONTIGUOUS_WORKS&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "End memory test!"&lt;BR /&gt;
 &lt;BR /&gt;
 CALL PSHUTDOWN&lt;BR /&gt;
&lt;BR /&gt;
END Program main&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
! TWO DUMMY SUBROUTINE WITH EXPLICIT SHAPE ARRAYS&lt;BR /&gt;
! DUMMY1 DECLARES A VECTOR - THIS ONE NEVER CAUSES FAILURE&lt;BR /&gt;
! DUMMY2 DECLARES AN ARRAY - THIS ONE CAUSES FAILURE&lt;BR /&gt;
&lt;BR /&gt;
SUBROUTINE DUMMY1&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 real, dimension(m) :: my_data&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "m,n",m,n&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "DUMMY 1", size(my_data)&lt;BR /&gt;
&lt;BR /&gt;
END SUBROUTINE DUMMY1&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
SUBROUTINE DUMMY2(i,j)&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 INTEGER, INTENT(IN) ::i,j&lt;BR /&gt;
&lt;BR /&gt;
 &lt;BR /&gt;
 real, dimension(i,j) :: my_data&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "start: DUMMY 2", size(my_data)&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
END SUBROUTINE DUMMY2&lt;BR /&gt;
&lt;BR /&gt;
SUBROUTINE DUMMY3&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
&lt;BR /&gt;
 &lt;BR /&gt;
 real, dimension(m,n) :: my_data&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "start: DUMMY 3", size(my_data)&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
END SUBROUTINE DUMMY3&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;&lt;PRE&gt;&lt;BR /&gt;&lt;/PRE&gt;</description>
    <pubDate>Wed, 23 Jan 2008 19:38:34 GMT</pubDate>
    <dc:creator>David2</dc:creator>
    <dc:date>2008-01-23T19:38:34Z</dc:date>
    <item>
      <title>mvapich2 and ifort: bug?</title>
      <link>https://community.intel.com/t5/Intel-MPI-Library/mvapich2-and-ifort-bug/m-p/860958#M1612</link>
      <description>Hello Intel&lt;BR /&gt;&lt;BR /&gt;I have found a strange bug in MVAPICH2 using IFORT. The behavior is
very strange indeed - it seems to be related to how ifort deals with
passing pointers to the MVAPICH FORTRAN 90 INTERFACE.&lt;BR /&gt;The MPI call returns successfully, but later calls to a dummy subroutine cause a sigsev.
&lt;BR /&gt;&lt;BR /&gt;Please look at the following code - sorry if the post caused formatting issues, I don't have permission to attach the file.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
! TEST CODE TO FOR POSSIBLE BUG IN MVAPICH2 COMPILED ON IFORT&lt;BR /&gt;
! WRITEN BY: DAVID STUEBE&lt;BR /&gt;! DATE: JAN 23, 2008&lt;BR /&gt;
! &lt;BR /&gt;
! COMPILE WITH: mpif90 -xP mpi_prog.f90 -o xtest&lt;BR /&gt;
!&lt;BR /&gt;
! KNOWN BEHAVIOR:&lt;BR /&gt;
! PASSING A NONE CONTIGUOUS POINTER TO MPI_BCAST CAUSES FAILURE OF&lt;BR /&gt;
! SUBROUTINES USING MULTI DIMENSIONAL EXPLICT SHAPE ARRAYS WITHOUT AN INTERFACE -&lt;BR /&gt;
! EVEN THOUGH THE MPI_BCAST COMPLETES SUCCESUFULLY, RETURNING VALID DATA.&lt;BR /&gt;
!&lt;BR /&gt;
! COMMENTS:&lt;BR /&gt;
! I REALIZE PASSING NON CONTIGUOUS POINTERS IS DANGEROUS - SHAME ON&lt;BR /&gt;
! ME FOR MAKING THAT MISTAKE. HOWEVER, IT SHOULD EITHER WORK OR NOT.&lt;BR /&gt;
! RETURNING SUCCESSFULLY BUT CAUSING INTERFACE ERRORS LATER IS&lt;BR /&gt;
! EXTREMELY DIFFICULT TO DEBUG!&lt;BR /&gt;
!&lt;BR /&gt;
! CONDITIONS FOR OCCURANCE: &lt;BR /&gt;
! COMPILER MUST OPTIMIZE USING 'VECTORIZATION'&lt;BR /&gt;
! ARRAY MUST BE 'LARGE' -SYSTEM DEPENDENT ?&lt;BR /&gt;
! MUST BE RUN ON MORE THAN ONE NODE TO CAUSE CRASH...&lt;BR /&gt;
! ie Running inside one SMP box does not crash.&lt;BR /&gt;
!&lt;BR /&gt;
! RUNNING UNDER MPD, ALL PROCESSES EXIT WHEN THEY HIT DUMMY2&lt;BR /&gt;
! RUNNING UNDER MPIEXEC0.82 FOR PBS, &lt;BR /&gt;
! ONLY SOME PROCESSES EXIT WHEN THEY HIT DUMMY2&lt;BR /&gt;
!&lt;BR /&gt;
! ENVIRONMENTAL INFO:&lt;BR /&gt;
! NODES: DELL 1850 3.0GHZ, 2GB RAM, INFINIBAND PCI-EX 4X&lt;BR /&gt;
! SYSTEM: ROCKS 4.2&lt;BR /&gt;
! gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)&lt;BR /&gt;
!&lt;BR /&gt;
! IFORT/ICC:&lt;BR /&gt;
! Intel Fortran Compiler for Intel EM64T-based applications,&lt;BR /&gt;
! Version 9.1 Build 20061101 Package ID: l_fc_c_9.1.040&lt;BR /&gt;
!&lt;BR /&gt;
! MVAPICH2: mpif90 for mvapich2-1.0&lt;BR /&gt;
! ./configure --prefix=/usr/local/share/mvapich2/1.0
--with-device=osu_ch3:mrail --with-rdma=vapi --with-pm=mpd --enable-f90
--enable-cxx --disable-romio --without-mpe&lt;BR /&gt;
!&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
!=================================================================================&lt;BR /&gt;
&lt;BR /&gt;
Module vars&lt;BR /&gt;
 USE MPI&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 &lt;BR /&gt;
&lt;BR /&gt;
 integer :: n,m,MYID,NPROCS&lt;BR /&gt;
 integer :: ipt&lt;BR /&gt;
&lt;BR /&gt;
 integer, allocatable, target :: data(:,:)&lt;BR /&gt;
&lt;BR /&gt;
 contains&lt;BR /&gt;
&lt;BR /&gt;
 subroutine alloc_vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 &lt;BR /&gt;
 integer Status&lt;BR /&gt;
&lt;BR /&gt;
 allocate(data(n,m),stat=status)&lt;BR /&gt;
 if (status /=0) then&lt;BR /&gt;
 write(ipt,*) "alloc
ation error"&lt;BR /&gt;
 stop&lt;BR /&gt;
 end if&lt;BR /&gt;
&lt;BR /&gt;
 data = 0&lt;BR /&gt;
&lt;BR /&gt;
 end subroutine alloc_vars&lt;BR /&gt;
&lt;BR /&gt;
 SUBROUTINE INIT_MPI_ENV(ID,NP) &lt;BR /&gt;
!===================================================================================|&lt;BR /&gt;
! INITIALIZE MPI ENVIRONMENT |&lt;BR /&gt;
!===================================================================================|&lt;BR /&gt;
 INTEGER, INTENT(OUT) :: ID,NP&lt;BR /&gt;
 INTEGER IERR&lt;BR /&gt;
 &lt;BR /&gt;
 IERR=0&lt;BR /&gt;
 &lt;BR /&gt;
 CALL MPI_INIT(IERR)&lt;BR /&gt;
 IF(IERR/=0) WRITE(*,*) "BAD MPI_INIT", ID&lt;BR /&gt;
 CALL MPI_COMM_RANK(MPI_COMM_WORLD,ID,IERR)&lt;BR /&gt;
 IF(IERR/=0) WRITE(*,*) "BAD MPI_COMM_RANK", ID&lt;BR /&gt;
 CALL MPI_COMM_SIZE(MPI_COMM_WORLD,NP,IERR)&lt;BR /&gt;
 IF(IERR/=0) WRITE(*,*) "BAD MPI_COMM_SIZE", ID&lt;BR /&gt;
&lt;BR /&gt;
 END SUBROUTINE INIT_MPI_ENV&lt;BR /&gt;
&lt;BR /&gt;
 !==============================================================================|&lt;BR /&gt;
 SUBROUTINE PSHUTDOWN &lt;BR /&gt;
 !==============================================================================|&lt;BR /&gt;
 INTEGER IERR&lt;BR /&gt;
&lt;BR /&gt;
 IERR=0&lt;BR /&gt;
 CALL MPI_FINALIZE(IERR)&lt;BR /&gt;
 if(ierr /=0) write(ipt,*) "BAD MPI_FINALIZE", MYID&lt;BR /&gt;
 close(IPT)&lt;BR /&gt;
 STOP&lt;BR /&gt;
&lt;BR /&gt;
 END SUBROUTINE PSHUTDOWN&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 SUBROUTINE CONTIGUOUS_WORKS&lt;BR /&gt;
 IMPLICIT NONE&lt;BR /&gt;
 INTEGER, pointer :: ptest(:,:)&lt;BR /&gt;
 INTEGER :: IERR, I,J&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "START CONTIGUOUS:"&lt;BR /&gt;
 n=2000 ! Set size here&lt;BR /&gt;
 m=n+10&lt;BR /&gt;
 &lt;BR /&gt;
 call alloc_vars &lt;BR /&gt;
 write(ipt,*) "ALLOCATED DATA"&lt;BR /&gt;
 ptest =&amp;gt; data(1:N,1:N)&lt;BR /&gt;
 &lt;BR /&gt;
 IF (MYID == 0) ptest=6 &lt;BR /&gt;
 write(ipt,*) "Made POINTER"&lt;BR /&gt;
 &lt;BR /&gt;
 call MPI_BCAST(ptest,N*N,MPI_INTEGER,0,MPI_COMM_WORLD,IERR)&lt;BR /&gt;
 IF(IERR /= 0) WRITE(IPT,*) "BAD BCAST", MYID&lt;BR /&gt;
 &lt;BR /&gt;
 write(ipt,*) "BROADCAST Data; a value:",data(1,6)&lt;BR /&gt;
 &lt;BR /&gt;
 DO I = 1,N&lt;BR /&gt;
 DO J = 1,N&lt;BR /&gt;
 if(data(I,J) /= 6) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!", I,J,data(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
&amp;amp;n
bsp; &lt;BR /&gt;
 DO J = N+1,M&lt;BR /&gt;
 if(data(I,J) /= 0) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!", I,J,data(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 ! CALL THREE DIFFERENT EXAMPLES OF SUBROUTINES W/OUT AN ITERFACE&lt;BR /&gt;
 ! THAT USE AN EXPLICIT SHAPE ARRAY&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY1"&lt;BR /&gt;
 CALL DUMMY1&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY2"&lt;BR /&gt;
 call Dummy2(m,n)&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY3"&lt;BR /&gt;
 call Dummy3&lt;BR /&gt;
 write(ipt,*) "FINISHED!"&lt;BR /&gt;
 &lt;BR /&gt;
 END SUBROUTINE CONTIGUOUS_WORKS&lt;BR /&gt;
&lt;BR /&gt;
 SUBROUTINE NON_CONTIGUOUS_FAILS&lt;BR /&gt;
 IMPLICIT NONE&lt;BR /&gt;
 INTEGER, pointer :: ptest(:,:)&lt;BR /&gt;
 INTEGER :: IERR, I,J&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "START NON_CONTIGUOUS:"&lt;BR /&gt;
&lt;BR /&gt;
 m=200 ! Set size here&lt;BR /&gt;
 n=m+10&lt;BR /&gt;
 &lt;BR /&gt;
 call alloc_vars &lt;BR /&gt;
 write(ipt,*) "ALLOCATED DATA"&lt;BR /&gt;
 ptest =&amp;gt; data(1:M,1:M)&lt;BR /&gt;
 &lt;BR /&gt;
!===================================================&lt;BR /&gt;
! IF YOU CALL DUMMY2 HERE TOO, THEN EVERYTHING PASSES ???&lt;BR /&gt;
!===================================================&lt;BR /&gt;
! CALL DUMMY1 ! THIS ONE HAS NO EFFECT&lt;BR /&gt;
! CALL DUMMY2 ! THIS ONE 'FIXES' THE BUG&lt;BR /&gt;
&lt;BR /&gt;
 IF (MYID == 0) ptest=6 &lt;BR /&gt;
 write(ipt,*) "Made POINTER"&lt;BR /&gt;
 &lt;BR /&gt;
 call MPI_BCAST(ptest,M*M,MPI_INTEGER,0,MPI_COMM_WORLD,IERR)&lt;BR /&gt;
 IF(IERR /= 0) WRITE(IPT,*) "BAD BCAST"&lt;BR /&gt;
 &lt;BR /&gt;
 write(ipt,*) "BROADCAST Data; a value:",data(1,6)&lt;BR /&gt;
 &lt;BR /&gt;
 DO I = 1,M&lt;BR /&gt;
 DO J = 1,M&lt;BR /&gt;
 if(data(J,I) /= 6) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!",I,J,DATA(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 DO J = M+1,N&lt;BR /&gt;
 if(data(J,I) /= 0) &amp;amp;&lt;BR /&gt;
 &amp;amp; write(ipt,*) "INCORRECT VALUE!",I,J,DATA(I,J)&lt;BR /&gt;
 END DO&lt;BR /&gt;
 END DO&lt;BR /&gt;
&lt;BR /&gt;
 ! CALL THREE DIFFERENT EXAMPLES OF SUBROUTINES W/OUT AN ITERFACE&lt;BR /&gt;
 ! THAT USE AN EXPLICIT SHAPE ARRAY&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY1"&lt;BR /&gt;
 CALL DUMMY1&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY2" &lt;BR /&gt;
 call Dummy2(m,n) ! SHOULD CRASH HERE!&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "CALLING DUMMY3"&lt;BR /&gt;
 call Dummy3&lt;BR /&gt;
 write(ipt,*) "FINISHED!"&lt;BR /&gt;
&lt;BR /&gt;

 END SUBROUTINE NON_CONTIGUOUS_FAILS&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 End Module vars&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Program main&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 CALL INIT_MPI_ENV(MYID,NPROCS) &lt;BR /&gt;
 &lt;BR /&gt;
 ipt=myid+10&lt;BR /&gt;
 OPEN(ipt)&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "Start memory test!"&lt;BR /&gt;
&lt;BR /&gt;
 CALL NON_CONTIGUOUS_FAILS&lt;BR /&gt;
&lt;BR /&gt;
! CALL CONTIGUOUS_WORKS&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "End memory test!"&lt;BR /&gt;
 &lt;BR /&gt;
 CALL PSHUTDOWN&lt;BR /&gt;
&lt;BR /&gt;
END Program main&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
! TWO DUMMY SUBROUTINE WITH EXPLICIT SHAPE ARRAYS&lt;BR /&gt;
! DUMMY1 DECLARES A VECTOR - THIS ONE NEVER CAUSES FAILURE&lt;BR /&gt;
! DUMMY2 DECLARES AN ARRAY - THIS ONE CAUSES FAILURE&lt;BR /&gt;
&lt;BR /&gt;
SUBROUTINE DUMMY1&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 real, dimension(m) :: my_data&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "m,n",m,n&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "DUMMY 1", size(my_data)&lt;BR /&gt;
&lt;BR /&gt;
END SUBROUTINE DUMMY1&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
SUBROUTINE DUMMY2(i,j)&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
 INTEGER, INTENT(IN) ::i,j&lt;BR /&gt;
&lt;BR /&gt;
 &lt;BR /&gt;
 real, dimension(i,j) :: my_data&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "start: DUMMY 2", size(my_data)&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
END SUBROUTINE DUMMY2&lt;BR /&gt;
&lt;BR /&gt;
SUBROUTINE DUMMY3&lt;BR /&gt;
 USE vars&lt;BR /&gt;
 implicit none&lt;BR /&gt;
&lt;BR /&gt;
 &lt;BR /&gt;
 real, dimension(m,n) :: my_data&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
 write(ipt,*) "start: DUMMY 3", size(my_data)&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
END SUBROUTINE DUMMY3&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;&lt;PRE&gt;&lt;BR /&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 23 Jan 2008 19:38:34 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-MPI-Library/mvapich2-and-ifort-bug/m-p/860958#M1612</guid>
      <dc:creator>David2</dc:creator>
      <dc:date>2008-01-23T19:38:34Z</dc:date>
    </item>
    <item>
      <title>Re: mvapich2 and ifort: bug?</title>
      <link>https://community.intel.com/t5/Intel-MPI-Library/mvapich2-and-ifort-bug/m-p/860959#M1613</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;Could youyou try the Intel MPI Library?&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;Andrey&lt;/P&gt;</description>
      <pubDate>Wed, 02 Apr 2008 07:57:19 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-MPI-Library/mvapich2-and-ifort-bug/m-p/860959#M1613</guid>
      <dc:creator>Andrey_D_Intel</dc:creator>
      <dc:date>2008-04-02T07:57:19Z</dc:date>
    </item>
  </channel>
</rss>

