Лучший подход для чтения и записи больших файлов с коллективным MPI-IO

Я хотел бы читать и записывать большие наборы данных в Fortran с помощью MPI-IO. Я предпочитаю использовать тип MPI, определенный с помощью MPI_type_create_subarray, с одним измерением для описания представления каждого процесса в файле. Таким образом, мой код на Фортране выглядит так:

  ! A contiguous type to describe the vector per element.
  ! MPI_TYPE_CONTIGUOUS(COUNT, OLDTYPE, NEWTYPE, IERROR)
  call MPI_Type_contiguous(nComponents, rk_mpi, &
    &                      me%vectype, iError)
  call MPI_Type_commit( me%vectype, iError )

  ! A subarray to describe the view of this process on the file.
  ! MPI_TYPE_CREATE_SUBARRAY(ndims, array_of_sizes, array_of_subsizes,
  !                          array_of_starts, order, oldtype, newtype, ierror)
  call MPI_Type_create_subarray( 1, [ globElems ], [ locElems ], &
    &                           [ elemOff ], MPI_ORDER_FORTRAN, &
    &                           me%vectype, me%ftype, iError)

Однако array_of_sizes и array_of_starts, описывающие глобальные величины, являются просто "нормальными" целыми числами в интерфейсе MPI. Таким образом, при таком подходе существует ограничение в 2 миллиарда элементов. Есть ли другой интерфейс, который использует MPI_OFFSET_KIND для этих глобальных значений? Единственный способ обойти это, как я вижу до сих пор, - использовать параметр смещения в MPI_File_set_view вместо определения представления с помощью типа MPI подмассива. Однако это "кажется" неправильным. Ожидаете ли вы влияния на производительность любого подхода для коллективного ввода-вывода? Кто-нибудь знает, изменится ли этот интерфейс в MPI-3? Может быть, мне следует использовать какой-нибудь другой тип MPI?

Какое здесь рекомендуемое решение для эффективной записи больших файлов данных с коллективным вводом-выводом параллельно на диск?

5
задан haraldkl 18 February 2012 в 22:24
поделиться