#!/bin/bash

uname -a
gcc --version
vips --version

# how large an image do you want to process? 
# sample2.v is 290x442 pixels ... replicate this many times horizontally and 
# vertically to get a highres image for the benchmark
tile=13

# how complex an operation do you want to run?
# this sets the number of copies of the benchmark we chain together:
# higher values run more slowly and are more likely to be CPU-bound
chain=1

echo building test image ...
echo "tile=$tile"
vips im_replicate sample2.v temp.v $tile $tile
if [ $? != 0 ]; then
  echo "build of test image failed -- out of disc space?"
  exit 1
fi
echo -n "test image is" `vipsheader -f width temp.v` 
echo " by" `vipsheader -f height temp.v` "pixels"
max_cpus=`vips im_concurrency_get`

echo "max cpus = $max_cpus"
echo "starting benchmark ..."
echo /usr/bin/time -f %e vips \
  --vips-concurrency=xx \
  im_benchmarkn temp.v temp2.v $chain
echo reported real-time is best of three runs
echo cpus real-time

for((cpus = 1; cpus <= max_cpus; cpus++)); do
  t1=`/usr/bin/time -f %e vips \
	  --vips-concurrency=$cpus \
	  im_benchmarkn temp.v temp2.v $chain 2>&1`
  if [ $? != 0 ]; then
    echo "benchmark failed -- install problem?"
    exit 1
  fi
  t2=`/usr/bin/time -f %e vips \
	  --vips-concurrency=$cpus \
	  im_benchmarkn temp.v temp2.v $chain 2>&1`
  t3=`/usr/bin/time -f %e vips \
	  --vips-concurrency=$cpus \
	  im_benchmarkn temp.v temp2.v $chain 2>&1`

  # echo $t1 $t2 $t3

  if [[ $t2 < $t1 ]]; then
	  t1=$t2
  fi
  if [[ $t3 < $t1 ]]; then
	  t1=$t3
  fi
  echo $cpus $t1
done