Параллелизм потоков записи HDF5

Может ли HDF5 обрабатывать несколько потоков самостоятельно или его необходимо синхронизировать извне? Пример OpenMP предполагает последнее.

Если первое, то как правильно определить пространство данных для записи?


person Anycorn    schedule 25.06.2010    source источник
comment
хороший вопрос и хороший ответ, пожалуйста, проголосуйте и примите   -  person fabrizioM    schedule 06.04.2011


Ответы (1)


Энкорн,

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);

Надеюсь это поможет!

person Marc    schedule 05.04.2011