#!/bin/sh # # author : A. Hebert # use : rganlib [-c:|-q|-w|-p:|-i:] # note : must be located on directory ./data/ # If exists, it is executed. # -c name of compiler # -q quiet execution for regression testing # -w to execute in console (for debug purpose) # -p number of parallel threads (=1 by default) # -i name of x2m dataset (by default, use the last argument) # if [ $# = 0 ] then echo "usage: rganlib [-c:|-q|-w|-p:|-i:] " 1>&2 exit 1 fi System=`uname -s` Sysx="`echo $System | cut -b -6`" if [ $Sysx = "CYGWIN" ]; then MACH=`uname -o` elif [ $Sysx = "AIX" ]; then MACH=`uname -s` else MACH=`uname -sm | sed 's/[ ]/_/'` fi for last; do : ; done mydata=${last} typ='custom' quiet=0 term=0 nomp=0 while getopts ":c:qwi:p:" opt; do case $opt in c) typ="$OPTARG" ;; q) quiet=1 ;; w) term=1 ;; p) nomp=$OPTARG ;; i) mydata=$OPTARG ;; \?) echo "Invalid option -$OPTARG" >&2 exit 1 ;; esac case $OPTARG in -*) echo "Option $opt needs a valid argument" exit 1 ;; esac done xxx=`basename $mydata .x2m` Code=`basename "$PWD"` if [ $quiet = 0 ]; then echo 'execute' $xxx 'with' $Code 'on system' $MACH 'with' $typ 'compiler' fi if [ -d "$MACH" ]; then if [ $quiet = 0 ]; then echo 'use the existing directory' $MACH fi else echo 'creation of directory' $MACH mkdir "$MACH" fi CodeDir=$PWD if [ $Sysx = "AIX" ]; then Tmpdir=/usr/tmp elif [ $Sysx = "SunOS" ]; then Tmpdir=/var/tmp else Tmpdir=/tmp fi inum=1 while [ -d $Tmpdir/rundir$inum ] do inum=`expr $inum + 1 ` done Rundir=$Tmpdir/rundir$inum mkdir $Rundir if [ $quiet = 0 ]; then echo "RunDirectory:" $Rundir fi cd $Rundir if [ $typ = 'custom' ]; then cp "$CodeDir"/bin/"$MACH"/$Code ./code else cp "$CodeDir"/bin/"$MACH"'_'$typ/$Code ./code fi cp "$CodeDir"/data/$mydata ./mydata export NO_STOP_MESSAGE=1 if [ -d "$CodeDir"/data/`echo $xxx`_proc ]; then cp "$CodeDir"/data/`echo $xxx`_proc/*.c2m . 2> /dev/null fi if [ -f "$CodeDir"/data/$xxx.access ]; then if [ $quiet = 0 ]; then "$CodeDir"/data/$xxx.access "$CodeDir" else "$CodeDir"/data/$xxx.access "$CodeDir" > /dev/null fi fi if [ -f "$CodeDir"/data/assertS.c2m ]; then cp "$CodeDir"/data/assertS.c2m . fi if [ -f "$CodeDir"/data/assertV.c2m ]; then cp "$CodeDir"/data/assertV.c2m . fi before=$(date +%s) if [ $nomp != 0 ]; then echo 'number of OpenMP threads=' $nomp export OMP_NUM_THREADS=$nomp if command -v numactl >&2; then numactl --cpunodebind=0 --membind=0 2>/dev/null echo "use NUMA memory policy" fi else export OMP_NUM_THREADS=1 fi if [ $term = 0 ]; then ./code $xxx.result elif [ $term = 1 ]; then ./code /dev/null fi fi mv $xxx.result "$CodeDir"/"$MACH" if [ $quiet = 0 ]; then echo 'the listing is located on ./'$MACH fi cd "$CodeDir"/"$MACH" if [ $quiet = 0 ] && [ $term = 0 ]; then tail -15 $xxx.result elif [ $term = 0 ]; then RED='\033[0;31m' GREEN='\033[0;32m' NC='\033[0m' # No Color if tail $xxx.result | grep -q "normal end" ; then printf "${GREEN}[OK]${NC}\n" else printf "${RED}[FAILED]${NC}\n" exit 1 fi fi chmod -R 777 $Rundir /bin/rm -r -f $Rundir cd ..