C++ 如何在同一坐标上并行存储三维数据?

C++ 如何在同一坐标上并行存储三维数据?,c++,c,hdf5,C++,C,Hdf5,我试图将3D数据(内存布局是单个阵列;数据尺寸是NX*NY*NZ)存储到HDF5文件中。由于我想将大数组分配给多个MPI进程,每个进程都有一个大小为myNX*NY*NZ的数据数组,其中myNX=NX/MPI\u size 我希望它总是将相同的数据写入HDF5文件内的相同“坐标”,这样写入/读取HDF5文件的进程数不会对数据布局产生任何影响。以下是我的一些代码: 设置本地阵列: data = new double[myNX * NY * NZ]; for(unsigned int k = 0; k


我试图将3D数据(内存布局是单个阵列;数据尺寸是
NX*NY*NZ
)存储到HDF5文件中。由于我想将大数组分配给多个MPI进程,每个进程都有一个大小为
myNX*NY*NZ
的数据数组,其中
myNX=NX/MPI\u size

我希望它总是将相同的数据写入HDF5文件内的相同“坐标”,这样写入/读取HDF5文件的进程数不会对数据布局产生任何影响。以下是我的一些代码:

设置本地阵列:

data = new double[myNX * NY * NZ];
for(unsigned int k = 0; k < NZ; k++) {
    for(unsigned int j = 0; j < NY; j++) {
        for(unsigned int i = 0; i < myNX; i++) {
            data[k * (myNX * NY) + j * myNX + i] = getValue(i, j, k);
        }
    }
}
内存和文件写入:

hid_t h5_memory_dataspace_id = H5Screate_simple(3, length, length);
h5_plist_id = H5Pcreate(H5P_DATASET_XFER);
H5Pset_dxpl_mpio(h5_plist_id, H5FD_MPIO_COLLECTIVE);
H5Dwrite(h5_dataset_id, H5T_NATIVE_DOUBLE, h5_memory_dataspace_id, h5_hyperslab_file_id, h5_plist_id, data);
我搞乱了内存和文件的各种设置,但找不到正确的设置。关于这方面的文档也有点模糊(或者至少我没有正确理解它:())

提前谢谢你,
Velines

编辑:澄清一下:我的问题是,我的数据保存在不同的位置,这取决于写入文件的处理次数。因此,我需要一种方法来创建我的数据数组和HDF5文件之间的“映射”。我如何才能做到这一点

hid_t h5_memory_dataspace_id = H5Screate_simple(3, length, length);
h5_plist_id = H5Pcreate(H5P_DATASET_XFER);
H5Pset_dxpl_mpio(h5_plist_id, H5FD_MPIO_COLLECTIVE);
H5Dwrite(h5_dataset_id, H5T_NATIVE_DOUBLE, h5_memory_dataspace_id, h5_hyperslab_file_id, h5_plist_id, data);