summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/html/TechNotes/openmp-hdf5.html73
1 files changed, 50 insertions, 23 deletions
diff --git a/doc/html/TechNotes/openmp-hdf5.html b/doc/html/TechNotes/openmp-hdf5.html
index decf1de..763d35b 100644
--- a/doc/html/TechNotes/openmp-hdf5.html
+++ b/doc/html/TechNotes/openmp-hdf5.html
@@ -3,7 +3,8 @@
----------------------
-I. Introduction to OpenMP
+1. Introduction to OpenMP
+-------------------------
- For shared-memory parallelism
- A combination of library and directives
@@ -12,34 +13,57 @@ I. Introduction to OpenMP
- Information at http://www.openmp.org and
http://www.sgi.com/software/openmp
-II. Programming(SGI MPISpro compiler and C language)
+2. Programming(SGI MPISpro compiler and C language)
+---------------------------------------------------
- Turn on compiler '-mp' option
- Include 'omp.h' library in program
- Use library functions, directives and environment variables
-III. Sample Programs
+3. Sample Programs
+------------------
-Attached are four OpenMP-HDF5 test programs. The purpose of these tests is to
-experience OpenMP parallelism with HDF5. All the tests were run on modi4 with
-SGI MPISpro compiler(cc) and make. The first two are the working
-program. The two following only work occasionally. I modify them directly
-from hdf5/examples/h5_write.c. If you want to try them out, the quickest way
-is
- 1. have your hdf5 program compiled,
- 2. go to hdf5/examples directory,
- 3. add -mp option to the end of the CFLAGS list in the Makefile. If you
+Appendix A contains four OpenMP-HDF5 test programs. (They are derived from
+the hdf5/examples/h5_write.c). The purpose of these program is to
+test OpenMP parallelism with the HDF5 library.
+
+All tests were run on modi4 with SGI MPISpro compiler(cc) and make.
+Program 1 and Program 2 are the working programs. Program 3 and Program 4
+work occasionally due to racing conditions.
+Follow the following steps to try the programs.
+
+ a. have your hdf5 library compiled,
+ b. go to hdf5/examples directory,
+ c. add -mp option to the end of the CFLAGS list in the Makefile. If you
have the compiled program in another directory, you should go to the
examples in that directory.
- 4. modify the hdf5/examples/h5_write.c according to the program attached
+ d. modify the hdf5/examples/h5_write.c according to the program attached
here.
- 5. use hdf5/tools/h5dump to examine the output file.
+ e. use hdf5/tools/h5dump to examine the output file.
+
+
+4. Conclusion
+-------------
+
+It is not safe to invoke HDF5 library calls via multiple threads in an
+OpenMP program. But if one serializes HDF5 calls as illustrated in Program 1,
+the HDF5 library works correctly with the OpenMP programs.
+
+The serialization of HDF5 calls will slow down the OpenMP program unnecessarily.
+Future study is needed to check possible ways to "un-seralize" the HDF5 calls.
+One possibility is that the HDF5 library has a beta-version of Thread-safe
+implmentation though it is for Pthreads environment. One can check on the
+feasibility of running OpenMP programs with this version of HDF5 Thread-safe
+library.
+=======
- I. First Program
--------------------------------------------------------------------------------
+Appendix A
+-------------------------------------------------------------------------
+ Program 1
+-------------------------------------------------------------------------
/*
* This example writes 64 datasets to a HDF5 file, using multiple threads
* (OpenMP). Each thread grab the lock while it tries to call HDF5 functions
@@ -169,8 +193,9 @@ void CalcWriteData(hid_t fid, hid_t dataspace, hid_t datatype)
- II. Second Program
--------------------------------------------------------------------------------
+-------------------------------------------------------------------------
+ Program 2
+-------------------------------------------------------------------------
/*
* This example compute the element values of an array in parallel
* by two threads. Then write this dataset into HDF file. This is
@@ -261,8 +286,9 @@ main (void)
- III. Third Program
--------------------------------------------------------------------------------
+-------------------------------------------------------------------------
+ Program 3
+-------------------------------------------------------------------------
/*
* This example create two threads. Each thread writes a dataset to
* the HDF5 file in parallel. This program only works occasionally.
@@ -356,8 +382,9 @@ void writeData(int id, hid_t file, hid_t dataspace, hid_t datatype, char *dname)
}
- IV. Fourth Program
--------------------------------------------------------------------------------
+-------------------------------------------------------------------------
+ Program 4
+-------------------------------------------------------------------------
/*
* This example compute and write two datasets into HDF file in
* parallel. It also only works occasionally.
@@ -437,6 +464,6 @@ main (void)
}
---
-Updated: 2000/10/31
+Updated: 2000/11/28
Contact: hdfhelp@ncsa.uiuc.edu
</pre>