HDF5 Schreibgewinde concurrency
-
30-09-2019 - |
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?
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!