#!/bin/bash
# This is the script for running the hackbench benchmark
###SHELLPACK preamble hackbench-bench 0
iterations=1
CONN_NAME=
CONN_TYPE=
HACKBENCH_TYPE=process

###SHELLPACK parseargBegin
###SHELLPACK parseargInstall
	--pipes)
		CONN_TYPE="-pipe"
		CONN_NAME=pipes
		shift
		;;
	--sockets)
		CONN_TYPE=
		CONN_NAME=sockets
		shift
		;;
###SHELLPACK parseargParam --min-groups HACKBENCH_MIN_GROUPS
###SHELLPACK parseargParam --max-groups HACKBENCH_MAX_GROUPS
###SHELLPACK parseargParam --iterations HACKBENCH_ITERATIONS
###SHELLPACK parseargParam --type       HACKBENCH_TYPE
###SHELLPACK parseargParam --loops	HACKBENCH_LOOPS
###SHELLPACK parseargEnd

###SHELLPACK check_install_required hackbench
###SHELLPACK monitor_hooks

pushd $SHELLPACK_SOURCES/hackbench-${VERSION}-installed > /dev/null
RESULTSLOG=$LOGDIR_RESULTS/hackbench

# Ensure we don't hit the open file descriptor ulimit when running
# hackbench-threads-*. " * 2" adds a bit of headroom for marvin's
# processes, e.g. monitors.
ulimit -n $((HACKBENCH_MAX_GROUPS * 40 * 2))

###SHELLPACK threads_large_stride_begin $HACKBENCH_MIN_GROUPS $HACKBENCH_MAX_GROUPS
	mmtests_activity $CONN_NAME-$NR_THREADS
	monitor_pre_hook $LOGDIR_RESULTS $NR_THREADS

	###SHELLPACK iteration_begin $HACKBENCH_ITERATIONS
		echo Running $CONN_NAME $NR_THREADS groups iteration $ITERATION/$HACKBENCH_ITERATIONS
		echo pwd: `pwd`
		echo cmd: hackbench $CONN_TYPE $NR_THREADS $HACKBENCH_TYPE $HACKBENCH_LOOPS
		$TIME_CMD -o $LOGDIR_RESULTS/time-$NR_THREADS-$ITERATION  \
			./hackbench $CONN_TYPE $NR_THREADS $HACKBENCH_TYPE $HACKBENCH_LOOPS \
				> $LOGDIR_RESULTS/hackbench-$NR_THREADS-$ITERATION

		# Failure likely due to open file or pid limitations
		if [ $? -ne 0 ]; then
			monitor_post_hook $LOGDIR_RESULTS $NR_THREADS
			rm $LOGDIR_RESULTS/hackbench-$NR_THREADS-$ITERATION
			exit $SHELLPACK_SUCCESS
		fi
	###SHELLPACK iteration_end $HACKBENCH_ITERATIONS
	
	monitor_post_hook $LOGDIR_RESULTS $NR_THREADS
###SHELLPACK threads_stride_end

exit $RETVAL
