포트란의 MPI_BCAST에 문제가 있습니다. MPI_CART_CREATE ('COMM_NEW')를 사용하여 새로운 커뮤니케이터를 생성합니다. 이전 커뮤니케이터 (예 : MPI_COMM_WORLD)를 사용하여 루트에서 데이터를 브로드 캐스팅하면 정상적으로 작동합니다.MPI_CART_CREATE와 함께 MPI_BCAST를 사용할 때의 문제
[compute-4-15.local:15298] *** An error occurred in MPI_Bcast
[compute-4-15.local:15298] *** on communicator MPI_COMM_WORLD
[compute-4-15.local:15298] *** MPI_ERR_COMM: invalid communicator
[compute-4-15.local:15298] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
그것은 COMM_NEW에 포함 된 프로세서, 또한 위의 오류의 결과를 얻는다는 문제가 다른 프로세서 생각 : 내가 방금 만든 새로운 의사 소통을 사용하는 경우, 그것은 오류를 제공합니다 COMM_NEW에 포함되지 않지만 MPI_COMM_WORLD에 존재합니다. 어떤 도움이라도 대단히 감사하겠습니다. COMM_NEW의 프로세서 수가 총 프로세서 수보다 적기 때문입니다. 그렇다면 어떻게 합계보다 적은 프로세서 세트에서 방송을 할 수 있습니까? 감사. 내 샘플 코드는 다음과 같습니다
!PROGRAM TO BROADCAST THE DATA FROM ROOT TO DEST PROCESSORS
PROGRAM MAIN
IMPLICIT NONE
INCLUDE 'mpif.h'
!____________________________________________________________________________________
!-------------------------------DECLARE VARIABLES------------------------------------
INTEGER :: ERROR, RANK, NPROCS, I
INTEGER :: SOURCE, TAG, COUNT, NDIMS, COMM_NEW
INTEGER :: A(10), DIMS(1)
LOGICAL :: PERIODS(1), REORDER
!____________________________________________________________________________________
!-------------------------------DEFINE VARIABLES-------------------------------------
SOURCE = 0; TAG = 1; COUNT = 10
PERIODS(1) = .FALSE.
REORDER = .FALSE.
NDIMS = 1
DIMS(1) = 6
!____________________________________________________________________________________
!--------------------INITIALIZE MPI, DETERMINE SIZE AND RANK-------------------------
CALL MPI_INIT(ERROR)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPROCS, ERROR)
CALL MPI_COMM_RANK(MPI_COMM_WORLD, RANK, ERROR)
!
CALL MPI_CART_CREATE(MPI_COMM_WORLD, NDIMS, DIMS, PERIODS, REORDER, COMM_NEW, ERROR)
IF(RANK==SOURCE)THEN
DO I=1,10
A(I) = I
END DO
END IF
!____________________________________________________________________________________
!----------------BROADCAST VECTOR A FROM ROOT TO DESTINATIONS------------------------
CALL MPI_BCAST(A,10,MPI_INTEGER,SOURCE,COMM_NEW,ERROR)
!PRINT*, RANK
!WRITE(*, "(10I5)") A
CALL MPI_FINALIZE(ERROR)
END PROGRAM
+1. Open MPI는 잘못된 통신기 핸들과 관련된 모든 오류 메시지에서'MPI_COMM_WORLD'를 사용합니다. 내 대답을보십시오. –
감사합니다. 나는 당신이 지적한대로 오류와 오류를 찾을 수있었습니다. 그것은 if 조건을 사용하여 COMM_NEW 내에서 MPI_BCAST를 호출 할 때 작동합니다. – user2510336