Are there any tools to help me with OpenMP programming?

Please note: The FAQ pages at the HPCVL website are continuously being revised. Some pages might pertain to an older configuration of the system. Please let us know if you encounter problems or inaccuracies, and we will correct the entries.

The standard debugging and profiling tool on the Sunfire machines at HPCVL is Sun Studio, which provides a GUI and is well documented internally. It is able to handle multi-threaded code, i.e. programs that were written using OpenMP. If the home directory of the compiler suite (/opt/ss10/SUNWspro/bin) is in your PATH, the tool may be invoked by simply typing sunstudio at the command prompt. Help is easily invoked, for example by clicking on "Help", selecting "Contents" and then going to "Managing Threads" in the menu that appears.
Sun Studio supplies both a means to debug your program, and to perform timing experiments on them (profiling). The tool might be used to track down bottle necks to the level of single lines of code, or even assembly language instructions.

Quite often, the best way to check the performance of a multi-threaded program is timing it by insertion of suitable routines. This can be done by calling the subroutines ETIME and DTIME, which can give you information about actual CPU time used. However, it is advisable to carefully read the documentation before using them with OpenMP programs. In this case, go to and search for"Sun Studio 10: Fortran Library Reference".

HPCVL also provides a package called the HPCVL Working Template (HWT), which was created by Gang Liu and has now reached version 5.1. The HWT provides 3 main functionalities:

  1. Maintenance of multiple versions of the same code from a single source file. This is very useful, if your OpenMP code is based on a serial code that you want to convert, which usually is the case.
  2. Automatic Relative Debugging which allows you to use pre-existing code (for example the serial version of your program) as a reference to check the correctness of your OpenMP code.
  3. Simple Timing which is needed to determine bottlenecks for parallelization, to optimize code, and to check its scaling properties.

The HWT is based on libraries and script files. It is easy to use and portable (written largely in Fortran). Fortran, C, C++, and any mixture thereof are supported, as well as OpenMP and MPI for parallelism. Documentation of the HWT is available. The package is installed on the Sunfire cluster in /usr/local/hwt.