The HWT was designed to facilitate common programming tasks. It has a distinct emphasis on parallel programming. The package offers three distinct functionalities:
- The maintenance of multiple program versions is enabled by means of pre-processor constructs (see Question 4). Several pre-defined default versions are available. This allows the user to keep only one original source code, and automatically generate various versions from it. The HWT generates the associated version source code in separate directories, constructs a makefile and compiles the code. The insertion of the pre-processor constructs, as well as the definition and control of the versions is left to the user.
- Automatic Relative Debugging allows the user to produce error reports by running a specific debugging version of the program (see Question 5). Automatic implies that the HWT is performing error checks without the involvement of the user, thus making it suitable for the processing of large amounts of data. Relative refers to the usage of user-specified reference data to determine the correctness of a program. Commonly these data come from another version of the program. For instance, this offers the possibility to use a serial version of a program (which is assumed to be correct) to debug a parallel version.
- Timing facilities are supplied in the HWT in the form of a few simple routines (see Question 6). This allows the user to automatically generate tables of CPU times and speedup values. This is especially useful for the determination of scaling properties of parallel code with respect to its serial counterpart.
We discuss these main functionalities in more details below in this FAQ. Please note that for the proper usage of the HWT it is necessary to consult the User's Manual. This FAQ file is not meant as replacement.