Я хотел бы читать и записывать большие наборы данных в 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?
Какое здесь рекомендуемое решение для эффективной записи больших файлов данных с коллективным вводом-выводом параллельно на диск?