From e2aef0c275672342e67dfe6a99f2c5e91c23a968 Mon Sep 17 00:00:00 2001 From: Martijn van Beurden Date: Fri, 30 Aug 2024 07:33:55 +0200 Subject: [PATCH] Remove microbench (#736) This commit removes 'microbench', as it is no longer relevant. For more information on its former purpose, see https://lists.xiph.org/pipermail/flac-dev/2015-September/005608.html --- .gitignore | 1 - CMakeLists.txt | 1 - Makefile.am | 2 +- configure.ac | 1 - microbench/CMakeLists.txt | 17 --- microbench/Makefile.am | 42 ------- microbench/benchmark_residual.c | 151 ----------------------- microbench/util.c | 205 -------------------------------- microbench/util.h | 43 ------- 9 files changed, 1 insertion(+), 462 deletions(-) delete mode 100644 microbench/CMakeLists.txt delete mode 100644 microbench/Makefile.am delete mode 100644 microbench/benchmark_residual.c delete mode 100644 microbench/util.c delete mode 100644 microbench/util.h diff --git a/.gitignore b/.gitignore index 7118f69c..e28cb79a 100644 --- a/.gitignore +++ b/.gitignore @@ -74,7 +74,6 @@ test/metaflac.flac test/picture.diff test/picture.log .dirstamp -microbench/benchmark_residual /ogg/ oss-fuzz/fuzzer_decoder oss-fuzz/fuzzer_seek diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fdeebd3..ae29ca2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -220,7 +220,6 @@ if(ENABLE_MULTITHREADING) endif() add_subdirectory("src") -add_subdirectory("microbench") if(BUILD_DOCS) add_subdirectory("doc") endif() diff --git a/Makefile.am b/Makefile.am index 815d3712..1168fa06 100644 --- a/Makefile.am +++ b/Makefile.am @@ -31,7 +31,7 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = doc include m4 man src test microbench oss-fuzz +SUBDIRS = doc include m4 man src test oss-fuzz if EXAMPLES SUBDIRS += examples diff --git a/configure.ac b/configure.ac index 6391501b..1b610e66 100644 --- a/configure.ac +++ b/configure.ac @@ -587,7 +587,6 @@ AC_CONFIG_FILES([ \ test/flac-to-flac-metadata-test-files/Makefile \ test/metaflac-test-files/Makefile \ test/pictures/Makefile \ - microbench/Makefile \ oss-fuzz/Makefile ]) AC_OUTPUT diff --git a/microbench/CMakeLists.txt b/microbench/CMakeLists.txt deleted file mode 100644 index 639915b6..00000000 --- a/microbench/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -if(MSVC) - return() -endif() - -set(CMAKE_REQUIRED_LIBRARIES rt) -check_function_exists(clock_gettime HAVE_CLOCK_GETTIME) - -if(APPLE) - add_definitions(-DFLAC__SYS_DARWIN) -endif() - -add_executable(benchmark_residual benchmark_residual.c util.c) -target_include_directories(benchmark_residual PRIVATE - "$/include") -target_link_libraries(benchmark_residual - FLAC - $<$:rt>) diff --git a/microbench/Makefile.am b/microbench/Makefile.am deleted file mode 100644 index 8428533c..00000000 --- a/microbench/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -# FLAC - Free Lossless Audio Codec -# Copyright (C) 2015-2024 Xiph.Org Foundation -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# - Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# - Neither the name of the Xiph.org Foundation nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/src/libFLAC/include - -noinst_HEADERS = util.h - -noinst_PROGRAMS = benchmark_residual - -benchmark_residual_SOURCES = benchmark_residual.c util.c - -benchmark_residual_LDADD = @LIB_CLOCK_GETTIME@ - -EXTRA_DIST = CMakeLists.txt diff --git a/microbench/benchmark_residual.c b/microbench/benchmark_residual.c deleted file mode 100644 index eab87b91..00000000 --- a/microbench/benchmark_residual.c +++ /dev/null @@ -1,151 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000-2009 Josh Coalson - * Copyright (C) 2011-2024 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include -#include -#include "FLAC/ordinals.h" -#include "share/compat.h" -#include "private/bitmath.h" -#include "private/fixed.h" -#include "private/macros.h" -#include "FLAC/assert.h" - -#include "util.h" - -static void FLAC__fixed_compute_residual_shift(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[]) -{ - const int idata_len = (int) data_len; - int i; - - switch(order) { - case 0: - FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0])); - memcpy(residual, data, sizeof(residual[0])*data_len); - break; - case 1: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - data[i-1]; - break; - case 2: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - (data[i-1] << 1) + data[i-2]; - break; - case 3: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - (((data[i-1]-data[i-2])<<1) + (data[i-1]-data[i-2])) - data[i-3]; - break; - case 4: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - ((data[i-1]+data[i-3])<<2) + ((data[i-2]<<2) + (data[i-2]<<1)) + data[i-4]; - break; - default: - FLAC__ASSERT(0); - } -} - -static void FLAC__fixed_compute_residual_mult(const FLAC__int32 data[], unsigned data_len, unsigned order, FLAC__int32 residual[]) -{ - const int idata_len = (int)data_len; - int i; - - switch(order) { - case 0: - FLAC__ASSERT(sizeof(residual[0]) == sizeof(data[0])); - memcpy(residual, data, sizeof(residual[0])*data_len); - break; - case 1: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - data[i-1]; - break; - case 2: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - 2*data[i-1] + data[i-2]; - break; - case 3: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - 3*data[i-1] + 3*data[i-2] - data[i-3]; - break; - case 4: - for(i = 0; i < idata_len; i++) - residual[i] = data[i] - 4*data[i-1] + 6*data[i-2] - 4*data[i-3] + data[i-4]; - break; - default: - FLAC__ASSERT(0); - } -} - -static FLAC__int32 data [200000] ; -static FLAC__int32 residual [200000] ; - -static unsigned bench_order = 0 ; - -static void -bench_shift (void) -{ FLAC__fixed_compute_residual_shift (data, ARRAY_LEN (data), bench_order, residual) ; -} - -static void -bench_mult (void) -{ FLAC__fixed_compute_residual_mult (data, ARRAY_LEN (data), bench_order, residual) ; -} - -int -main (void) -{ bench_stats stats ; - - puts ("") ; - - for (bench_order = 2 ; bench_order <= 4 ; bench_order ++) { - memset (&stats, 0, sizeof (stats)) ; - stats.testfunc = bench_shift ; - stats.run_count = 100 ; - stats.loop_count = 10 ; - - benchmark_stats (&stats) ; - printf ("shift order %u : %f %f %f %f\n", bench_order, stats.min_time, stats.median_time, stats.mean_time, stats.max_time) ; - - memset (&stats, 0, sizeof (stats)) ; - stats.testfunc = bench_mult ; - stats.run_count = 100 ; - stats.loop_count = 10 ; - - benchmark_stats (&stats) ; - printf ("mult order %u : %f %f %f %f\n\n", bench_order, stats.min_time, stats.median_time, stats.mean_time, stats.max_time) ; - } - - return 0 ; -} diff --git a/microbench/util.c b/microbench/util.c deleted file mode 100644 index 9acc666a..00000000 --- a/microbench/util.c +++ /dev/null @@ -1,205 +0,0 @@ -/* FLAC - Free Lossless Audio Codec - * Copyright (C) 2015-2024 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include "util.h" - -#if defined _WIN32 - -#include - -static double -counter_diff (const LARGE_INTEGER * start, const LARGE_INTEGER * end) -{ - LARGE_INTEGER diff, freq; - - QueryPerformanceFrequency(&freq); - diff.QuadPart = end->QuadPart - start->QuadPart; - - return (double)diff.QuadPart/(double)freq.QuadPart; -} - -double -benchmark_function (void (*testfunc) (void), unsigned count) -{ - LARGE_INTEGER start, end; - unsigned k; - - QueryPerformanceCounter (&start) ; - - for (k = 0 ; k < count ; k++) - testfunc(); - - QueryPerformanceCounter (&end) ; - - return counter_diff (&start, &end) / count ; -} /* benchmark_function */ - -#elif defined FLAC__SYS_DARWIN - -#include - -static double -counter_diff (const uint64_t * start, const uint64_t * end) -{ - mach_timebase_info_data_t t_info; - mach_timebase_info(&t_info); - uint64_t duration = *end - *start; - - return duration * ((double)t_info.numer/(double)t_info.denom); -} - -double -benchmark_function (void (*testfunc) (void), unsigned count) -{ - uint64_t start, end; - unsigned k; - - start = mach_absolute_time(); - - for (k = 0 ; k < count ; k++) - testfunc(); - - end = mach_absolute_time(); - - return counter_diff (&start, &end) / count ; -} /* benchmark_function */ - -#elif defined HAVE_CLOCK_GETTIME - -#include -#include - -static double -timespec_diff (const struct timespec * start, const struct timespec * end) -{ struct timespec diff; - - if (end->tv_nsec - start->tv_nsec < 0) - { diff.tv_sec = end->tv_sec - start->tv_sec - 1 ; - diff.tv_nsec = 1000000000 + end->tv_nsec - start->tv_nsec ; - } - else - { diff.tv_sec = end->tv_sec - start->tv_sec ; - diff.tv_nsec = end->tv_nsec-start->tv_nsec ; - } ; - - return diff.tv_sec + 1e-9 * diff.tv_nsec ; -} - -double -benchmark_function (void (*testfunc) (void), unsigned count) -{ struct timespec start, end; - unsigned k ; - - clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &start) ; - - for (k = 0 ; k < count ; k++) - testfunc () ; - - clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &end) ; - - return timespec_diff (&start, &end) / count ; -} /* benchmark_function */ - -#else - -#include -#include - -static double -timeval_diff (const struct timeval * start, const struct timeval * end) -{ struct timeval diff; - - if (end->tv_usec - start->tv_usec < 0) - { diff.tv_sec = end->tv_sec - start->tv_sec - 1 ; - diff.tv_usec = 1000000 + end->tv_usec - start->tv_usec ; - } - else - { diff.tv_sec = end->tv_sec - start->tv_sec ; - diff.tv_usec = end->tv_usec-start->tv_usec ; - } ; - - return diff.tv_sec + 1e-6 * diff.tv_usec ; -} - -double -benchmark_function (void (*testfunc) (void), unsigned count) -{ struct timeval start, end; - unsigned k ; - - gettimeofday(&start, NULL); - - for (k = 0 ; k < count ; k++) - testfunc () ; - - gettimeofday(&end, NULL); - - return timeval_diff (&start, &end) / count ; -} /* benchmark_function */ - -#endif - -static int -double_cmp (const void * a, const void * b) -{ const double * pa = (double *) a ; - const double * pb = (double *) b ; - return pa [0] < pb [0] ; -} /* double_cmp */ - -void -benchmark_stats (bench_stats * stats) -{ double sum, times [stats->run_count] ; - unsigned k ; - - for (k = 0 ; k < stats->run_count ; k++) - times [k] = benchmark_function (stats->testfunc, stats->loop_count) ; - - qsort (times, stats->run_count, sizeof (times [0]), double_cmp) ; - - sum = 0.0 ; - stats->min_time = stats->max_time = times [0] ; - for (k = 0 ; k < stats->run_count ; k++) - { stats->min_time = stats->min_time < times [k] ? stats->min_time : times [k] ; - stats->max_time = stats->max_time > times [k] ? stats->max_time : times [k] ; - sum += times [k] ; - } - stats->mean_time = sum / stats->run_count ; - if (stats->run_count & 1) - stats->median_time = times [(stats->run_count + 1) / 2] ; - else - stats->median_time = 0.5 * (times [stats->run_count / 2] + times [(stats->run_count / 2) + 1]) ; - - return ; -} /* benchmark_stats */ diff --git a/microbench/util.h b/microbench/util.h deleted file mode 100644 index 64cf3c03..00000000 --- a/microbench/util.h +++ /dev/null @@ -1,43 +0,0 @@ -/* FLAC - Free Lossless Audio Codec - * Copyright (C) 2015-2024 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#define ARRAY_LEN(x) ((sizeof (x) / sizeof (x [0]))) - -typedef struct bench_stats -{ void (*testfunc) (void) ; - unsigned run_count ; - unsigned loop_count ; - double min_time, mean_time, median_time, max_time ; -} bench_stats ; - -double benchmark_function (void (*testfunc) (void), unsigned count) ; - -void benchmark_stats (bench_stats * stats) ;