Sha256: c36bf478ad56f1ea76b73ecf34f71b592cab3445974c0cf5b160b25e9823679e

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

#!/bin/bash

set -eu

if [ $# -eq 0 ]; then
	FILE="$HOME/data/silesia"
	echo "Using default FILE: $FILE"
	echo
elif [ $# -eq 1 ]; then
	FILE="$1"
else
	echo "Usage: $0 [FILE]" 1>&2
	exit 1
fi


if ! grep -q '\<sse2\>' /proc/cpuinfo; then
	echo "This script must be run on an x86 CPU" 1>&2
	exit 1
fi

if [ -n "$(git status -s | egrep 'adler32.c|crc32.c')" ]; then
	echo "This script will overwrite adler32.c and crc32.c, which" \
		"have uncommitted changes.  Refusing to run." 1>&2
	exit 1
fi

do_benchmark() {
	method="$1"
	shift
	speed=$(./checksum "$@" -t "$FILE" | \
		grep -o '[0-9]\+ MB/s' | grep -o '[0-9]\+')
	printf "%-36s%-10s\n" "$method" "$speed"
}

sort_by_speed() {
	awk '{print $NF, $0}' | sort -nr | cut -f2- -d' '
}

cat << EOF
Method                              Speed (MB/s)
------                              ------------
EOF

# CRC-32
(
if grep -q '\<pclmulqdq\>' /proc/cpuinfo; then
	make checksum > /dev/null
	do_benchmark "CRC-32 (libdeflate, PCLMUL/AVX)"
	sed -i '/^\#if NEED_PCLMUL_IMPL && !defined(__AVX__)/,/^\#endif$/d' lib/crc32.c
	make checksum > /dev/null
	do_benchmark "CRC-32 (libdeflate, PCLMUL)"
fi
sed -i '/^#if defined(__PCLMUL__)/,/^\#endif$/d' lib/crc32.c
make checksum > /dev/null
do_benchmark "CRC-32 (libdeflate, generic)"
git checkout -f lib/crc32.c > /dev/null
do_benchmark "CRC-32 (zlib)" -Z
) | sort_by_speed

# Adler-32
echo
(
if grep -q '\<avx2\>' /proc/cpuinfo; then
	make checksum > /dev/null
	do_benchmark "Adler-32 (libdeflate, AVX2)" -A
fi
sed -i '/^#if defined(__AVX2__)/,/^\#endif$/d' lib/adler32.c
make checksum > /dev/null
do_benchmark "Adler-32 (libdeflate, SSE2)" -A
sed -i '/^#ifdef __SSE2__/,/^\#endif$/d' lib/adler32.c
make checksum > /dev/null
do_benchmark "Adler-32 (libdeflate, generic)" -A
git checkout -f lib/adler32.c > /dev/null
do_benchmark "Adler-32 (zlib)" -A -Z
) | sort_by_speed

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
libdeflate-0.1.1 ext/libdeflate/libdeflate/tools/checksum_benchmarks.sh
libdeflate-0.1.0 ext/libdeflate/libdeflate/tools/checksum_benchmarks.sh