#!/bin/sh

EXAMLDIR=/usr/lib/examl/bin
EXE=${EXAMLDIR}/$(basename "$0")
NPROC=$(nproc)

if echo "$@" | grep -q -- -np ; then
  NP=$(echo "$@" | sed 's/^.* *-np *\([0-9]\+\) *.*/\1/')
  echo "Run MPI on $NP processors as requested"
  CMDARGS=$(echo "$@" | sed 's/\(^.* *\)-np *[0-9]\+\( *.*\)/\1\2/')
else
  NP=$((NPROC/2)) # leave 50% processors for other jobs - if you want to force more just use -np option
  if [ $NP -eq 1 ] ; then
    NP=$NPROC
  fi
  echo "Run MPI on $NP of $NPROC available processors"
  CMDARGS="$@"
fi

test_and_run () {
        if grep -q "$1" /proc/cpuinfo && [ -x "${EXE}-$1" ]; then
		echo "Use ${EXE}-$1 and $NP processors"
                mpirun -np "$NP" "${EXE}-$1" ${CMDARGS}
                exit
        fi
}


for SIMD in avx2 avx sse4.1 ssse3 sse3 sse2 sse mmx ; do test_and_run ${SIMD} ; done

# fallback to plain option
echo "Use $EXE without SIMD support and $NP processors"
mpirun -np "$NP" "${EXE}" $CMDARGS
