 ============================================================================
|                   OpenMP Validation Suite  V 3.0                           |
|              High Performance Computing Center, Stuttgart                  |
|       High Performance Computing and Tools, University of Houston          |
|                              Jan. 2012                                     |
 ============================================================================


TABLE OF CONTENTS

I    	INTRODUCTION
I.1.	  Aims and general function
I.2. 	  Files and directories

II		USAGE
II.1.	  First run with make
II.2	  Where to search for results
II.3.	  Using the runtest script

III		Adding and modifying tests
III.1.	  The template structure

IV		Known Issues and Workaround

V       Contact and Support

------------------------------------------------------------------------------

I.  INTRODUCTION
==============================================================================

I.1.  Aims and general function
--------------------------------

The OpenMP validation suite is designed to verify the correct implementation
of OpenMP in compilers. It is capable of checking Fortran as well as c
compiler.

Testing the implementation is based on statistics. Each directive is tested
by computing and verifying the result with the already known value. In most
cases a wrong implementation can result in the right values. So the tests are
run several times.

Additionally, the validation suite creates so called crosstests for each
directive. These are tests in which either the directive is missing or used
with different arguments. If this so called crosstest fails, this indicates
strongly that the previous test is capable of testing the directive.

Lastly, an orphaned test is also run to determine if the directive being
tested is able to correctly run when 'orphaned' from the main function.
Essentially, the directive's code is placed into its own function which is
called during execution of the main function and often inside a parallel
region.


I.2.  Files and directories
----------------------------


d c                         directory containing the templates for the c tests
d fortran                   directory containing the templates for the Fortran
                            tests
  Makefile                  Makefile containing options for compilation
  common_utility.f
  omp_my_sleep.h            thread save sleep function
  omp_testsuite.f           Fortran header file
  omp_testsuite.h           autogenerated c-header file
  ompts-c.conf              configuration file for the c tests about how often
                            the tests shall be executed or how large the loop size
                            is
  ompts_makeHeader.pl	    perl module for automatically generation of an up
                            to date header file
  ompts_parserFunctions.pm	perl module containing general functions for
				            the parser.pl script
  ompts_parser.pl	        script for generating the source code out of the templates
  ompts_standaloneProc.c	framework for the c tests
  ompts_standaloneProc.f	framework for the Fortran tests
  README		            the README file you've already found ;-)
  LICENSE                   contains license information
  runtest.pl		        the frame program of the test suite
  testlist-f.txt	        test list containing the available tests for Fortran
  testlist-c.txt	        test list containing the available tests for c


------------------------------------------------------------------------------

II.  USAGE
==============================================================================


II.1. First run with make
--------------------------


You can do a first simple run of the testsuite only after one step of
configuration:

1) Modify the ompts.conf and ompts-c.conf file, change the number of threads
and number of repetitions of each test.

2) Modify the Makefile, uncommenting the CC/FC and CFLAGS/FFLAGS variables for
the compiler of your choice.

And now you can run the testsuite either for a C compiler with:

>	make ctest

or for a Fortran compiler with:

>	make ftest


II.2. Running custom tests
--------------------------


In order to run single tests or custom groups of tests, two make commmands
are defined: make stest and make fstest. These two command reference the file
customtest.txt when looking for a testlist to use. Simply edit customtest.txt
to include the desired test or tests. If customtest.txt contains c tests,

>      make stest

or for fortran tests

>      make fstest

In order to change the number of threads used in the tests, simply edit the
Makefile variables MINTHREADS and MAXTHREADS. By default, they are configured
to use 2 threads. To change the number of times each test is run, for c tests
edit the REPETITIONS variable in the file ompts-c.conf. The LOOPCOUNT and
SLEEPTIME variables can also be changed here. For fortran tests, edit the file
omp_testsuite.f to change both the LOOPCOUNT and the number of times each test
is run.



II.3. Understanding the results
---------------------------------


When running the testsuite the results will be shown on the screen.

If you need the results for further purpose you can use the results.txt, which
is a simple list containing the results for each directive
in a single line. Each line starts with the name of the directive. Then follows
the result of the test given in the percentage of the passed tests. If 100% of
the tests passed successfully, the second number gives the result of the
corresponding crosstest. Crosstests will only be run if the normal test passes
with 100% accuracy. If a crosstest was not run or a test does not exist, it is
denotated by a "-".
After the results of the normal tests, there follow a series of tests in the
orphaned mode. If there were no orphaned tests available this is shown by a "-".

If you run the testsuite with different numbers of threads (e.g. using the
runtest.pl script) the results are shown in blocks of 4 columns for each number
of threads.

If a test fails you can find more detailed information in the ompts.log,
bin/c/*.out and *.log files. While the ompts.log file contains all compiler
error messages for all tests, the *.out and *.log files contain detailed inforamtion
on the execution process of the single tests.
In the *.out files there are listed all the results of the single executions of
the tests. In the *.log files there are error messages of the tests itself.


II.4. Cleaning Up
-----------------


Because many files are generated for each tested directive, it is often necessary
to clean the main directory after a battery of tests. To clean all generated files
in the main directory including the results and log files,

>     make clean


To clean only the logs and out files,

>     make cleanlogs

To clean only the results,

>     make cleanresults



II.4. Using the runtest script
-------------------------------


So for special purpose you can use the runtest.pl script, which allows a lot
more options for the execution process than the execution with make.

Using the runtest.pl script is rather easy. You can use the the test suite only
after two steps of modifications:

1.) Modify the Makefile to your wishes choosing your compiler and the necessary
    compiler flags.
2.) If necessary edit one of the test lists (testlist-c.txt) and comment out the
    tests you do not want to run using # at the beginning of a line. Testlists for Fortran end
    with -f.txt while test lists for c with -c.txt.

And now you can run the test suite either for Fortran using
	#	>  ./runtest.pl -lang=fortran -d=fortran testlist-f.txt
or for c
	#	>  ./runtest.pl -lang=c -d=c testlist-c.txt

With the --help option you can show the complete list of options and their
explanations.

The test results are summarized in cresults or fresults.txt while *.log keep
details for individual tests. There is also a file (ompts.log) keeping
compilation information. (see section II.2 )

If you don't want to test the directives in orphaned mode you can use the
-norphan option. You also can use the runtest.pl script either to compile all
tests or run compiled tests e.g. for cross compilation on other platforms. For
this there are the options -norun and -nocompile.

Happy testing!


------------------------------------------------------------------------------

III.	How to add new tests / The structure of test templates
==============================================================================

III.1  The template structure
------------------------------

The test suite is based on templates so that you only have one file for test,
crosstest and the orphaned versions of them.

	A) Description of the template structure

The syntax of the templates is much like xml. So each test begins with
'<ompts:test>' and ends with '</ompts:test>'.

In between there are several other blocks holding information:

- <ompts:testdescription> </ompts:testdescription> In between this tag you can
  give a description on what the test checks and how it works.

- <ompts:ompversion> </ompts:version> This tag is used to specify the
  OpenMP-version which includes the tested directive.

- <ompts:directive> </ompts:directive> Used to specify the directive how it is
  called in the programming language.

- <ompts:dependences> </ompts:dependences> With this tag you can specify other
  omp directives which are necessary for the correct execution of your test.
The directives have to be listed by their directive names as it is called in
the programming language. Multiple directives are separated by ','.

- <ompts:testcode> </ompts:testcode> In this tag stands the whole source code
for the test / crosstest.  Each test has to be written as a function. The
syntax of the functions differs between C and Fortran: In C it has to take a
file pointer 'FILE * logFile' and return an int. If the test has been passed
successful it has to return a value unequal to 0. The file pointer can be used
to write information into a log file.  In Fortran the function takes no
argument and the function name must not exceed XX characters.  The return value
has to be specified using the '<testfunctionname>' tags. It has to be 1 if the
test succeeded and 0 if the test failed. For details see the example.

To tell the test suite the name of your test function you have to enclose it
into the '<ompts:testcode:functionname> </ompts:testcode:functionname>' tag.

If there are differences between test and crosstest you can use the
<ompts:check> </ompts:check> and <ompts:crosscheck> </ompts:crosscheck> tag.
When generating the test the parser will use the code enclosed in
<ompts:check> tags and cut out the code written in <ompts:crosscheck> tags. So
you have two possibilities to write your template for test and crosstest: The
first way you can write the complete code is to write the test in one
<ompts:check> tag and later the crosstest in one <ompts:crosscheck> tag.  The
second way is to write both tests only by enclosing differing parts in
corresponding tags.

The first method should be preferred if test and crosstest differ much from
each other. The second e.g. if you only want to change a few options like
replacing an omp singleprivate clause by an omp private clause or to cut out
a directive like omp flush.  When you use the first way you have to take care
of the function name! You have to declare it twice with
<ompts:testcode:functionname>!

- <ompts:orphan> </ompts:orphan> This tag can be used if you want to enable
  your test to check the directive in orphan regions, too.  The code enclosed
in this part will be written to a separate function which will be called
instead.  If you have variables which are used outside this region you have to
declare them as global variables enclosed in an <ompts:orphan:vars> tag. For
further information see the description of the <ompts:orphan:vars> tag.

- <ompts:orphan:vars> </ompts:orphan:vars> This tag is used to specify global
  variables for an orphan region which allow the exchange of values between
the main program and the orphaned functions. The usage differs between C and
Fortran.  In C you have to use a single declaration for each variable. You can
either declare all variables in one single or in several different regions. You
must not initialize the variables inside!  In Fortran you have to put all
declarations in one single tag. Because there exist no global variables as in
C you have to use common blocks. For further information see the examples.

III.2.  Adding tests to the test lists
--------------------------------------

After you have created a new test you have to add them to a testlist. Simply
add the function name in a new Line into a file.



------------------------------------------------------------------------------


IV.   Known Issues and Workaround
==============================================================================

The Sun OS has a problem with the -maxdepth option on the 'make cleanall'
command. This prevents the tests from being removed from the working directory
and can cause problems with future tests. To remedy, edit the makefile line
under the clean command:

     -rm [cf]test*.[cf] [cf]crosstest*.[cf] [cf]ctest*.[cf] [cf]orphan*.[cf]

Change to:

     -rm [cf]test* [cf]crosstest* [cf]ctest* [cf]orphan*



------------------------------------------------------------------------------

V.   Contact and Support
==============================================================================

Contact: http://www.cs.uh.edu/~hpctools
