HDF5 запись потока параллелизма - PullRequest
4 голосов
/ 26 июня 2010

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

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

1 Ответ

7 голосов
/ 06 апреля 2011

Anycorn,

HDF5 может обрабатывать несколько потоков без внешней синхронизации, хотя записи все равно будут последовательными.Вы должны скомпилировать последнюю версию (1.8.6 от 05.05.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);

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

...