Index: Makefile =================================================================== --- Makefile +++ Makefile @@ -34,14 +34,19 @@ # 3. Compiler selection and Flags ######################################################### -# GNU Compiler -CC = gcc -CFLAGS = -fopenmp -lm -O3 -CFLAGS = -fopenmp -lm -O3 +# CLANG Compiler +CC = clang +CFLAGS = -fopenmp -S -emit-llvm FC = gfortran FFLAGS = -fopenmp -lm FFLAGS = -fopenmp -lm -O3 +# GNU Compiler +# CC = gcc +# CFLAGS = -fopenmp -lm -O3 +# FC = gfortran +# FFLAGS = -fopenmp -lm +# FFLAGS = -fopenmp -lm -O3 # Fujitsu Compilers: #CC = fcc @@ -148,6 +153,10 @@ #FC = uhf90 #FFLAGS = -mp +# Check path +FILE=LLVM-IR/lit.tmp +CHECK_PATH=`cat $(FILE)` + ######################################################################### help: @@ -170,9 +179,11 @@ @echo " cleanlogs" @echo " Remove all *.log files from bin/ directory" @echo " clean" - @echo " Remove all sources and executables from bin/ directory" - @echo " cleanall" - @echo " Remove the entire bin/ directory" + @echo " Clean out and log files" + @echo " distclean" + @echo " Clean arch test directory with clean" + @echo " veryclean" + @echo " Remove the entire bin/c directory with distclean" omp_my_sleep: mkdir -p bin/c @@ -187,6 +198,7 @@ ctest: omp_my_sleep omp_testsuite ./runtest.pl --lang=c testlist-c.txt + cd bin/; make -j ftest: mkdir -p bin/fortran @@ -209,14 +221,18 @@ cleansrcs: find bin/ -iname "*.[cf]" -exec rm {} \; cleanbins: - find bin/ -perm /a+x -type f -exec rm {} \; + find bin/c -perm /a+x -type f -exec rm {} \; cleanouts: find bin/ -iname "*.out" -exec rm {} \; cleanlogs: find bin/ -iname "*.log" -exec rm {} \; -clean: cleansrcs cleanbins +clean: cleanouts cleanlogs -cleanall: - rm -rf bin/ +distclean: clean + rm -rf bin/c/* + rm -rf LLVM-IR/$(CHECK_PATH) +veryclean: distclean + rm -rf bin/c/ + Index: README =================================================================== --- README +++ README @@ -1,334 +1,45 @@ ============================================================================ -| OpenMP Validation Suite V 3.0 | -| High Performance Computing Center, Stuttgart | -| High Performance Computing and Tools, University of Houston | -| Jan. 2012 | +| To use the OpenMP Validation Suite for testing | +| LLVM OpenMP Implementation | +| High Performance Computing and Tools, | +| University of Houston | +| Jan. 2015 | ============================================================================ +Two new files have been added to openmp/runtime: check-openmp.pl and check-openmp-test.pl +Go to /openmp/testsuite, run make check-openmp. -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 - ------------------------------------------------------------------------------ +Files and Directories -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 - - + c directory containing the templates for the c tests + fortran directory containing the templates for the Fortran + Makefile Makefile containing options for compilation + README the README file for to use the OpenMP test-suite + README_OpenMP_Validation_Suite README file on the Validation Suite, templates, etc., + as a basis for testing the LLVM OpenMP implementation. + LLVM_IR directory containing target-specific IR files + lin_32e directory containing target-specific tmp files + bin/c directory containing LLVM IR files + bin/lit files In the lit model, every test must exist inside some test suite. + lit resolves the inputs specified on the command line to + test suites by searching upwards from the input path + until it finds a lit.cfg or lit.site.cfg file. + These files serve as both a marker of test suites and + as configuration files which lit loads in order to + understand how to find and run the tests inside the test suite. + bin/header header for the tests, calls clang driver for the test, + and executes the resulting executable + bin/Makefile to generate LLVM_IR files + bin/distribute.sh generates LLVM_IR files, finds the architecture and OS, moves + the generated IR files to the corresponding folder + runtime/tools/check-openmp.pl retrieving the right path + runtime/tools/ + check-openmp-test.pl Returns the architecture and OS, e.g. lin_32e ------------------------------------------------------------------------------ -II. USAGE +Contact and Support ============================================================================== - -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 -'' and ends with ''. - -In between there are several other blocks holding information: - -- In between this tag you can - give a description on what the test checks and how it works. - -- This tag is used to specify the - OpenMP-version which includes the tested directive. - -- Used to specify the directive how it is - called in the programming language. - -- 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 ','. - -- 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 '' 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 ' ' tag. - -If there are differences between test and crosstest you can use the - and tag. -When generating the test the parser will use the code enclosed in - tags and cut out the code written in 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 - tag and later the crosstest in one 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 -! - -- 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 tag. For -further information see the description of the tag. - -- 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 +Contact: http://www.cs.uh.edu/~hpctools/ Index: bin/Makefile =================================================================== --- bin/Makefile +++ bin/Makefile @@ -0,0 +1,23 @@ +CC = clang +CFLAGS = -fopenmp -S -emit-llvm +INCL = +LIBS = + +BIN = +SRC_DIR = ./c +SRC_FILES := $(foreach DIR, $(SRC_DIR), $(wildcard $(SRC_DIR)/*.c)) +OBJS := $(patsubst %.c, %.o, $(SRC_FILES)) +TARGETLIST := $(patsubst %.c, %, $(SRC_FILES)) + +all:$(TARGETLIST) + ./distribute.sh + @ echo all done + +.PHONY: clean + +$(TARGETLIST): $(SRC_FILES) + $(CC) $(CFLAGS) $(LIBS) $(INCL) $@.c -o $@.ll + +clean: + @ rm -rf c/* + @ echo clean bin done Index: bin/distribute.sh =================================================================== --- bin/distribute.sh +++ bin/distribute.sh @@ -0,0 +1,125 @@ +#!/bin/bash + +# add header for .ll files + +# get tmp header +cp header /tmp/tmp.header +echo >> /tmp/tmp.header + +# create temporary test package +mkdir c-$MACHTYPE$OSTYPE +`cp c/*.ll c-$MACHTYPE$OSTYPE/` + +# add new header into .ll files +for file in c-$MACHTYPE$OSTYPE/* +do + cp $file /tmp/tmp.ll.bf + cat /tmp/tmp.header /tmp/tmp.ll.bf > /tmp/tmp.ll + mv /tmp/tmp.ll $file +done + + +# in bin/, target is ../LLVM-IR/ARCH/OS +LEVEL=../LLVM-IR/ +ARCH_PATH=../LLVM-IR/ +OS_PATH=../LLVM-IR/ + +# for linux system, add your arch and os here +declare -a ARCHes=(x86 x86_64 powerpc arm mips darwin) +declare -a OSes=(linux macosx windows darwin) + +declare lowerARCH +declare lowerOS + +# target directory name +declare upperARCH +declare upperOS + +lowerARCH=$(echo "$MACHTYPE" | tr '[:upper:]' '[:lower:]') +lowerOS=$(echo "$OSTYPE" | tr '[:upper:]' '[:lower:]') + +# ARCH +for i in ${ARCHes[@]} +do + result=$(echo "${lowerARCH}" | grep $i) + if [[ "$result" != "" ]] + then + # upperARCH=$i + upperARCH=$(echo "$i" | tr '[:lower:]' '[:upper:]') + fi +done + +if [[ "$upperARCH" == "" ]] +then + echo "Not found ${lowerARCH} in the [${ARCHes[@]}]!" + exit +fi + +# OS +for i in ${OSes[@]} +do + result=$(echo "${lowerOS}" | grep $i) + if [[ "$result" != "" ]] + then + # upperOS=$i + upperOS=$(echo "$i" | tr '[:lower:]' '[:upper:]') + fi +done + +if [[ "$upperOS" == "" ]] +then + echo "Not found ${lowerOS} in the [${OSes[@]}]!" + exit +fi + +# survived, assemble the path +# ARCH_PATH+=$upperARCH/ +# OS_PATH+=$upperARCH/$upperOS/ +ARCH_newFormat=. +if [ $upperARCH = "X86" ]; then + ARCH_newFormat=32 +else + ARCH_newFormat=32e +fi +OS_newFormat=. +if [ $upperOS = "LINUX" ]; then + OS_newFormat=lin +elif [ $upperOS = "MACOSX" ]; then + OS_newFormat=mac +elif [ $upperOS = "WINDOWS" ]; then + OS_newFormat=win +elif [ $upperOS = "DARWIN" ]; then + OS_newFormat=dar +else + OS_newFormat=unknown +fi +OS_PATH+=$OS_newFormat"_"$ARCH_newFormat + +# test and create directory +if [ ! -d "$LEVEL" ]; then + mkdir $LEVEL + mkdir $OS_PATH +else + if [ ! -d "$OS_PATH" ]; then + mkdir $OS_PATH + fi +fi + +# reserve the tmp path to LLVM-IR/ARCH/OS +echo $OS_PATH"/" > lit.tmp + +# OS_ARCH=$OS_newFormat"_"$ARCH_newFormat +# echo -e "if not '$OS_ARCH' in config.root.targets:" > $OS_PATH'/'lit.local.cfg +# echo -e "\tconfig.unsupported = True" >> $OS_PATH'/'lit.local.cfg + +# copy *.ll files to ARCH/OS +`cp lit.* $LEVEL` + +# omit orph test +`rm c-$MACHTYPE$OSTYPE/ctest_*.ll` +`rm c-$MACHTYPE$OSTYPE/orph_ctest_*.ll` +`cp c-$MACHTYPE$OSTYPE/*.ll $OS_PATH` + +# clean +`rm /tmp/tmp.*` +rm -rf c-$MACHTYPE$OSTYPE/ Index: bin/header =================================================================== --- bin/header +++ bin/header @@ -0,0 +1,6 @@ +; RUN: %clang -liomp5 -lm %s -o %t && %t 2>&1 | FileCheck %s +; CHECK-NOT: Test failed +; CHECK: Directive worked without errors + + + Index: bin/lit.cfg =================================================================== --- bin/lit.cfg +++ bin/lit.cfg @@ -0,0 +1,78 @@ +# -*- Python -*- + +# Configuration file for the 'lit' test runner. + +import os +import sys +import re +import platform + +try: + import lit.util + import lit.formats +except ImportError: + pass + +# name: The name of this test suite. +config.name = 'OpenMPValidationSuite' + +# testFormat: The test format to use to interpret tests. +config.test_format = lit.formats.ShTest(execute_external=False) + +# suffixes: A list of file extensions to treat as test files +# Note this can be overridden by lit.local.cfg files +config.suffixes = ['.ll'] + +# test_source_root: The root path where tests are located. +#config.test_source_root = "/home/ichoyjx/install/openmp/testsuite/bin" +#os.path.dirname(__file__) + +# test_exec_root: The root path where tests should be run. +#mpvs_obj_root = getattr(config, 'mpvs_obj_root', None) +#if mpvs_obj_root is not None: +config.test_exec_root = "./" +#os.path.join(mpvs_obj_root, 'src') + +# Discover the 'clang' and 'clangcc' to use. + +import os + +def inferClang(PATH): + # Determine which clang to use. + clang = os.getenv('CLANG') + + # If the user set clang in the environment, definitely use that and don't + # try to validate. + if clang: + return clang + + # Otherwise look in the path. + clang = lit.util.which('clang', PATH) + + if not clang: + lit_config.fatal("couldn't find 'clang' program, try setting " + "CLANG in your environment") + + return clang + +config.clang = inferClang(config.environment['PATH']).replace('\\', '/') +config.substitutions.append( ('%clang', ' ' + config.clang + ' ') ) + +# Propogate some environment variable to test environment. +def addEnv(name): + if name in os.environ: + config.environment[name] = os.environ[name] + +addEnv('HOME') +addEnv('PWD') + + +addEnv('C_INCLUDE_PATH') +addEnv('CPLUS_INCLUDE_PATH') +addEnv('LIBRARY_PATH') +addEnv('LD_LIBRARY_PATH') +addEnv('DYLD_LIBRARY_PATH') + +# Check that the object root is known. +if config.test_exec_root is None: + lit.fatal('test execution root not set!') Index: bin/lit.site.cfg.in =================================================================== --- bin/lit.site.cfg.in +++ bin/lit.site.cfg.in @@ -0,0 +1,30 @@ +## Autogenerated by LLVM/Clang configuration. +#config.mpvs_src_root = "/home/ichoyjx/install/openmp/testsuite/bin/c" +config.mpvs_obj_root = "/tmp" +config.llvm_tools_dir = "@LLVM_TOOLS_DIR@" + + +# Needed to check if a hack needs to be applied +config.llvm_version_major = "@LLVM_VERSION_MAJOR@" + +# Compilers +# FIXME: use llvmcc not llvmgcc +config.llvmclang = "clang" + +# Features +config.enable_uclibc = True if @ENABLE_UCLIBC@ == 1 else False +config.enable_posix_runtime = True if @ENABLE_POSIX_RUNTIME@ == 1 else False +config.have_selinux = True if @HAVE_SELINUX@ == 1 else False + +# Current target +config.target_triple = "@TARGET_TRIPLE@" + +# Let the main config do the real work. +try: + lit +except NameError: + # Use lit_config class + lit_config.load_config(config, "@MPVS_SOURCE_DIR@/lit.cfg") +else: + # Use old lit class + lit.load_config(config, "@MPVS_SOURCE_DIR@/lit.cfg") Index: bin/lit.tmp =================================================================== --- bin/lit.tmp +++ bin/lit.tmp @@ -0,0 +1 @@ +../LLVM-IR/lin_32e/ Index: omp_testsuite.h =================================================================== --- omp_testsuite.h +++ omp_testsuite.h @@ -26,139 +26,139 @@ /**********************************************************/ #define NUM_TASKS 25 #define MAX_TASKS_PER_THREAD 5 -int test_omp_nested(FILE * logfile); /* Test for omp_nested */ -int crosstest_omp_nested(FILE * logfile); /* Crosstest for omp_nested */ -int test_omp_nest_lock(FILE * logfile); /* Test for omp_nest_lock */ -int crosstest_omp_nest_lock(FILE * logfile); /* Crosstest for omp_nest_lock */ -int test_omp_task_if(FILE * logfile); /* Test for omp task if */ -int crosstest_omp_task_if(FILE * logfile); /* Crosstest for omp task if */ +int test_omp_parallel_for_ordered(FILE * logfile); /* Test for omp parallel for ordered */ +int crosstest_omp_parallel_for_ordered(FILE * logfile); /* Crosstest for omp parallel for ordered */ +int test_omp_task_imp_firstprivate(FILE * logfile); /* Test for omp task */ +int crosstest_omp_task_imp_firstprivate(FILE * logfile); /* Crosstest for omp task */ +int test_omp_taskwait(FILE * logfile); /* Test for omp taskwait */ +int crosstest_omp_taskwait(FILE * logfile); /* Crosstest for omp taskwait */ +int test_omp_barrier(FILE * logfile); /* Test for omp barrier */ +int crosstest_omp_barrier(FILE * logfile); /* Crosstest for omp barrier */ +int test_omp_parallel_for_if(FILE * logfile); /* Test for omp parallel for if */ +int crosstest_omp_parallel_for_if(FILE * logfile); /* Crosstest for omp parallel for if */ +int test_omp_atomic(FILE * logfile); /* Test for omp atomic */ +int crosstest_omp_atomic(FILE * logfile); /* Crosstest for omp atomic */ +int test_omp_get_num_threads(FILE * logfile); /* Test for omp_get_num_threads */ +int crosstest_omp_get_num_threads(FILE * logfile); /* Crosstest for omp_get_num_threads */ +int test_omp_section_private(FILE * logfile); /* Test for omp section private */ +int crosstest_omp_section_private(FILE * logfile); /* Crosstest for omp section private */ +int test_omp_parallel_if(FILE * logfile); /* Test for omp parallel if */ +int crosstest_omp_parallel_if(FILE * logfile); /* Crosstest for omp parallel if */ +int test_omp_lock(FILE * logfile); /* Test for omp_lock */ +int crosstest_omp_lock(FILE * logfile); /* Crosstest for omp_lock */ int test_omp_parallel_shared(FILE * logfile); /* Test for omp parallel shared */ int crosstest_omp_parallel_shared(FILE * logfile); /* Crosstest for omp parallel shared */ +int test_omp_task_imp_shared(FILE * logfile); /* Test for omp task */ +int crosstest_omp_task_imp_shared(FILE * logfile); /* Crosstest for omp task */ +int test_omp_task_private(FILE * logfile); /* Test for omp task private */ +int crosstest_omp_task_private(FILE * logfile); /* Crosstest for omp task private */ +int test_omp_section_lastprivate(FILE * logfile); /* Test for omp section lastprivate */ +int crosstest_omp_section_lastprivate(FILE * logfile); /* Crosstest for omp section lastprivate */ +int test_omp_parallel_firstprivate(FILE * logfile); /* Test for omp parallel firstprivate */ +int crosstest_omp_parallel_firstprivate(FILE * logfile); /* Crosstest for omp parallel firstprivate */ +int test_omp_for_auto(FILE * logfile); /* Test for omp for auto */ +int crosstest_omp_for_auto(FILE * logfile); /* Crosstest for omp for auto */ +int test_omp_for_schedule_static(FILE * logfile); /* Test for omp for schedule(static) */ +int crosstest_omp_for_schedule_static(FILE * logfile); /* Crosstest for omp for schedule(static) */ +int test_omp_threadprivate_for(FILE * logfile); /* Test for omp threadprivate */ +int crosstest_omp_threadprivate_for(FILE * logfile); /* Crosstest for omp threadprivate */ +int test_omp_task_untied(FILE * logfile); /* Test for omp task untied */ +int crosstest_omp_task_untied(FILE * logfile); /* Crosstest for omp task untied */ +int test_omp_parallel_private(FILE * logfile); /* Test for omp parallel private */ +int crosstest_omp_parallel_private(FILE * logfile); /* Crosstest for omp parallel private */ +int test_omp_single_nowait(FILE * logfile); /* Test for omp single nowait */ +int crosstest_omp_single_nowait(FILE * logfile); /* Crosstest for omp single nowait */ +int test_omp_critical(FILE * logfile); /* Test for omp critical */ +int crosstest_omp_critical(FILE * logfile); /* Crosstest for omp critical */ +int test_omp_get_wtick(FILE * logfile); /* Test for omp_get_wtick */ +int crosstest_omp_get_wtick(FILE * logfile); /* Crosstest for omp_get_wtick */ int test_omp_single(FILE * logfile); /* Test for omp single */ int crosstest_omp_single(FILE * logfile); /* Crosstest for omp single */ int test_omp_parallel_sections_reduction(FILE * logfile); /* Test for omp parallel sections reduction */ int crosstest_omp_parallel_sections_reduction(FILE * logfile); /* Crosstest for omp parallel sections reduction */ -int test_omp_for_schedule_dynamic(FILE * logfile); /* Test for omp for schedule(dynamic) */ -int crosstest_omp_for_schedule_dynamic(FILE * logfile); /* Crosstest for omp for schedule(dynamic) */ +int test_omp_taskyield(FILE * logfile); /* Test for omp taskyield */ +int crosstest_omp_taskyield(FILE * logfile); /* Crosstest for omp taskyield */ int test_has_openmp(FILE * logfile); /* Test for _OPENMP */ int crosstest_has_openmp(FILE * logfile); /* Crosstest for _OPENMP */ -int test_omp_taskwait(FILE * logfile); /* Test for omp taskwait */ -int crosstest_omp_taskwait(FILE * logfile); /* Crosstest for omp taskwait */ int test_omp_parallel_for_lastprivate(FILE * logfile); /* Test for omp parallel for lastprivate */ int crosstest_omp_parallel_for_lastprivate(FILE * logfile); /* Crosstest for omp parallel for lastprivate */ -int test_omp_for_schedule_static_3(FILE * logfile); /* Test for omp for schedule(static) */ -int crosstest_omp_for_schedule_static_3(FILE * logfile); /* Crosstest for omp for schedule(static) */ -int test_omp_critical(FILE * logfile); /* Test for omp critical */ -int crosstest_omp_critical(FILE * logfile); /* Crosstest for omp critical */ int test_omp_parallel_sections_lastprivate(FILE * logfile); /* Test for omp parallel sections lastprivate */ int crosstest_omp_parallel_sections_lastprivate(FILE * logfile); /* Crosstest for omp parallel sections lastprivate */ +int test_omp_for_lastprivate(FILE * logfile); /* Test for omp for lastprivate */ +int crosstest_omp_for_lastprivate(FILE * logfile); /* Crosstest for omp for lastprivate */ +int test_omp_parallel_sections_firstprivate(FILE * logfile); /* Test for omp parallel sections firstprivate */ +int crosstest_omp_parallel_sections_firstprivate(FILE * logfile); /* Crosstest for omp parallel sections firstprivate */ +int test_omp_parallel_for_reduction(FILE * logfile); /* Test for omp parallel for reduction */ +int crosstest_omp_parallel_for_reduction(FILE * logfile); /* Crosstest for omp parallel for reduction */ +int test_omp_test_lock(FILE * logfile); /* Test for omp_test_lock */ +int crosstest_omp_test_lock(FILE * logfile); /* Crosstest for omp_test_lock */ +int test_omp_parallel_for_firstprivate(FILE * logfile); /* Test for omp parallel for firstprivate */ +int crosstest_omp_parallel_for_firstprivate(FILE * logfile); /* Crosstest for omp parallel for firstprivate */ +int test_omp_parallel_sections_private(FILE * logfile); /* Test for omp parallel sections private */ +int crosstest_omp_parallel_sections_private(FILE * logfile); /* Crosstest for omp parallel sections private */ int test_omp_parallel_num_threads(FILE * logfile); /* Test for omp parellel num_threads */ int crosstest_omp_parallel_num_threads(FILE * logfile); /* Crosstest for omp parellel num_threads */ +int test_omp_for_reduction(FILE * logfile); /* Test for omp for reduction */ +int crosstest_omp_for_reduction(FILE * logfile); /* Crosstest for omp for reduction */ +int test_omp_sections_nowait(FILE * logfile); /* Test for omp parallel sections nowait */ +int crosstest_omp_sections_nowait(FILE * logfile); /* Crosstest for omp parallel sections nowait */ +int test_omp_parallel_reduction(FILE * logfile); /* Test for omp parallel reduction */ +int crosstest_omp_parallel_reduction(FILE * logfile); /* Crosstest for omp parallel reduction */ +int test_omp_nested(FILE * logfile); /* Test for omp_nested */ +int crosstest_omp_nested(FILE * logfile); /* Crosstest for omp_nested */ +int test_omp_threadprivate(FILE * logfile); /* Test for omp threadprivate */ +int crosstest_omp_threadprivate(FILE * logfile); /* Crosstest for omp threadprivate */ int test_omp_sections_reduction(FILE * logfile); /* Test for omp sections reduction */ int crosstest_omp_sections_reduction(FILE * logfile); /* Crosstest for omp sections reduction */ -int test_omp_parallel_if(FILE * logfile); /* Test for omp parallel if */ -int crosstest_omp_parallel_if(FILE * logfile); /* Crosstest for omp parallel if */ -int test_omp_task_imp_shared(FILE * logfile); /* Test for omp task */ -int crosstest_omp_task_imp_shared(FILE * logfile); /* Crosstest for omp task */ -int test_omp_section_lastprivate(FILE * logfile); /* Test for omp section lastprivate */ -int crosstest_omp_section_lastprivate(FILE * logfile); /* Crosstest for omp section lastprivate */ +int test_omp_for_schedule_guided(FILE * logfile); /* Test for omp for schedule(guided) */ +int crosstest_omp_for_schedule_guided(FILE * logfile); /* Crosstest for omp for schedule(guided) */ +int test_omp_task_final(FILE * logfile); /* Test for omp task final */ +int crosstest_omp_task_final(FILE * logfile); /* Crosstest for omp task final */ +int test_omp_parallel_for_private(FILE * logfile); /* Test for omp parallel for private */ +int crosstest_omp_parallel_for_private(FILE * logfile); /* Crosstest for omp parallel for private */ +int test_omp_flush(FILE * logfile); /* Test for omp flush */ +int crosstest_omp_flush(FILE * logfile); /* Crosstest for omp flush */ +int test_omp_for_private(FILE * logfile); /* Test for omp for private */ +int crosstest_omp_for_private(FILE * logfile); /* Crosstest for omp for private */ +int test_omp_for_ordered(FILE * logfile); /* Test for omp for ordered */ +int crosstest_omp_for_ordered(FILE * logfile); /* Crosstest for omp for ordered */ +int test_omp_single_copyprivate(FILE * logfile); /* Test for omp single copyprivate */ +int crosstest_omp_single_copyprivate(FILE * logfile); /* Crosstest for omp single copyprivate */ +int test_omp_task_if(FILE * logfile); /* Test for omp task if */ +int crosstest_omp_task_if(FILE * logfile); /* Crosstest for omp task if */ +int test_omp_section_firstprivate(FILE * logfile); /* Test for omp firstprivate */ +int crosstest_omp_section_firstprivate(FILE * logfile); /* Crosstest for omp firstprivate */ +int test_omp_for_schedule_static_3(FILE * logfile); /* Test for omp for schedule(static) */ +int crosstest_omp_for_schedule_static_3(FILE * logfile); /* Crosstest for omp for schedule(static) */ +int test_omp_task_firstprivate(FILE * logfile); /* Test for omp task firstprivate */ +int crosstest_omp_task_firstprivate(FILE * logfile); /* Crosstest for omp task firstprivate */ int test_omp_for_collapse(FILE * logfile); /* Test for omp for collapse */ int crosstest_omp_for_collapse(FILE * logfile); /* Crosstest for omp for collapse */ -int test_omp_parallel_for_firstprivate(FILE * logfile); /* Test for omp parallel for firstprivate */ -int crosstest_omp_parallel_for_firstprivate(FILE * logfile); /* Crosstest for omp parallel for firstprivate */ -int test_omp_parallel_copyin(FILE * logfile); /* Test for omp parallel copyin */ -int crosstest_omp_parallel_copyin(FILE * logfile); /* Crosstest for omp parallel copyin */ -int test_omp_test_nest_lock(FILE * logfile); /* Test for omp_test_nest_lock */ -int crosstest_omp_test_nest_lock(FILE * logfile); /* Crosstest for omp_test_nest_lock */ -int test_omp_for_ordered(FILE * logfile); /* Test for omp for ordered */ -int crosstest_omp_for_ordered(FILE * logfile); /* Crosstest for omp for ordered */ -int test_omp_parallel_reduction(FILE * logfile); /* Test for omp parallel reduction */ -int crosstest_omp_parallel_reduction(FILE * logfile); /* Crosstest for omp parallel reduction */ -int test_omp_get_wtick(FILE * logfile); /* Test for omp_get_wtick */ -int crosstest_omp_get_wtick(FILE * logfile); /* Crosstest for omp_get_wtick */ -int test_omp_taskyield(FILE * logfile); /* Test for omp taskyield */ -int crosstest_omp_taskyield(FILE * logfile); /* Crosstest for omp taskyield */ -int test_omp_for_schedule_static(FILE * logfile); /* Test for omp for schedule(static) */ -int crosstest_omp_for_schedule_static(FILE * logfile); /* Crosstest for omp for schedule(static) */ -int test_omp_single_private(FILE * logfile); /* Test for omp singel private */ -int crosstest_omp_single_private(FILE * logfile); /* Crosstest for omp singel private */ +int test_omp_in_parallel(FILE * logfile); /* Test for omp_in_parallel */ +int crosstest_omp_in_parallel(FILE * logfile); /* Crosstest for omp_in_parallel */ +int test_omp_for_schedule_dynamic(FILE * logfile); /* Test for omp for schedule(dynamic) */ +int crosstest_omp_for_schedule_dynamic(FILE * logfile); /* Crosstest for omp for schedule(dynamic) */ int test_omp_for_firstprivate(FILE * logfile); /* Test for omp for firstprivate */ int crosstest_omp_for_firstprivate(FILE * logfile); /* Crosstest for omp for firstprivate */ -int test_omp_parallel_for_reduction(FILE * logfile); /* Test for omp parallel for reduction */ -int crosstest_omp_parallel_for_reduction(FILE * logfile); /* Crosstest for omp parallel for reduction */ -int test_omp_parallel_for_if(FILE * logfile); /* Test for omp parallel for if */ -int crosstest_omp_parallel_for_if(FILE * logfile); /* Crosstest for omp parallel for if */ -int test_omp_single_nowait(FILE * logfile); /* Test for omp single nowait */ -int crosstest_omp_single_nowait(FILE * logfile); /* Crosstest for omp single nowait */ -int test_omp_task_firstprivate(FILE * logfile); /* Test for omp task firstprivate */ -int crosstest_omp_task_firstprivate(FILE * logfile); /* Crosstest for omp task firstprivate */ -int test_omp_for_nowait(FILE * logfile); /* Test for omp parallel for nowait */ -int crosstest_omp_for_nowait(FILE * logfile); /* Crosstest for omp parallel for nowait */ -int test_omp_task_private(FILE * logfile); /* Test for omp task private */ -int crosstest_omp_task_private(FILE * logfile); /* Crosstest for omp task private */ -int test_omp_test_lock(FILE * logfile); /* Test for omp_test_lock */ -int crosstest_omp_test_lock(FILE * logfile); /* Crosstest for omp_test_lock */ -int test_omp_get_wtime(FILE * logfile); /* Test for omp_get_wtime */ -int crosstest_omp_get_wtime(FILE * logfile); /* Crosstest for omp_get_wtime */ -int test_omp_task_imp_firstprivate(FILE * logfile); /* Test for omp task */ -int crosstest_omp_task_imp_firstprivate(FILE * logfile); /* Crosstest for omp task */ -int test_omp_atomic(FILE * logfile); /* Test for omp atomic */ -int crosstest_omp_atomic(FILE * logfile); /* Crosstest for omp atomic */ -int test_omp_threadprivate_for(FILE * logfile); /* Test for omp threadprivate */ -int crosstest_omp_threadprivate_for(FILE * logfile); /* Crosstest for omp threadprivate */ -int test_omp_single_copyprivate(FILE * logfile); /* Test for omp single copyprivate */ -int crosstest_omp_single_copyprivate(FILE * logfile); /* Crosstest for omp single copyprivate */ int test_omp_master(FILE * logfile); /* Test for omp master */ int crosstest_omp_master(FILE * logfile); /* Crosstest for omp master */ -int test_omp_parallel_firstprivate(FILE * logfile); /* Test for omp parallel firstprivate */ -int crosstest_omp_parallel_firstprivate(FILE * logfile); /* Crosstest for omp parallel firstprivate */ -int test_omp_parallel_for_private(FILE * logfile); /* Test for omp parallel for private */ -int crosstest_omp_parallel_for_private(FILE * logfile); /* Crosstest for omp parallel for private */ +int test_omp_single_private(FILE * logfile); /* Test for omp singel private */ +int crosstest_omp_single_private(FILE * logfile); /* Crosstest for omp singel private */ +int test_omp_task(FILE * logfile); /* Test for omp task */ +int crosstest_omp_task(FILE * logfile); /* Crosstest for omp task */ int test_omp_parallel_default(FILE * logfile); /* Test for omp parallel default */ int crosstest_omp_parallel_default(FILE * logfile); /* Crosstest for omp parallel default */ -int test_omp_parallel_for_ordered(FILE * logfile); /* Test for omp parallel for ordered */ -int crosstest_omp_parallel_for_ordered(FILE * logfile); /* Crosstest for omp parallel for ordered */ -int test_omp_for_lastprivate(FILE * logfile); /* Test for omp for lastprivate */ -int crosstest_omp_for_lastprivate(FILE * logfile); /* Crosstest for omp for lastprivate */ -int test_omp_lock(FILE * logfile); /* Test for omp_lock */ -int crosstest_omp_lock(FILE * logfile); /* Crosstest for omp_lock */ -int test_omp_barrier(FILE * logfile); /* Test for omp barrier */ -int crosstest_omp_barrier(FILE * logfile); /* Crosstest for omp barrier */ -int test_omp_sections_nowait(FILE * logfile); /* Test for omp parallel sections nowait */ -int crosstest_omp_sections_nowait(FILE * logfile); /* Crosstest for omp parallel sections nowait */ +int test_omp_for_nowait(FILE * logfile); /* Test for omp parallel for nowait */ +int crosstest_omp_for_nowait(FILE * logfile); /* Crosstest for omp parallel for nowait */ +int test_omp_test_nest_lock(FILE * logfile); /* Test for omp_test_nest_lock */ +int crosstest_omp_test_nest_lock(FILE * logfile); /* Crosstest for omp_test_nest_lock */ +int test_omp_nest_lock(FILE * logfile); /* Test for omp_nest_lock */ +int crosstest_omp_nest_lock(FILE * logfile); /* Crosstest for omp_nest_lock */ +int test_omp_parallel_copyin(FILE * logfile); /* Test for omp parallel copyin */ +int crosstest_omp_parallel_copyin(FILE * logfile); /* Crosstest for omp parallel copyin */ int test_omp_master_3(FILE * logfile); /* Test for omp master */ int crosstest_omp_master_3(FILE * logfile); /* Crosstest for omp master */ -int test_omp_task_untied(FILE * logfile); /* Test for omp task untied */ -int crosstest_omp_task_untied(FILE * logfile); /* Crosstest for omp task untied */ -int test_omp_task(FILE * logfile); /* Test for omp task */ -int crosstest_omp_task(FILE * logfile); /* Crosstest for omp task */ -int test_omp_in_parallel(FILE * logfile); /* Test for omp_in_parallel */ -int crosstest_omp_in_parallel(FILE * logfile); /* Crosstest for omp_in_parallel */ -int test_omp_parallel_sections_firstprivate(FILE * logfile); /* Test for omp parallel sections firstprivate */ -int crosstest_omp_parallel_sections_firstprivate(FILE * logfile); /* Crosstest for omp parallel sections firstprivate */ -int test_omp_for_auto(FILE * logfile); /* Test for omp for auto */ -int crosstest_omp_for_auto(FILE * logfile); /* Crosstest for omp for auto */ -int test_omp_task_final(FILE * logfile); /* Test for omp task final */ -int crosstest_omp_task_final(FILE * logfile); /* Crosstest for omp task final */ -int test_omp_section_private(FILE * logfile); /* Test for omp section private */ -int crosstest_omp_section_private(FILE * logfile); /* Crosstest for omp section private */ -int test_omp_parallel_sections_private(FILE * logfile); /* Test for omp parallel sections private */ -int crosstest_omp_parallel_sections_private(FILE * logfile); /* Crosstest for omp parallel sections private */ -int test_omp_for_reduction(FILE * logfile); /* Test for omp for reduction */ -int crosstest_omp_for_reduction(FILE * logfile); /* Crosstest for omp for reduction */ -int test_omp_for_private(FILE * logfile); /* Test for omp for private */ -int crosstest_omp_for_private(FILE * logfile); /* Crosstest for omp for private */ -int test_omp_flush(FILE * logfile); /* Test for omp flush */ -int crosstest_omp_flush(FILE * logfile); /* Crosstest for omp flush */ -int test_omp_parallel_private(FILE * logfile); /* Test for omp parallel private */ -int crosstest_omp_parallel_private(FILE * logfile); /* Crosstest for omp parallel private */ -int test_omp_threadprivate(FILE * logfile); /* Test for omp threadprivate */ -int crosstest_omp_threadprivate(FILE * logfile); /* Crosstest for omp threadprivate */ -int test_omp_section_firstprivate(FILE * logfile); /* Test for omp firstprivate */ -int crosstest_omp_section_firstprivate(FILE * logfile); /* Crosstest for omp firstprivate */ -int test_omp_for_schedule_guided(FILE * logfile); /* Test for omp for schedule(guided) */ -int crosstest_omp_for_schedule_guided(FILE * logfile); /* Crosstest for omp for schedule(guided) */ -int test_omp_get_num_threads(FILE * logfile); /* Test for omp_get_num_threads */ -int crosstest_omp_get_num_threads(FILE * logfile); /* Crosstest for omp_get_num_threads */ +int test_omp_get_wtime(FILE * logfile); /* Test for omp_get_wtime */ +int crosstest_omp_get_wtime(FILE * logfile); /* Crosstest for omp_get_wtime */ #endif Index: ompts_standaloneProc.c =================================================================== --- ompts_standaloneProc.c +++ ompts_standaloneProc.c @@ -5,7 +5,7 @@ int failed=0; /* Number of failed tests */ int success=0; /* number of succeeded tests */ static FILE * logFile; /* pointer onto the logfile */ - static const char * logFileName = "bin/c/.log"; /* name of the logfile */ + static const char * logFileName = ".log"; /* name of the logfile */ /* Open a new Logfile or overwrite the existing one. */