Fortran中是否有可用的库,它允许使用除Judy数组之外的稀疏动态数组(哈希/字典)?
我想使用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)
Run Code Online (Sandbox Code Playgroud)
但是,描述全局量的array_of_sizes和array_of_starts只是MPI接口中的"正常"整数.因此,采用这种方法,约有20亿个元素存在限制.是否有另一个接口,它使用MPI_OFFSET_KIND来表示这些全局值?到目前为止,解决此问题的唯一方法是使用MPI_File_set_view中的置换选项,而不是在子阵列MPI类型的帮助下定义视图.然而,这"感觉"错了.您是否期望对集体IO的任何一种方法都会产生性能影响?有人知道,如果这个界面在MPI-3中有变化吗?也许我应该使用其他一些MPI类型?
这里有什么建议的解决方案可以有效地将具有集合IO的大型数据文件并行写入磁盘?