Непоследовательные аргументы в пользу коллективной рутины
У меня есть 4 процесса MPI, каждый процесс будет записывать несколько последовательных массивов NumPy.. В фрагменте кода ниже; data_per_rank - это двумерный массив numpy, и каждый процесс mpi должен разбивать его на внутренние поднаборы inner_splits и записывать каждый в отдельную группу hdf5.
inner_splits = 3
data_splits = np.array_split(data_per_rank, inner_splits, axis=0)
for i in range(size):
for j in range(inner_splits):
dset.append(f.create_dataset('p{0}_{1}'.format(i, j), data_splits[j].shape, dtype='float64'))
for i in range(inner_splits):
dset[(rank*inner_splits)+i][:,:] = data_splits[i]
for i in range(size):
del dset[i]
f.close()
Это приводит к следующей ошибке:
File "/gpfs/projects/bsc19/bsc19004/matmul_separated.py", line 62, in write f.close()
File "/apps/PYTHON/2.7.13/INTEL/lib/python2.7/site-packages/h5py-2.7.0-py2.7-linux-x86_64.egg/h5py/_hl/files.py", line 299, in close
h5i.dec_ref(id_)
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper (/gpfs/apps/MN4/PYTHON/SRC/modules/2.7.13/h5py-.7.0_2/h5py/_objects.c:318)
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper (/gpfs/apps/MN4/PYTHON/SRC/modules/2.7.13/h5py-.7.0_2/h5py/_objects.c:314)
File "h5py/h5i.pyx", line 150, in h5py.h5i.dec_ref(gpfs/apps/MN4/PYTHON/SRC/modules/2.7.13/h5py-2.7.0_2/h5py/h5i.c:2836)
RuntimeError: Can't decrement id ref count (Invalid argument, error stack:
mpi_file_set_size(82): inconsistent arguments to collective routine )
Некоторые из подмассивов имеют форму (2731, 32768), в то время как другие имеют форму (2730, 32768). Я убедился, что во время записи правильный data_split записывается в соответствующий обработчик dset.
Может кто-нибудь объяснить мне, что здесь происходит не так? что означает это сообщение об ошибке? какие аргументы противоречивы?
заранее спасибо