Intel® oneAPI HPC Toolkit
Get help with building, analyzing, optimizing, and scaling high-performance computing (HPC) applications.
1891 Discussions

Strange behaviour of Fortran MPI_Waitany under MPS analysis

ipasichnyk
Novice
167 Views

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
167 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
167 Views

Hi Dmitry,

is this feature somehow reflected in the documentation?

Best,

Igor

Dmitry_K_Intel2
Employee
167 Views

Hi Igor,

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

Regards!
---Dmitry

 

Reply