【问题标题】:parallel write to different groups with h5py使用 h5py 并行写入不同的组
【发布时间】:2018-12-14 04:51:20
【问题描述】:

我正在尝试使用并行 h5py 为每个进程创建一个独立的组,并用一些数据填充每个组。发生的情况是只有一个组被创建并填充了数据。这是程序:

from mpi4py import MPI
import h5py

rank = MPI.COMM_WORLD.Get_rank()
f = h5py.File('parallel_test.hdf5', 'w', driver='mpio', comm=MPI.COMM_WORLD)

data = range(1000)

dset = f.create_dataset(str(rank), data=data)

f.close()

对这里出了什么问题有什么想法吗?

非常感谢

【问题讨论】:

  • 每个进程的rank 是否不同?从mp 教程看来,rank 区分了发送者和接收者进程,或类似的东西。文件中dataset 的名称是什么?
  • group 是什么意思?如果您的意思是 HDF5 Group,那么它们必须由单个任务创建和分配,然后您可以使用并行数据填充它们。
  • @hpaulj 是 rank 是每个进程的标识符。例如,rank 0 将创建 HDF5 组 0 并将其数据放入其中,其余部分也是如此过程
  • 对文件结构的所有操作必须集中执行。您必须在任何地方创建数据集。然后,您可以分别填写它们。

标签: io mpi hdf5 h5py parallel-io


【解决方案1】:

好的,正如 cmets 中提到的,我必须为每个进程创建数据集,然后填充它们。以下代码并行写入数据的次数与通信器的大小一样多:

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

data = [random.randint(1, 100) for x in range(4)]

f = h5py.File('parallel_test.hdf5', 'w', driver='mpio', comm=comm)

dset = []
for i in range(size):
   dset.append(f.create_dataset('test{0}'.format(i), (len(data),), dtype='i'))

dset[rank][:] = data
f.close()

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2017-03-15
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多