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 без создания нового?

0 ответов

Другие вопросы по тегам