我有一个并行的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聚集器?