【发布时间】:2020-09-29 03:44:03
【问题描述】:
我有一个分布在不同 MPI 进程中的 3d 数组:
real :: DATA(i1:i2, j1:j2, k1:k2)
其中i1, i2, ... 对于每个 MPI 进程都不同,但 MPI 网格是笛卡尔坐标。
为简单起见,假设我有一个120 x 120 x 120 数组,以及分布为3 x 3 x 3 的27 个MPI 进程(因此每个处理器都有一个大小为40 x 40 x 40 的数组)。
使用hdf5 库,我只需要编写该数据的一部分,例如,一个穿过中间垂直于第二轴的切片。结果(全局)数组的大小为120 x 1 x 120。
我有点困惑如何在这里正确使用hdf5,以及如何概括完整的DATA 写作(我可以做到)。问题是,并不是每个 MPI 线程都会写入。例如,在上面的例子中,只有 9 个进程必须写一些东西,其他的(在立方体的 +/-x 和 +/-z 边缘上)不必写,因为它们不包含任何块我需要的平板。
我尝试了chunking 技术described here,但看起来这只是针对单个线程。
如果 hdf5 社区能在这方面帮助我将不胜感激 :)
【问题讨论】:
-
正如 SOG 所写,您需要在每个进程上选择 hyperslab。有些人的大小可以为零,但无论如何必须进行集体调用。替代方案:从单个进程写入。数据集创建等仍必须集体完成。这一切都可以通过标准的 HDF5 库来完成。
标签: multidimensional-array fortran mpi hdf5