HDF5 h5py segfault с MPI с определенными номерами потоков MPI - PullRequest
0 голосов
/ 14 мая 2019

Я пытался работать с файлами 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
                )
...