gpt4 book ai didi

io - 使用集体 MPI-IO 读写大文件的最佳方法

转载 作者:行者123 更新时间:2023-12-04 20:52:02 32 4
gpt4 key购买 nike

我想使用 MPI-IO 在 Fortran 中读取和写入大型数据集。我的首选方法是使用使用 MPI_type_create_subarray 定义的具有单一维度的 MPI 类型来描述每个进程对文件的 View 。因此,我的 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 接口(interface)中的“普通”整数。因此,这种方法的限制是大约 20 亿个元素。
是否有另一个接口(interface),将 MPI_OFFSET_KIND 用于这些全局值?
到目前为止,解决此问题的唯一方法是使用 MPI_File_set_view 中的置换选项,而不是在子数组 MPI 类型的帮助下定义 View 。然而,这种“感觉”是错误的。您是否期望在这两种方法中对集体 IO 产生性能影响?有谁知道,如果这个接口(interface)会在 MPI-3 中改变?
也许我应该使用其他 MPI 类型?

这里推荐的解决方案是使用集体 IO 有效地将大型数据文件并行写入磁盘?

最佳答案

帮助来了。

在 MPI-3 中,将有使用 MPI_Count 的数据类型操作例程。而不是一个int。为了向后兼容(呻吟),现有的例程不会改变,但你应该能够制作你的类型。

但现在..
但是,特别是对于子数组,目前这通常不被认为是一个大问题——即使对于二维数组,20 亿的索引也会给你一个 4x1018 的数组大小,这无疑是相当大的(但正是那种以百亿亿次计算为目标的数字)。在更高维度,它甚至更大。

但是,在 1d 中,20 亿长的数字列表只有约 8GB,这不是任何大数据,我认为这就是您发现自己所处的情况。我的建议是将其保留为您拥有的形式现在只要你可以。局部元素是否存在共同因素?如果可行,您可以通过以(例如)10 个 vectype 为单位捆绑类型来解决此问题 - 对于您的代码来说,这无关紧要,但它会减少 locElements 和 globElements 中的数字。否则,是的,您始终可以在文件集 View 中使用置换字段。

关于io - 使用集体 MPI-IO 读写大文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9344619/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com