From 98bc67138d55d69eef3b40bdf7c5054145cc41d6 Mon Sep 17 00:00:00 2001 From: Nathanael Jones Date: Sat, 5 Aug 2017 14:00:41 -0600 Subject: [PATCH] Update benchmark scripts; ensure they all specify jpeg output quality. Add bench3 for comparative between flow-proto1, imageflow_tool, and vipsthumbnail --- imageflow_tool/bench.sh | 28 ++++++++---------- imageflow_tool/bench2.sh | 5 +--- imageflow_tool/bench3.sh | 42 +++++++++++++++++++++++++++ imageflow_tool/bench_single_thread.sh | 16 +++++----- imageflow_tool/build_release_tool.sh | 7 +++++ 5 files changed, 69 insertions(+), 29 deletions(-) create mode 100755 imageflow_tool/bench3.sh create mode 100755 imageflow_tool/build_release_tool.sh diff --git a/imageflow_tool/bench.sh b/imageflow_tool/bench.sh index 9ec0da49f..01757d992 100755 --- a/imageflow_tool/bench.sh +++ b/imageflow_tool/bench.sh @@ -13,13 +13,9 @@ echo echo on OS X, you will need to edit this script to use time instead of perf stat echo And run brew install parallel -#-limit thread 1 - -RUSTFLAGS="-C target-cpu=native" cargo build --release -cp target/release/flow-proto1 . +./build_release_tool.sh convert --version -./flow-proto1 --version vipsthumbnail --vips-version @@ -53,55 +49,55 @@ fi cd bench_in || exit echo Using imageflow to thumbnail $COUNT images in parallel -$TIME_COMMAND parallel '../flow-proto1 -i {} -o ../bench_out/{.}_200x200.jpg -w 200 -h 200' ::: *.jpg +$TIME_COMMAND parallel '../flow-proto1 -i {} -o ../bench_out/{.}_200x200.jpg -w 200 -h 200 --jpeg-quality 90' ::: *.jpg echo echo echo Using libvips to thumbnail $COUNT images in parallel -$TIME_COMMAND parallel 'vipsthumbnail --linear --size=200x200 --output=../bench_out/{.}_vips_200x200.jpg {}' ::: *.jpg +$TIME_COMMAND parallel 'vipsthumbnail --linear --size=200x200 --output=../bench_out/{.}_vips_200x200.jpg[Q=90] {}' ::: *.jpg echo echo echo Using ImageMagick to thumbnail $COUNT images in parallel -$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 200x200 -colorspace sRGB ../bench_out/{.}_magick_200x200.jpg' ::: *.jpg +$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 200x200 -colorspace sRGB -quality 90 ../bench_out/{.}_magick_200x200.jpg' ::: *.jpg echo echo echo Using ImageMagick ideal settings to thumbnail $COUNT images in parallel -$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Mitchell -distort Resize 200x200 -colorspace sRGB ../bench_out/{.}_magick_ideal_200x200.jpg' ::: *.jpg +$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Mitchell -distort Resize 200x200 -colorspace sRGB -quality 90 ../bench_out/{.}_magick_ideal_200x200.jpg' ::: *.jpg echo echo echo Using imageflow to create 2000px versions of $COUNT images in parallel -$TIME_COMMAND parallel '../flow-proto1 -i {} -o ../bench_out/{.}_2000x2000.jpg -w 2000 -h 2000' ::: *.jpg +$TIME_COMMAND parallel '../flow-proto1 -i {} -o ../bench_out/{.}_2000x2000.jpg -w 2000 -h 2000 --jpeg-quality 90' ::: *.jpg echo echo echo Using libvips to create 2000px versions of $COUNT images in parallel -$TIME_COMMAND parallel 'vipsthumbnail --linear --size=2000x2000 --output=../bench_out/{.}_vips_2000x2000.jpg {}' ::: *.jpg +$TIME_COMMAND parallel 'vipsthumbnail --linear --size=2000x2000 --output=../bench_out/{.}_vips_2000x2000.jpg[Q=90] {}' ::: *.jpg echo echo echo Using ImageMagick to create 2000px versions of $COUNT images in parallel -$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 2000x2000 -colorspace sRGB ../bench_out/{.}_magick_2000x2000.jpg' ::: *.jpg +$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 2000x2000 -colorspace sRGB -quality 90 ../bench_out/{.}_magick_2000x2000.jpg' ::: *.jpg echo echo echo Using ImageMagick ideal settings to create 2000px versions of COUNT images in parallel -$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Mitchell -distort Resize 2000x2000 -colorspace sRGB ../bench_out/{.}_magick_ideal_2000x2000.jpg' ::: *.jpg +$TIME_COMMAND parallel 'convert {} -set colorspace sRGB -colorspace RGB -filter Mitchell -distort Resize 2000x2000 -colorspace sRGB -quality 90 ../bench_out/{.}_magick_ideal_2000x2000.jpg' ::: *.jpg echo echo echo Using imageflow wrong on $COUNT images in parallel. 200x200 -$TIME_COMMAND parallel '../flow-proto1 -i {} --incorrectgamma -o ../bench_out/{.}_200x200_wrong.jpg -w 200 -h 200' ::: *.jpg +$TIME_COMMAND parallel '../flow-proto1 -i {} --incorrectgamma -o ../bench_out/{.}_200x200_wrong.jpg -w 200 -h 200 --jpeg-quality 90' ::: *.jpg echo echo echo Using libvips wrong on $COUNT images in parallel. 200x200 -$TIME_COMMAND parallel 'vipsthumbnail --size=200x200 --output=../bench_out/{.}_vips_200x200_wrong.jpg {}' ::: *.jpg +$TIME_COMMAND parallel 'vipsthumbnail --size=200x200 --output=../bench_out/{.}_vips_200x200_wrong.jpg[Q=90] {}' ::: *.jpg echo echo echo Using ImageMagick wrong on $COUNT images in parallel. 200x200 -$TIME_COMMAND parallel 'convert {} -filter Robidoux -resize 200x200 ../bench_out/{.}_magick_200x200_wrong.jpg' ::: *.jpg +$TIME_COMMAND parallel 'convert {} -filter Robidoux -resize 200x200 -quality 90 ../bench_out/{.}_magick_200x200_wrong.jpg' ::: *.jpg ) diff --git a/imageflow_tool/bench2.sh b/imageflow_tool/bench2.sh index d17753a6a..fca99ec41 100755 --- a/imageflow_tool/bench2.sh +++ b/imageflow_tool/bench2.sh @@ -1,9 +1,6 @@ #!/bin/bash -cargo build --release -cp ../target/release/flow-proto1 . - -./flow-proto1 --version +./build_release_tool.sh wget -nc https://s3-us-west-2.amazonaws.com/imageflow-resources/test_inputs/u1.jpg diff --git a/imageflow_tool/bench3.sh b/imageflow_tool/bench3.sh new file mode 100755 index 000000000..8e9dffa38 --- /dev/null +++ b/imageflow_tool/bench3.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +./build_release_tool.sh + +vipsthumbnail --vips-version + +wget -nc https://s3-us-west-2.amazonaws.com/imageflow-resources/test_inputs/u1.jpg + +mkdir bench_out +mkdir bench_in +rm bench_out/*.jpg +rm bench_in/*.jpg + +export COUNT=8 + +for i in $(seq 1 $COUNT); +do + cp "u1.jpg" "bench_in/c$i.jpg" +done + +if [[ "$OSTYPE" == "linux-gnu" ]]; then + export TIME_COMMAND="perf stat" +else + export TIME_COMMAND=time +fi + +( +cd bench_in || exit +# +echo Using flow-proto1 to thumbnail $COUNT images in parallel +$TIME_COMMAND parallel '../flow-proto1 --min_precise_scaling_ratio 1 -i {} -o ../bench_out/{.}_200x200.jpg -w 200 -h 200 --jpeg-quality 65 --format jpg' ::: *.jpg +# +echo +echo +echo Using imageflow_tool to thumbnail $COUNT images in parallel +$TIME_COMMAND parallel '../imageflow_tool v0.1/ir4 --in {} --out ../bench_out/{.}_200x200.jpg --command "maxwidth=200&maxheight=200&quality=65&format=jpg" > /dev/null' ::: *.jpg +# +echo +echo +echo Using libvips to thumbnail $COUNT images in parallel +$TIME_COMMAND parallel 'vipsthumbnail --linear --size=200x200 --format=jpg --output=../bench_out/{.}_vips_200x200.jpg[Q=65] {}' ::: *.jpg +) \ No newline at end of file diff --git a/imageflow_tool/bench_single_thread.sh b/imageflow_tool/bench_single_thread.sh index c1dd9f7f2..a57dbe9f1 100755 --- a/imageflow_tool/bench_single_thread.sh +++ b/imageflow_tool/bench_single_thread.sh @@ -12,11 +12,9 @@ echo and sudo apt-get install linux-tools-common linux-tools-generic echo echo on OS X, you will need to edit this script to use time instead of perf stat -cargo build --release -cp target/release/flow-proto1 . +./build_release_tool.sh convert --version -./flow-proto1 --version vipsthumbnail --vips-version @@ -48,16 +46,16 @@ export IMAGE_PATH=c1.jpg cd bench_in || exit echo Using imageflow to thumbnail -$TIME_COMMAND ../flow-proto1 -i $IMAGE_PATH -o ../bench_out/1_200x200.jpg -w 200 -h 200 -$MEM_COMMAND ../flow-proto1 -i $IMAGE_PATH -o ../bench_out/1_200x200.jpg -w 200 -h 200 +$TIME_COMMAND ../flow-proto1 -i $IMAGE_PATH -o ../bench_out/1_200x200.jpg -w 200 -h 200 --jpeg-quality 90 +$MEM_COMMAND ../flow-proto1 -i $IMAGE_PATH -o ../bench_out/1_200x200.jpg -w 200 -h 200 --jpeg-quality 90 echo echo echo Using libvips to thumbnail -$TIME_COMMAND vipsthumbnail --linear --size=200x200 --output=../bench_out/1_vips_200x200.jpg $IMAGE_PATH -$MEM_COMMAND vipsthumbnail --linear --size=200x200 --output=../bench_out/1_vips_200x200.jpg $IMAGE_PATH +$TIME_COMMAND vipsthumbnail --linear --size=200x200 --output=../bench_out/1_vips_200x200.jpg[Q=90] $IMAGE_PATH +$MEM_COMMAND vipsthumbnail --linear --size=200x200 --output=../bench_out/1_vips_200x200.jpg[Q=90] $IMAGE_PATH echo echo echo Using ImageMagick to thumbnail -$TIME_COMMAND convert $IMAGE_PATH -limit thread 1 -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 200x200 -colorspace sRGB ../bench_out/1_magick_200x200.jpg -$MEM_COMMAND convert $IMAGE_PATH -limit thread 1 -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 200x200 -colorspace sRGB ../bench_out/1_magick_200x200.jpg +$TIME_COMMAND convert $IMAGE_PATH -limit thread 1 -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 200x200 -colorspace sRGB -quality 90 ../bench_out/1_magick_200x200.jpg +$MEM_COMMAND convert $IMAGE_PATH -limit thread 1 -set colorspace sRGB -colorspace RGB -filter Robidoux -resize 200x200 -colorspace sRGB -quality 90 ../bench_out/1_magick_200x200.jpg diff --git a/imageflow_tool/build_release_tool.sh b/imageflow_tool/build_release_tool.sh new file mode 100755 index 000000000..970510253 --- /dev/null +++ b/imageflow_tool/build_release_tool.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +RUSTFLAGS="-C target-cpu=native" CARGO_INCREMENTAL=1 cargo build --release +cp ../target/release/flow-proto1 . +./flow-proto1 --version +cp ../target/release/imageflow_tool . +./imageflow_tool --version \ No newline at end of file