Как повысить эффективность ввода-вывода HDF5 (запись файла)?


У меня очень много связанных с временем научных данных для записи, значит, данные должны быть записаны в файл hdf5 каждые несколько секунд. Моя структура файлов hdf5 представлена ниже:

  1. Создайте множество временных групп, таких как time-1-group, time-2-group, time-3-group и т. д...
  2. в группе time создается множество наборов данных, таких как DataSetA, DataSetB, DataSetC и т. д...
  3. запишите данные в dataset выше.

Используемый API: HDF5-Fortran

Запустите эту программу, все в порядке, но скорость медленная, как улучшить эффективность действия записи hdf5? Большое спасибо.

1 3

1 ответ:

Похоже, что вы фрагментируете свои данные на группы для каждого временного шага (я просто догадываюсь из того, что вы написали). Возможно, будет более эффективным добавить дополнительное измерение ко всем вашим наборам данных, которое будет представлять временной шаг, и избавиться от групп, потому что вы можете буферизировать кучу итераций вместе перед каждой записью.

В clear, вместо:

/time-1-group
    /time-1-group/DataSetA -> 2d array
    /time-1-group/DataSetB -> 2d array
    ...
/time-2-group
    /time-2-group/DataSetA -> 2d array
    /time-2-group/DataSetB -> 2d array
    ...
...

У вас будет вот что:

/DataSetA -> 3d array where third index is time
/DataSetB -> 3d array where third index is time
...

Вам придется использовать фрагментированные наборы данных и выбрать размер фрагмента. с осторожностью оптимизируйте эффективность ввода-вывода (и, как я сказал выше, у вас может быть более одного временного шага на кусок).