#!/bin/sh -e runs=8 top=`pwd` # ===== X=djbsort url=https://sorting.cr.yp.to version='installed version' echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X mkdir $X cd $X # assume djbsort installed already, so nothing to build here touch skiprebuild ) for bits in 32 64 do cd $top/$X cp $top/bench${bits}-$X.cc . clang++ \ -no-pie -O3 -march=native \ -o bench${bits}-$X bench${bits}-$X.cc \ -ldjbsort -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 ./bench${bits}-$X done > bench${bits}-$X.out done # ===== X=aspas url=https://github.com/vtsynergy/aspas_sort version=738ec7a1c051f6005ecb0cfec159eff9387b5f9d # 2018-02-17, latest as of 2026-01-22 echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X git clone https://github.com/vtsynergy/aspas_sort $X cd $X git checkout $version touch skiprebuild ) for bits in 32 do cd $top/$X cp $top/bench${bits}-$X.cc . clang++ \ -no-pie -O3 -march=native \ -o bench${bits}-$X bench${bits}-$X.cc \ -I include -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 ./bench${bits}-$X done > bench${bits}-$X.out done # ===== X=far url=https://github.com/simd-sorting/fast-and-robust version=054f2e2e9f7c00be4dc8d69567f92ddf9832a8f3 # 2021-08-20, latest as of 2026-01-22 echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X git clone https://github.com/simd-sorting/fast-and-robust $X cd $X git checkout $version touch skiprebuild ) for bits in 32 do cd $top/$X cp $top/bench${bits}-$X.cc . clang++ \ -no-pie -O3 -march=native \ -o bench${bits}-$X bench${bits}-$X.cc \ -I avx2_sort_demo -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 ./bench${bits}-$X done > bench${bits}-far.out done # ===== X=herf url='based on https://stereopsis.com/radix.html but simplified for int32' version='version included in sortbench' echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X mkdir $X cp $X.h $X.c $X cd $X touch skiprebuild ) for bits in 32 do cd $top/$X cp $top/bench${bits}-$X.cc . clang++ \ -no-pie -O3 -march=native \ -o bench${bits}-$X bench${bits}-$X.cc \ $X.c -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 ./bench${bits}-$X done > bench${bits}-$X.out done # ===== X=vxsort url=https://github.com/damageboy/vxsort-cpp version=2c7f79ba539a5c1ad2acf1c2e3c0fa828da25635 # 2023-05-10, latest as of 2026-01-22 echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X git clone https://github.com/damageboy/vxsort-cpp $X cd $X git checkout $version sed -i 's/^cmake_minimum_required(.*)$/cmake_minimum_required(VERSION 3.15)/' CMakeLists.txt sed -i 's/include(ConfigGBench)/# include(ConfigGBench)/' CMakeLists.txt sed -i 's/include(ConfigGTest)/# include(ConfigGTest)/' CMakeLists.txt sed -i 's!add_subdirectory(${PROJECT_SOURCE_DIR}/bench/)!# add_subdirectory(${PROJECT_SOURCE_DIR}/bench/)!' CMakeLists.txt sed -i 's!add_subdirectory(${PROJECT_SOURCE_DIR}/tests/)!# add_subdirectory(${PROJECT_SOURCE_DIR}/tests/)!' CMakeLists.txt ( mkdir build-release cd build-release export CC=clang export CXX=clang++ cmake .. make -j 4 ) touch skiprebuild ) for bits in 32 64 do cd $top/$X cp $top/bench${bits}-$X.cc . clang++ -std=c++17 \ -no-pie -O3 -march=native \ -o bench${bits}-$X bench${bits}-$X.cc \ -I vxsort \ -I vxsort/vector_machine \ -I build-release/_deps/cpu_features-src/include \ -L build-release/vxsort \ -L build-release/_deps/cpu_features-build \ -lvxsort \ -lcpu_features -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 ./bench${bits}-$X done > bench${bits}-$X.out done # ===== X=x86simdsort url=https://github.com/intel/x86-simd-sort.git version=6a7a01da4b0dfde108aa626a2364c954e2c50fe1 # 2025-09-11, latest as of 2026-01-22 echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X git clone https://github.com/intel/x86-simd-sort.git $X cd $X git checkout $version ( meson setup --buildtype release builddir && cd builddir meson compile ) touch skiprebuild ) for bits in 32 64 do cd $top/$X cp $top/bench${bits}-$X.cc . clang++ -std=c++20 -O3 -march=native -o bench${bits}-$X bench${bits}-$X.cc \ -I lib -L builddir -L builddir/lib \ -lx86simdsortcpp -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 env LD_LIBRARY_PATH=$top/$X/builddir${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH \ ./bench${bits}-$X done > bench${bits}-$X.out done # ===== X=vqsort url=https://github.com/google/highway version=271a9a0ed9de1232d9117f1572c3fe28f8542ec1 # 2026-01-20 echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X git clone https://github.com/google/highway $X cd $X ( git checkout $version mkdir -p build && cd build cmake .. make -j 4 ) touch skiprebuild ) for bits in 32 64 do cd $top/$X cp $top/bench${bits}-$X.cc . clang++ -O3 -march=native -o bench${bits}-$X bench${bits}-$X.cc \ -I . -I build/googletest-src/googletest/include -L build -L build/lib \ -lhwy_contrib -lhwy -lgtest -pthread -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 ./bench${bits}-$X done > bench${bits}-$X.out done # ===== X=stdsort url='std::sort' version='installed version' echo "===== $X ($url) version: $version " [ -f $top/$X/skiprebuild ] || ( cd $top rm -rf $X mkdir $X cd $X # will use whichever version comes with OS, so nothing to build here touch skiprebuild ) for bits in 32 64 do cd $top/$X cp $top/bench${bits}-$X.cc . clang -O3 -march=native -o bench${bits}-$X bench${bits}-$X.cc -lcpucycles -lm for run in `seq 1 $runs` do echo bench $X $bits $run `date -u` >&2 ./bench${bits}-$X done > bench${bits}-$X.out done # ===== echo '===== create plot32.pdf, plot64.pdf ' cd $top for bits in 32 64 do ./plot $bits \ stdsort black \ herf slategray \ aspas darkcyan \ vqsort red \ vxsort darkviolet \ x86simdsort darkgreen \ far sienna \ djbsort blue done