PHDF5并行写入数据是发起多个进程,被发起进程按照某一规则 写入数据到指定位置。
用C语言编写一个连续的hyperlab.
在本例中,有一个8(行)x 6(列)的数据集,每个进程向数据集写入相同数量的列。
在本例中,有两个进程写入同一个数据集,每个进程写入数据集中的每一列。对于每个进程,文件中的hyperlab设置如下:
89 count[0] = 1;
90 count[1] = dimsm[1];
91 offset[0] = 0;
92 offset[1] = mpi_rank;
93 stride[0] = 1;
94 stride[1] = 2;
95 block[0] = dimsf[0];
96 block[1] = 1;
维度1的步幅为2,表示沿着这个维度的每一个其他位置都将写入。步幅为1表示将写入一个维度上的每个位置。
对于两个进程,mpi_rank将是0或1。因此:
进程0写偶数列(0,2,4…)
进程1写入奇数列(1,3,5…)
块大小允许每个进程将一列数据写入数据集中的每个其他位置。
下面是这个例子创建的HDF5文件的h5dump的输出:
HDF5 "SDS_col.h5" { GROUP "/" { DATASET "IntArray" { DATATYPE H5T_STD_I32BE DATASPACE SIMPLE { ( 8, 6 ) / ( 8, 6 ) } DATA { 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200 } } }