Я пытался работать с файлами HDF5 в Python через h5py, и я получаю segfault на некоторых подсчетах потоков MPI, даже в очень простом случае, когда я вызываю create_dataset ().
Мой минимальныйпример сбоя показан ниже - логическое значение может быть установлено как вызывающее segfault (или нет), показывая, что оно зависит от того, задано ли maxshape для нового массива.
Это MPI-совместимость и выполняется с
mpirun -np 5 python test.py
Работает нормально для процессов 1,2,3 и 4 MPI, но при этом происходит сбой с большим количеством.Я предполагаю, что у меня есть UB в подсчете ядер, где он тоже работает, но так получилось, что он не работает в этом случае.
Я пробовал это с HDF5 1.10.1 (из openSUSEофициальные репозитории) и 1.10.4 (источник с веб-сайта hdf5 и скомпилированы мной), а также с h5py 2.8.0 и 2.9.0 для Python (Anaconda) 2.7.Я использую MPI 1.10.7.
Мне интересно, видел ли кто-нибудь это раньше или имел какое-то понимание.К сожалению, я не получил ответов на форумах HDF5, но я подозреваю, что в одной из библиотек есть ошибка.
from mpi4py import MPI
import h5py
import numpy as np
with h5py.File('test.h5', 'w', driver='mpio', comm=MPI.COMM_WORLD) as myfile:
shape_tuple = (10,1)
max_shape_tuple = (None,1)
trigger_segfault = True
if trigger_segfault:
new_array_piece = myfile.create_dataset(
"1", shape_tuple, maxshape=max_shape_tuple
)
else:
new_array_piece = myfile.create_dataset(
"1", shape_tuple
)