读取/广播并行数据到hdf5中的所有处理器的最佳方法

时间:2019-03-26 10:22:43

标签: parallel-processing fortran mpi hdf

我有一个并行的fortran应用程序,我想读取将在所有处理器上“镜像”的中大型数据数组。换句话说,这是“全局”数据,例如观察位置,这对于所有处理元件都必须执行其工作是必需的,而不是将在处理器之间分布的分布式阵列。

是否有一个纯HDF解决方案可以有效读取所有数据并将其广播到处理元件?

我从HDF并行文档中了解到,我可以使用以下方法并行选择一个超级板:

 ! open the file, etc. 
 ! ...
 call h5sselect_hyperslab_f (slabspace, H5S_SELECT_SET_F, &
     &                      data_offset, data_count, hdf_error)
 call h5pcreate_f(H5P_DATASET_XFER_F, plist_id, hdf_error)
 call h5pset_dxpl_mpio_f(plist_id, H5FD_MPIO_COLLECTIVE_F, &
     &                        hdf_error)
 call h5dread_f(dset_tb, H5T_IEEE_F32LE, obs, dims,  &
     &   hdf_error, file_space_id = slabspace, mem_space_id = memspace,  &
     &   xfer_prp = plist_id)

我了解这可用于通过超级平板设置data_offset和data_count,从而将数据分发到不同的处理器。

但是,我想知道我是否错过了所有处理器将获取所有数据的案例。如果我使h5sselect_hyperslab_f的data_offset等于0并运行所有数据,我是否正确地期望性能会很糟糕?

还是我需要自己用超级板拆分处理器上的I / O,然后使用MPI聚集器?

0 个答案:

没有答案