Может ли HDF5 обрабатывать несколько потоков самостоятельно или его необходимо синхронизировать извне? Пример OpenMP предполагает последнее.
Если первое, то как правильно определить пространство данных для записи?
Может ли HDF5 обрабатывать несколько потоков самостоятельно или его необходимо синхронизировать извне? Пример OpenMP предполагает последнее.
Если первое, то как правильно определить пространство данных для записи?
Энкорн,
HDF5 может обрабатывать несколько потоков без внешней синхронизации, хотя запись по-прежнему будет последовательной. Вы должны скомпилировать последнюю версию (1.8.6 от 05.04.2011) и запустить ./configure
с флагами --enable-threadsafe
и -with-pthreads=/pthreads-include-path/,/pthreads-lib-path/
.
Например:
./configure --enable-threadsafe -with-pthreads=/usr/include,/usr/lib
Что касается определения пространства данных для записи, самый простой способ — построить базовую прямоугольную гиперплоскость, используя многомерный массив, значение ранга и функцию H5Screate_simple
. Мои обычно выполняют те же действия:
//NUM = Number of spaces in this dimension
//Create a 1 dimensional array
hsize_t dsDim[1] = {NUM};
//Create the 1x1xNUM data space (rank param = 1).
hid_t dSpace = H5Screate_simple(1, dsDim, NULL);
...
Create datasets using the dataspace
...
//Release the data space
H5Sclose(dSpace);
Надеюсь это поможет!