Frage

Is HDF5 der Lage, mehrere Threads auf seine eigene zu handhaben, oder hat es extern synchronisiert werden? Das OpenMP Beispiel schlägt die letztere.

Wenn die ehemaligen, was ist der richtige Weg, um den Datenraum zu schreiben zu definieren?

War es hilfreich?

Lösung

Anycorn,

HDF5 können mehrere Threads ohne externe Synchronisation behandeln, obwohl die Schreibvorgänge noch seriell sein. Sie sollten die neueste Version (1.8.6 ab 2011.04.05) und Lauf ./configure mit den --enable-threadsafe und -with-pthreads=/pthreads-include-path/,/pthreads-lib-path/ Flags kompilieren.

Zum Beispiel:

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

Bezüglich eines Datenraumes für das Schreiben zu definieren, ist die einfachste Art, eine rechteckige Grund-Hyperebene unter Verwendung eine multidimensionalen Array, einen Rangwert, und die H5Screate_simple Funktion zu konstruieren. Mine in der Regel folgt den gleichen Schritten:

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

Hope, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top