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