2010-06-25 8 views
4

HDF5 est-il capable de gérer plusieurs threads seul ou doit-il être synchronisé en externe? L'exemple OpenMP suggère ce dernier.HDF5 écriture thread simultané

Si le premier, quelle est la bonne façon de définir l'espace de données à écrire?

+1

bonne question et bonne réponse s'il vous plaît upvote et accepter – fabrizioM

Répondre

7

Anycorn,

HDF5 peut gérer plusieurs threads sans synchronisation externe, bien que les écritures seront toujours en série. Vous devez compiler la dernière version (1.8.6 du 05/04/2011) et exécuter ./configure avec les indicateurs --enable-threadsafe et -with-pthreads=/pthreads-include-path/,/pthreads-lib-path/.

Par exemple:

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

En ce qui concerne la définition d'un espace de données pour l'écriture, la façon la plus simple est de construire un hyperplan rectangulaire de base en utilisant un tableau multidimensionnel, une valeur de rang et la fonction H5Screate_simple. Les miens suivent habituellement les mêmes étapes:

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

Espérons que cela aide!

Questions connexes