MPI слишком много коммуникаторов?
Идея кода состоит в том, чтобы открыть файл параллельно, а затем каждое ядро считывает разные части этого большого файла. ir_start
а также ir_stop
поэтому различны для каждого ядра.
У меня есть следующий код (часть гораздо большего кода):
DO iq = 1, nqf
IF (MOD(iq,100) == 0) THEN
WRITE(stdout, '(a,i10,a,i10)' ) ' Progression iq (fine) = ',iq,'/',nqf
ENDIF
CALL MPI_FILE_OPEN (world_comm,filint,MPI_MODE_RDONLY,MPI_INFO_NULL,iunepmatwp2,ierr)
IF( ierr /= 0 ) CALL errore( 'xxxx', 'error in MPI_FILE_OPEN',1 )
DO ir = ir_start, ir_stop
CALL MPI_FILE_SEEK(iunepmatwp2,lrepmatw,MPI_SEEK_SET,ierr)
CALL MPI_FILE_READ(iunepmatwp2, aux, lrepmatw2, MPI_DOUBLE_PRECISION, MPI_STATUS_IGNORE,ierr)
loops:
eptmp ( ibnd, jbnd, ip, imode ) = aux (i)
endloops
CALL mp_sum(eptmp, world_comm)
ENDDO
something is then done with eptmp
ENDDO
Проблема в том, что код систематически падает при:
...
Progression iq (fine) = 32000/ 50000
Progression iq (fine) = 32100/ 50000
Progression iq (fine) = 32200/ 50000
Progression iq (fine) = 32300/ 50000
Progression iq (fine) = 32400/ 50000
Progression iq (fine) = 32500/ 50000
Progression iq (fine) = 32600/ 50000
error in MPI_FILE_OPEN
Мне кажется (я могу быть совершенно неправ), что может быть слишком много открытых коммуникаторов.
Проблема в том, что я не могу сделать что-то вроде CALL MPI_Comm_free(world_comm)
в q
, потому что это убивает код.
Есть ли способ для каждого ядра использовать один и тот же world_comm
без создания нового?