2010-06-25 2 views
4

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

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

+1

Хороший вопрос и хороший ответ, пожалуйста, поддержите и примите – fabrizioM

ответ

7

Anycorn,

HDF5 может обрабатывать несколько потоков без внешней синхронизации, хотя запись еще будет последовательной. Вы должны скомпилировать последнюю версию (1.8.6 от 4/5/2011) и запустить ./configure с флагами --enable-threadsafe и -with-pthreads=/pthreads-include-path/,/pthreads-lib-path/.

Например:

./configure --enable-threadsafe -with-pthreads=/usr/include,/usr/lib 

Что касается определения DataSpace для записи, самый простой способ состоит в построении основной прямоугольную гиперплоскости с использованием многомерного массива, значения ранга и функций 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); 

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