【发布时间】:2012-03-09 19:39:25
【问题描述】:
我想使用 MPI-IO 在 Fortran 中读取和写入大型数据集。我的首选方法是使用使用 MPI_type_create_subarray 定义的具有单一维度的 MPI 类型来描述每个进程对文件的视图。因此,我的 Fortran 代码如下所示:
! 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 接口中的“普通”整数。因此,这种方法的元素数量限制在 20 亿左右。 是否有另一个接口,将 MPI_OFFSET_KIND 用于这些全局值? 到目前为止,解决此问题的唯一方法是使用 MPI_File_set_view 中的置换选项,而不是在子数组 MPI 类型的帮助下定义视图。然而,这种“感觉”是错误的。您是否期望在这两种方法中对集体 IO 产生性能影响?有谁知道,如果这个接口会在 MPI-3 中改变? 也许我应该使用其他 MPI 类型?
这里推荐的解决方案是使用集体 IO 高效地将大型数据文件并行写入磁盘?
【问题讨论】:
-
你不能编译 mpi 以使用 8 字节整数吗? (intel
-i8, gcc-fdefault-integer-8) -
我宁愿继续使用 HPC 主机提供的安装。