Community
cancel
Showing results for 
Search instead for 
Did you mean: 
ipasichnyk
Novice
43 Views

Strange behaviour of Fortran MPI_Waitany under MPS analysis

It seems that the MPI Performance Snapshot analysis interferes with the execution of the Fortran programs, i.e. the following code

PROGRAM main
    USE MPI
    USE ISO_FORTRAN_ENV
    
    IMPLICIT NONE
    
    INTEGER(kind=int32), PARAMETER :: length = 10
    
    INTEGER(kind=int32) :: numprocs, myid, ierr, i, tag, offset, idx
    
    INTEGER(kind=int32), ALLOCATABLE :: requests(:)
    REAL(kind=real32), ALLOCATABLE :: buffer(:)
    
    CALL MPI_Init(ierr)
    
    CALL MPI_Comm_size(MPI_COMM_WORLD, numprocs, ierr)
    CALL MPI_Comm_rank(MPI_COMM_WORLD, myid, ierr)
    
    IF (numprocs == 1) THEN
        write(*,*) "This example need at least two processes."
        CALL MPI_Finalize(ierr)
        STOP
    END IF
    
    ! Allocate memory for send/recv buffer and request array
    ALLOCATE(buffer(numprocs*length))
    ALLOCATE(requests(numprocs))
    
    ! All workers (rank 1..numprocs-1) send a message to rank 0
    IF (myid > 0) THEN
        DO i=1,length
            buffer(i) = sin(real(i))
        END DO
        
        tag = myid
        CALL MPI_Isend(buffer, length, MPI_REAL, 0, tag, MPI_COMM_WORLD, requests(1), ierr)
        CALL MPI_Wait(requests(1), MPI_STATUS_IGNORE, ierr)
    
    ! Rank 0 receive these messages
    ELSE
        offset = 0
        DO i=1,numprocs-1
            tag = i
            CALL MPI_Irecv(buffer(offset+1), length, MPI_REAL, i, tag, &
                MPI_COMM_WORLD, requests(i), ierr)
            offset = offset + length
        END DO
        
        DO WHILE(.TRUE.)
            CALL MPI_Waitany(numprocs-1, requests, idx, MPI_STATUS_IGNORE, ierr)
            IF (idx /= MPI_UNDEFINED) THEN
                write(*,*) "Recieved message with idx =", idx
            ELSE
                EXIT
            END IF
        END DO
    END IF
    
    CALL MPI_Finalize(ierr)
END PROGRAM MAIN

prints different results with and without the MPS analysis. Without MPS analysis the output is the row of number from 1 to 15 (as expected). But running the same program under -mps flag outputs numbers starting from 0, i.e. from 0 to 14.

I use MPS version which comes from ITAC 9.1 The binary is produced using Intel Fortran compiler 15.0.5 and Intel MPI Library 5.1

0 Kudos
3 Replies
Dmitry_K_Intel2
Employee
43 Views

Hi Igor,

Yes, you are right. MPS Fortran wrappers do not have special handling for Fortran arrays that's why indexes are in C-style starting form 0.

Regards!
---Dmitry
 

ipasichnyk
Novice
43 Views

Hi Dmitry,

is this feature somehow reflected in the documentation?

Best,

Igor

Dmitry_K_Intel2
Employee
43 Views

Hi Igor,

No, it's not reflected. It should be fixed in next release.

Regards!
---Dmitry

 

Reply