我在Fortran中遇到了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