Запись / чтение больших файлов с HDF5 и MPI с использованием 1 процесса из Python

При записи большого набора данных в файл с использованием параллельного HDF5 через h5py и mpi4py (и вполне возможно также при использовании HDF5 и MPI непосредственно из C), я получаю следующую ошибку при использовании драйвера mpio с одним процессом:

OSError: не удается подготовиться к записи данных (невозможно преобразовать размер в size_i)

Кажется, что ограничение на разрешенный набор данных составляет 4 ГБ, по крайней мере, когда содержимое представляет собой двойные массивы. Большие наборы данных работают нормально, если для распределения рабочей нагрузки используется больше процессов, или если они выполняются на одном процессоре без драйвера mpio.

Почему это? Являются ли типы указателей size и size_i, и может ли первый не содержать адресов больше, чем соответствует 4 ГБ double[]? В конце концов, эта ошибка, вероятно, не будет для меня серьезной проблемой, потому что в целом я буду использовать более одного процесса, но я бы хотел, чтобы мой код работал даже с использованием только одного процесса.


person jmd_dk    schedule 16.01.2015    source источник
comment
Просто предположение ... Процедуры ввода-вывода файлов MPI взяты из MPI-2, который был ратифицирован в середине 90-х. Стандарт MPI требует, чтобы параметр count имел тип int. Я не думаю, что 64-битные long int стали доступны до C99.   -  person eduffy    schedule 16.01.2015
comment
Как уже упоминалось @eduffy, стандарт MPI определяет, что количество элементов данных в вызовах MPI-IO должно иметь тип int. На самом деле это не ограничение для собственных приложений MPI, поскольку его можно было легко обойти, построив производный тип данных MPI (что было причиной сохранения int в качестве типа счетчика в MPI-3).   -  person Hristo Iliev    schedule 17.01.2015


Ответы (1)


Недавно я столкнулся с той же проблемой, и раскопки довели меня до этого момента:

https://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.1/src/unpacked/src/H5FDmpio.c.

Где вы увидите возникшую ошибку. Проще говоря, ошибка возникает, когда размер массива в байтах превышает 2 ГБ.

Покопавшись дальше, я попал сюда: https://www.hdfgroup.org/hdf5-quest.html#p2gb

Где описана проблема и способы ее решения.

Пожалуйста, посмотрите.

person Arvind    schedule 09.02.2016
comment
Ссылки выше больше не доступны. Кто-нибудь нашел стабильное решение этой проблемы? - person GMc; 16.06.2021