Message ID | 20220209153538.66931-1-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | benchtests: Add benches for zeroing memset | expand |
LGTM Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com> Thanks, Sunil On Wed, Feb 9, 2022 at 7:36 AM H.J. Lu via Libc-alpha <libc-alpha@sourceware.org> wrote: > > memset with zero as the value to set is by far the majority value (99%+ > for Python3 and GCC). Add bench-memset-zero-large.c, > bench-memset-zero-walk.c and bench-memset-zero.c to measure memset > functions for zeroing. > --- > benchtests/Makefile | 3 +++ > benchtests/bench-bzero-large.c | 29 ++++++++++++++++++++++++++- > benchtests/bench-bzero-walk.c | 30 +++++++++++++++++++++++++++- > benchtests/bench-bzero.c | 30 +++++++++++++++++++++++++++- > benchtests/bench-memset-zero-large.c | 20 +++++++++++++++++++ > benchtests/bench-memset-zero-walk.c | 20 +++++++++++++++++++ > benchtests/bench-memset-zero.c | 20 +++++++++++++++++++ > 7 files changed, 149 insertions(+), 3 deletions(-) > create mode 100644 benchtests/bench-memset-zero-large.c > create mode 100644 benchtests/bench-memset-zero-walk.c > create mode 100644 benchtests/bench-memset-zero.c > > diff --git a/benchtests/Makefile b/benchtests/Makefile > index 6f718fac35..9b8df3b3f5 100644 > --- a/benchtests/Makefile > +++ b/benchtests/Makefile > @@ -139,6 +139,9 @@ string-benchset := \ > memset \ > memset-large \ > memset-walk \ > + memset-zero \ > + memset-zero-large \ > + memset-zero-walk \ > rawmemchr \ > stpcpy \ > stpcpy_chk \ > diff --git a/benchtests/bench-bzero-large.c b/benchtests/bench-bzero-large.c > index f2e2e981b7..cfc7b81cdf 100644 > --- a/benchtests/bench-bzero-large.c > +++ b/benchtests/bench-bzero-large.c > @@ -17,7 +17,11 @@ > <https://www.gnu.org/licenses/>. */ > > #define TEST_MAIN > -#define TEST_NAME "bzero" > +#ifdef DO_MEMSET > +# define TEST_NAME "memset" > +#else > +# define TEST_NAME "bzero" > +#endif > #define START_SIZE (128 * 1024) > #define MIN_PAGE_SIZE (getpagesize () + 64 * 1024 * 1024) > #define TIMEOUT (20 * 60) > @@ -25,6 +29,14 @@ > > #include "json-lib.h" > > +#ifdef DO_MEMSET > +void *generic_memset (void *, int, size_t); > + > +typedef void *(*proto_t) (void *, int, size_t); > + > +IMPL (memset, 1) > +IMPL (generic_memset, 0) > +#else > static void > memset_zero (void * s, size_t len) > { > @@ -35,6 +47,7 @@ typedef void (*proto_t) (void *, size_t); > > IMPL (bzero, 1) > IMPL (memset_zero, 0) > +#endif > > static void > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > @@ -45,7 +58,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > TIMING_NOW (start); > for (i = 0; i < iters; ++i) > { > +#ifdef DO_MEMSET > + CALL (impl, s, 0, n); > +#else > CALL (impl, s, n); > +#endif > } > TIMING_NOW (stop); > > @@ -115,3 +132,13 @@ test_main (void) > } > > #include <support/test-driver.c> > + > +#ifdef DO_MEMSET > +# define libc_hidden_builtin_def(X) > +# define libc_hidden_def(X) > +# define libc_hidden_weak(X) > +# define weak_alias(X,Y) > +# undef MEMSET > +# define MEMSET generic_memset > +# include <string/memset.c> > +#endif > diff --git a/benchtests/bench-bzero-walk.c b/benchtests/bench-bzero-walk.c > index b65d12a6a2..00226f80b8 100644 > --- a/benchtests/bench-bzero-walk.c > +++ b/benchtests/bench-bzero-walk.c > @@ -17,7 +17,11 @@ > <https://www.gnu.org/licenses/>. */ > > #define TEST_MAIN > -#define TEST_NAME "bzero" > +#ifdef DO_MEMSET > +# define TEST_NAME "memset" > +#else > +# define TEST_NAME "bzero" > +#endif > #define START_SIZE 128 > #define MIN_PAGE_SIZE (getpagesize () + 32 * 1024 * 1024) > #define TIMEOUT (20 * 60) > @@ -25,6 +29,15 @@ > > #include "json-lib.h" > > +#ifdef DO_MEMSET > +void *generic_memset (void *, int, size_t); > + > +typedef void *(*proto_t) (void *, int, size_t); > + > +IMPL (memset, 1) > +IMPL (generic_memset, 0) > + > +#else > static void > memset_zero (void * s, size_t len) > { > @@ -35,6 +48,7 @@ typedef void (*proto_t) (void *, size_t); > > IMPL (bzero, 1) > IMPL (memset_zero, 0) > +#endif > > static void > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, > @@ -45,7 +59,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, > > TIMING_NOW (start); > for (i = 0; i < iters && s <= s_end; s_end -= n, i++) > +#ifdef DO_MEMSET > + CALL (impl, s, 0, n); > +#else > CALL (impl, s, n); > +#endif > TIMING_NOW (stop); > > TIMING_DIFF (cur, start, stop); > @@ -116,3 +134,13 @@ test_main (void) > } > > #include <support/test-driver.c> > + > +#ifdef DO_MEMSET > +# define libc_hidden_builtin_def(X) > +# define libc_hidden_def(X) > +# define libc_hidden_weak(X) > +# define weak_alias(X,Y) > +# undef MEMSET > +# define MEMSET generic_memset > +# include <string/memset.c> > +#endif > diff --git a/benchtests/bench-bzero.c b/benchtests/bench-bzero.c > index 93ec521725..500b7eba96 100644 > --- a/benchtests/bench-bzero.c > +++ b/benchtests/bench-bzero.c > @@ -17,12 +17,25 @@ > <https://www.gnu.org/licenses/>. */ > > #define TEST_MAIN > -#define TEST_NAME "bzero" > +#ifdef DO_MEMSET > +# define TEST_NAME "memset" > +#else > +# define TEST_NAME "bzero" > +#endif > #define MIN_PAGE_SIZE 131072 > #include "bench-string.h" > > #include "json-lib.h" > > +#ifdef DO_MEMSET > +void *generic_memset (void *, int, size_t); > + > +typedef void *(*proto_t) (void *, int, size_t); > + > +IMPL (memset, 1) > +IMPL (generic_memset, 0) > + > +#else > static void > memset_zero (void * s, size_t len) > { > @@ -33,6 +46,7 @@ typedef void (*proto_t) (void *, size_t); > > IMPL (bzero, 1) > IMPL (memset_zero, 0) > +#endif > > static void > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > @@ -43,7 +57,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > TIMING_NOW (start); > for (i = 0; i < iters; ++i) > { > +#ifdef DO_MEMSET > + CALL (impl, s, 0, n); > +#else > CALL (impl, s, n); > +#endif > } > TIMING_NOW (stop); > > @@ -132,3 +150,13 @@ test_main (void) > } > > #include <support/test-driver.c> > + > +#ifdef DO_MEMSET > +# define libc_hidden_builtin_def(X) > +# define libc_hidden_def(X) > +# define libc_hidden_weak(X) > +# define weak_alias(X,Y) > +# undef MEMSET > +# define MEMSET generic_memset > +# include <string/memset.c> > +#endif > diff --git a/benchtests/bench-memset-zero-large.c b/benchtests/bench-memset-zero-large.c > new file mode 100644 > index 0000000000..bc938cdfff > --- /dev/null > +++ b/benchtests/bench-memset-zero-large.c > @@ -0,0 +1,20 @@ > +/* Measure memset functions for zeroing with large data sizes. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define DO_MEMSET 1 > +#include "bench-bzero-large.c" > diff --git a/benchtests/bench-memset-zero-walk.c b/benchtests/bench-memset-zero-walk.c > new file mode 100644 > index 0000000000..dce4b43e06 > --- /dev/null > +++ b/benchtests/bench-memset-zero-walk.c > @@ -0,0 +1,20 @@ > +/* Measure memset functions for zeroing throughput with large data sizes. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define DO_MEMSET 1 > +#include "bench-bzero-walk.c" > diff --git a/benchtests/bench-memset-zero.c b/benchtests/bench-memset-zero.c > new file mode 100644 > index 0000000000..535005f0e6 > --- /dev/null > +++ b/benchtests/bench-memset-zero.c > @@ -0,0 +1,20 @@ > +/* Measure memset functions for zeroing. > + Copyright (C) 2022 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <https://www.gnu.org/licenses/>. */ > + > +#define DO_MEMSET 1 > +#include "bench-bzero.c" > -- > 2.34.1 >
On Wed, Feb 23, 2022 at 1:04 PM Sunil Pandey via Libc-alpha <libc-alpha@sourceware.org> wrote: > > LGTM > Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com> > > Thanks, > Sunil > Think we should wait until we decide on actually adding `__memsetzero` to benchmarks for it. > On Wed, Feb 9, 2022 at 7:36 AM H.J. Lu via Libc-alpha > <libc-alpha@sourceware.org> wrote: > > > > memset with zero as the value to set is by far the majority value (99%+ > > for Python3 and GCC). Add bench-memset-zero-large.c, > > bench-memset-zero-walk.c and bench-memset-zero.c to measure memset > > functions for zeroing. > > --- > > benchtests/Makefile | 3 +++ > > benchtests/bench-bzero-large.c | 29 ++++++++++++++++++++++++++- > > benchtests/bench-bzero-walk.c | 30 +++++++++++++++++++++++++++- > > benchtests/bench-bzero.c | 30 +++++++++++++++++++++++++++- > > benchtests/bench-memset-zero-large.c | 20 +++++++++++++++++++ > > benchtests/bench-memset-zero-walk.c | 20 +++++++++++++++++++ > > benchtests/bench-memset-zero.c | 20 +++++++++++++++++++ > > 7 files changed, 149 insertions(+), 3 deletions(-) > > create mode 100644 benchtests/bench-memset-zero-large.c > > create mode 100644 benchtests/bench-memset-zero-walk.c > > create mode 100644 benchtests/bench-memset-zero.c > > > > diff --git a/benchtests/Makefile b/benchtests/Makefile > > index 6f718fac35..9b8df3b3f5 100644 > > --- a/benchtests/Makefile > > +++ b/benchtests/Makefile > > @@ -139,6 +139,9 @@ string-benchset := \ > > memset \ > > memset-large \ > > memset-walk \ > > + memset-zero \ > > + memset-zero-large \ > > + memset-zero-walk \ > > rawmemchr \ > > stpcpy \ > > stpcpy_chk \ > > diff --git a/benchtests/bench-bzero-large.c b/benchtests/bench-bzero-large.c > > index f2e2e981b7..cfc7b81cdf 100644 > > --- a/benchtests/bench-bzero-large.c > > +++ b/benchtests/bench-bzero-large.c > > @@ -17,7 +17,11 @@ > > <https://www.gnu.org/licenses/>. */ > > > > #define TEST_MAIN > > -#define TEST_NAME "bzero" > > +#ifdef DO_MEMSET > > +# define TEST_NAME "memset" > > +#else > > +# define TEST_NAME "bzero" > > +#endif > > #define START_SIZE (128 * 1024) > > #define MIN_PAGE_SIZE (getpagesize () + 64 * 1024 * 1024) > > #define TIMEOUT (20 * 60) > > @@ -25,6 +29,14 @@ > > > > #include "json-lib.h" > > > > +#ifdef DO_MEMSET > > +void *generic_memset (void *, int, size_t); > > + > > +typedef void *(*proto_t) (void *, int, size_t); > > + > > +IMPL (memset, 1) > > +IMPL (generic_memset, 0) > > +#else > > static void > > memset_zero (void * s, size_t len) > > { > > @@ -35,6 +47,7 @@ typedef void (*proto_t) (void *, size_t); > > > > IMPL (bzero, 1) > > IMPL (memset_zero, 0) > > +#endif > > > > static void > > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > @@ -45,7 +58,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > TIMING_NOW (start); > > for (i = 0; i < iters; ++i) > > { > > +#ifdef DO_MEMSET > > + CALL (impl, s, 0, n); > > +#else > > CALL (impl, s, n); > > +#endif > > } > > TIMING_NOW (stop); > > > > @@ -115,3 +132,13 @@ test_main (void) > > } > > > > #include <support/test-driver.c> > > + > > +#ifdef DO_MEMSET > > +# define libc_hidden_builtin_def(X) > > +# define libc_hidden_def(X) > > +# define libc_hidden_weak(X) > > +# define weak_alias(X,Y) > > +# undef MEMSET > > +# define MEMSET generic_memset > > +# include <string/memset.c> > > +#endif > > diff --git a/benchtests/bench-bzero-walk.c b/benchtests/bench-bzero-walk.c > > index b65d12a6a2..00226f80b8 100644 > > --- a/benchtests/bench-bzero-walk.c > > +++ b/benchtests/bench-bzero-walk.c > > @@ -17,7 +17,11 @@ > > <https://www.gnu.org/licenses/>. */ > > > > #define TEST_MAIN > > -#define TEST_NAME "bzero" > > +#ifdef DO_MEMSET > > +# define TEST_NAME "memset" > > +#else > > +# define TEST_NAME "bzero" > > +#endif > > #define START_SIZE 128 > > #define MIN_PAGE_SIZE (getpagesize () + 32 * 1024 * 1024) > > #define TIMEOUT (20 * 60) > > @@ -25,6 +29,15 @@ > > > > #include "json-lib.h" > > > > +#ifdef DO_MEMSET > > +void *generic_memset (void *, int, size_t); > > + > > +typedef void *(*proto_t) (void *, int, size_t); > > + > > +IMPL (memset, 1) > > +IMPL (generic_memset, 0) > > + > > +#else > > static void > > memset_zero (void * s, size_t len) > > { > > @@ -35,6 +48,7 @@ typedef void (*proto_t) (void *, size_t); > > > > IMPL (bzero, 1) > > IMPL (memset_zero, 0) > > +#endif > > > > static void > > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, > > @@ -45,7 +59,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, > > > > TIMING_NOW (start); > > for (i = 0; i < iters && s <= s_end; s_end -= n, i++) > > +#ifdef DO_MEMSET > > + CALL (impl, s, 0, n); > > +#else > > CALL (impl, s, n); > > +#endif > > TIMING_NOW (stop); > > > > TIMING_DIFF (cur, start, stop); > > @@ -116,3 +134,13 @@ test_main (void) > > } > > > > #include <support/test-driver.c> > > + > > +#ifdef DO_MEMSET > > +# define libc_hidden_builtin_def(X) > > +# define libc_hidden_def(X) > > +# define libc_hidden_weak(X) > > +# define weak_alias(X,Y) > > +# undef MEMSET > > +# define MEMSET generic_memset > > +# include <string/memset.c> > > +#endif > > diff --git a/benchtests/bench-bzero.c b/benchtests/bench-bzero.c > > index 93ec521725..500b7eba96 100644 > > --- a/benchtests/bench-bzero.c > > +++ b/benchtests/bench-bzero.c > > @@ -17,12 +17,25 @@ > > <https://www.gnu.org/licenses/>. */ > > > > #define TEST_MAIN > > -#define TEST_NAME "bzero" > > +#ifdef DO_MEMSET > > +# define TEST_NAME "memset" > > +#else > > +# define TEST_NAME "bzero" > > +#endif > > #define MIN_PAGE_SIZE 131072 > > #include "bench-string.h" > > > > #include "json-lib.h" > > > > +#ifdef DO_MEMSET > > +void *generic_memset (void *, int, size_t); > > + > > +typedef void *(*proto_t) (void *, int, size_t); > > + > > +IMPL (memset, 1) > > +IMPL (generic_memset, 0) > > + > > +#else > > static void > > memset_zero (void * s, size_t len) > > { > > @@ -33,6 +46,7 @@ typedef void (*proto_t) (void *, size_t); > > > > IMPL (bzero, 1) > > IMPL (memset_zero, 0) > > +#endif > > > > static void > > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > @@ -43,7 +57,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > TIMING_NOW (start); > > for (i = 0; i < iters; ++i) > > { > > +#ifdef DO_MEMSET > > + CALL (impl, s, 0, n); > > +#else > > CALL (impl, s, n); > > +#endif > > } > > TIMING_NOW (stop); > > > > @@ -132,3 +150,13 @@ test_main (void) > > } > > > > #include <support/test-driver.c> > > + > > +#ifdef DO_MEMSET > > +# define libc_hidden_builtin_def(X) > > +# define libc_hidden_def(X) > > +# define libc_hidden_weak(X) > > +# define weak_alias(X,Y) > > +# undef MEMSET > > +# define MEMSET generic_memset > > +# include <string/memset.c> > > +#endif > > diff --git a/benchtests/bench-memset-zero-large.c b/benchtests/bench-memset-zero-large.c > > new file mode 100644 > > index 0000000000..bc938cdfff > > --- /dev/null > > +++ b/benchtests/bench-memset-zero-large.c > > @@ -0,0 +1,20 @@ > > +/* Measure memset functions for zeroing with large data sizes. > > + Copyright (C) 2022 Free Software Foundation, Inc. > > + This file is part of the GNU C Library. > > + > > + The GNU C Library is free software; you can redistribute it and/or > > + modify it under the terms of the GNU Lesser General Public > > + License as published by the Free Software Foundation; either > > + version 2.1 of the License, or (at your option) any later version. > > + > > + The GNU C Library is distributed in the hope that it will be useful, > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + Lesser General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with the GNU C Library; if not, see > > + <https://www.gnu.org/licenses/>. */ > > + > > +#define DO_MEMSET 1 > > +#include "bench-bzero-large.c" > > diff --git a/benchtests/bench-memset-zero-walk.c b/benchtests/bench-memset-zero-walk.c > > new file mode 100644 > > index 0000000000..dce4b43e06 > > --- /dev/null > > +++ b/benchtests/bench-memset-zero-walk.c > > @@ -0,0 +1,20 @@ > > +/* Measure memset functions for zeroing throughput with large data sizes. > > + Copyright (C) 2022 Free Software Foundation, Inc. > > + This file is part of the GNU C Library. > > + > > + The GNU C Library is free software; you can redistribute it and/or > > + modify it under the terms of the GNU Lesser General Public > > + License as published by the Free Software Foundation; either > > + version 2.1 of the License, or (at your option) any later version. > > + > > + The GNU C Library is distributed in the hope that it will be useful, > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + Lesser General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with the GNU C Library; if not, see > > + <https://www.gnu.org/licenses/>. */ > > + > > +#define DO_MEMSET 1 > > +#include "bench-bzero-walk.c" > > diff --git a/benchtests/bench-memset-zero.c b/benchtests/bench-memset-zero.c > > new file mode 100644 > > index 0000000000..535005f0e6 > > --- /dev/null > > +++ b/benchtests/bench-memset-zero.c > > @@ -0,0 +1,20 @@ > > +/* Measure memset functions for zeroing. > > + Copyright (C) 2022 Free Software Foundation, Inc. > > + This file is part of the GNU C Library. > > + > > + The GNU C Library is free software; you can redistribute it and/or > > + modify it under the terms of the GNU Lesser General Public > > + License as published by the Free Software Foundation; either > > + version 2.1 of the License, or (at your option) any later version. > > + > > + The GNU C Library is distributed in the hope that it will be useful, > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > + Lesser General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with the GNU C Library; if not, see > > + <https://www.gnu.org/licenses/>. */ > > + > > +#define DO_MEMSET 1 > > +#include "bench-bzero.c" > > -- > > 2.34.1 > >
On Wed, Feb 23, 2022 at 11:20 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > On Wed, Feb 23, 2022 at 1:04 PM Sunil Pandey via Libc-alpha > <libc-alpha@sourceware.org> wrote: > > > > LGTM > > Reviewed-by: Sunil K Pandey <skpgkp2@gmail.com> > > > > Thanks, > > Sunil > > > > Think we should wait until we decide on actually adding `__memsetzero` > to benchmarks for it. This is not for __memsetzero. It is for memset with 0 input value. H.J. > > On Wed, Feb 9, 2022 at 7:36 AM H.J. Lu via Libc-alpha > > <libc-alpha@sourceware.org> wrote: > > > > > > memset with zero as the value to set is by far the majority value (99%+ > > > for Python3 and GCC). Add bench-memset-zero-large.c, > > > bench-memset-zero-walk.c and bench-memset-zero.c to measure memset > > > functions for zeroing. > > > --- > > > benchtests/Makefile | 3 +++ > > > benchtests/bench-bzero-large.c | 29 ++++++++++++++++++++++++++- > > > benchtests/bench-bzero-walk.c | 30 +++++++++++++++++++++++++++- > > > benchtests/bench-bzero.c | 30 +++++++++++++++++++++++++++- > > > benchtests/bench-memset-zero-large.c | 20 +++++++++++++++++++ > > > benchtests/bench-memset-zero-walk.c | 20 +++++++++++++++++++ > > > benchtests/bench-memset-zero.c | 20 +++++++++++++++++++ > > > 7 files changed, 149 insertions(+), 3 deletions(-) > > > create mode 100644 benchtests/bench-memset-zero-large.c > > > create mode 100644 benchtests/bench-memset-zero-walk.c > > > create mode 100644 benchtests/bench-memset-zero.c > > > > > > diff --git a/benchtests/Makefile b/benchtests/Makefile > > > index 6f718fac35..9b8df3b3f5 100644 > > > --- a/benchtests/Makefile > > > +++ b/benchtests/Makefile > > > @@ -139,6 +139,9 @@ string-benchset := \ > > > memset \ > > > memset-large \ > > > memset-walk \ > > > + memset-zero \ > > > + memset-zero-large \ > > > + memset-zero-walk \ > > > rawmemchr \ > > > stpcpy \ > > > stpcpy_chk \ > > > diff --git a/benchtests/bench-bzero-large.c b/benchtests/bench-bzero-large.c > > > index f2e2e981b7..cfc7b81cdf 100644 > > > --- a/benchtests/bench-bzero-large.c > > > +++ b/benchtests/bench-bzero-large.c > > > @@ -17,7 +17,11 @@ > > > <https://www.gnu.org/licenses/>. */ > > > > > > #define TEST_MAIN > > > -#define TEST_NAME "bzero" > > > +#ifdef DO_MEMSET > > > +# define TEST_NAME "memset" > > > +#else > > > +# define TEST_NAME "bzero" > > > +#endif > > > #define START_SIZE (128 * 1024) > > > #define MIN_PAGE_SIZE (getpagesize () + 64 * 1024 * 1024) > > > #define TIMEOUT (20 * 60) > > > @@ -25,6 +29,14 @@ > > > > > > #include "json-lib.h" > > > > > > +#ifdef DO_MEMSET > > > +void *generic_memset (void *, int, size_t); > > > + > > > +typedef void *(*proto_t) (void *, int, size_t); > > > + > > > +IMPL (memset, 1) > > > +IMPL (generic_memset, 0) > > > +#else > > > static void > > > memset_zero (void * s, size_t len) > > > { > > > @@ -35,6 +47,7 @@ typedef void (*proto_t) (void *, size_t); > > > > > > IMPL (bzero, 1) > > > IMPL (memset_zero, 0) > > > +#endif > > > > > > static void > > > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > > @@ -45,7 +58,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > > TIMING_NOW (start); > > > for (i = 0; i < iters; ++i) > > > { > > > +#ifdef DO_MEMSET > > > + CALL (impl, s, 0, n); > > > +#else > > > CALL (impl, s, n); > > > +#endif > > > } > > > TIMING_NOW (stop); > > > > > > @@ -115,3 +132,13 @@ test_main (void) > > > } > > > > > > #include <support/test-driver.c> > > > + > > > +#ifdef DO_MEMSET > > > +# define libc_hidden_builtin_def(X) > > > +# define libc_hidden_def(X) > > > +# define libc_hidden_weak(X) > > > +# define weak_alias(X,Y) > > > +# undef MEMSET > > > +# define MEMSET generic_memset > > > +# include <string/memset.c> > > > +#endif > > > diff --git a/benchtests/bench-bzero-walk.c b/benchtests/bench-bzero-walk.c > > > index b65d12a6a2..00226f80b8 100644 > > > --- a/benchtests/bench-bzero-walk.c > > > +++ b/benchtests/bench-bzero-walk.c > > > @@ -17,7 +17,11 @@ > > > <https://www.gnu.org/licenses/>. */ > > > > > > #define TEST_MAIN > > > -#define TEST_NAME "bzero" > > > +#ifdef DO_MEMSET > > > +# define TEST_NAME "memset" > > > +#else > > > +# define TEST_NAME "bzero" > > > +#endif > > > #define START_SIZE 128 > > > #define MIN_PAGE_SIZE (getpagesize () + 32 * 1024 * 1024) > > > #define TIMEOUT (20 * 60) > > > @@ -25,6 +29,15 @@ > > > > > > #include "json-lib.h" > > > > > > +#ifdef DO_MEMSET > > > +void *generic_memset (void *, int, size_t); > > > + > > > +typedef void *(*proto_t) (void *, int, size_t); > > > + > > > +IMPL (memset, 1) > > > +IMPL (generic_memset, 0) > > > + > > > +#else > > > static void > > > memset_zero (void * s, size_t len) > > > { > > > @@ -35,6 +48,7 @@ typedef void (*proto_t) (void *, size_t); > > > > > > IMPL (bzero, 1) > > > IMPL (memset_zero, 0) > > > +#endif > > > > > > static void > > > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, > > > @@ -45,7 +59,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, > > > > > > TIMING_NOW (start); > > > for (i = 0; i < iters && s <= s_end; s_end -= n, i++) > > > +#ifdef DO_MEMSET > > > + CALL (impl, s, 0, n); > > > +#else > > > CALL (impl, s, n); > > > +#endif > > > TIMING_NOW (stop); > > > > > > TIMING_DIFF (cur, start, stop); > > > @@ -116,3 +134,13 @@ test_main (void) > > > } > > > > > > #include <support/test-driver.c> > > > + > > > +#ifdef DO_MEMSET > > > +# define libc_hidden_builtin_def(X) > > > +# define libc_hidden_def(X) > > > +# define libc_hidden_weak(X) > > > +# define weak_alias(X,Y) > > > +# undef MEMSET > > > +# define MEMSET generic_memset > > > +# include <string/memset.c> > > > +#endif > > > diff --git a/benchtests/bench-bzero.c b/benchtests/bench-bzero.c > > > index 93ec521725..500b7eba96 100644 > > > --- a/benchtests/bench-bzero.c > > > +++ b/benchtests/bench-bzero.c > > > @@ -17,12 +17,25 @@ > > > <https://www.gnu.org/licenses/>. */ > > > > > > #define TEST_MAIN > > > -#define TEST_NAME "bzero" > > > +#ifdef DO_MEMSET > > > +# define TEST_NAME "memset" > > > +#else > > > +# define TEST_NAME "bzero" > > > +#endif > > > #define MIN_PAGE_SIZE 131072 > > > #include "bench-string.h" > > > > > > #include "json-lib.h" > > > > > > +#ifdef DO_MEMSET > > > +void *generic_memset (void *, int, size_t); > > > + > > > +typedef void *(*proto_t) (void *, int, size_t); > > > + > > > +IMPL (memset, 1) > > > +IMPL (generic_memset, 0) > > > + > > > +#else > > > static void > > > memset_zero (void * s, size_t len) > > > { > > > @@ -33,6 +46,7 @@ typedef void (*proto_t) (void *, size_t); > > > > > > IMPL (bzero, 1) > > > IMPL (memset_zero, 0) > > > +#endif > > > > > > static void > > > do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > > @@ -43,7 +57,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) > > > TIMING_NOW (start); > > > for (i = 0; i < iters; ++i) > > > { > > > +#ifdef DO_MEMSET > > > + CALL (impl, s, 0, n); > > > +#else > > > CALL (impl, s, n); > > > +#endif > > > } > > > TIMING_NOW (stop); > > > > > > @@ -132,3 +150,13 @@ test_main (void) > > > } > > > > > > #include <support/test-driver.c> > > > + > > > +#ifdef DO_MEMSET > > > +# define libc_hidden_builtin_def(X) > > > +# define libc_hidden_def(X) > > > +# define libc_hidden_weak(X) > > > +# define weak_alias(X,Y) > > > +# undef MEMSET > > > +# define MEMSET generic_memset > > > +# include <string/memset.c> > > > +#endif > > > diff --git a/benchtests/bench-memset-zero-large.c b/benchtests/bench-memset-zero-large.c > > > new file mode 100644 > > > index 0000000000..bc938cdfff > > > --- /dev/null > > > +++ b/benchtests/bench-memset-zero-large.c > > > @@ -0,0 +1,20 @@ > > > +/* Measure memset functions for zeroing with large data sizes. > > > + Copyright (C) 2022 Free Software Foundation, Inc. > > > + This file is part of the GNU C Library. > > > + > > > + The GNU C Library is free software; you can redistribute it and/or > > > + modify it under the terms of the GNU Lesser General Public > > > + License as published by the Free Software Foundation; either > > > + version 2.1 of the License, or (at your option) any later version. > > > + > > > + The GNU C Library is distributed in the hope that it will be useful, > > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > + Lesser General Public License for more details. > > > + > > > + You should have received a copy of the GNU Lesser General Public > > > + License along with the GNU C Library; if not, see > > > + <https://www.gnu.org/licenses/>. */ > > > + > > > +#define DO_MEMSET 1 > > > +#include "bench-bzero-large.c" > > > diff --git a/benchtests/bench-memset-zero-walk.c b/benchtests/bench-memset-zero-walk.c > > > new file mode 100644 > > > index 0000000000..dce4b43e06 > > > --- /dev/null > > > +++ b/benchtests/bench-memset-zero-walk.c > > > @@ -0,0 +1,20 @@ > > > +/* Measure memset functions for zeroing throughput with large data sizes. > > > + Copyright (C) 2022 Free Software Foundation, Inc. > > > + This file is part of the GNU C Library. > > > + > > > + The GNU C Library is free software; you can redistribute it and/or > > > + modify it under the terms of the GNU Lesser General Public > > > + License as published by the Free Software Foundation; either > > > + version 2.1 of the License, or (at your option) any later version. > > > + > > > + The GNU C Library is distributed in the hope that it will be useful, > > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > + Lesser General Public License for more details. > > > + > > > + You should have received a copy of the GNU Lesser General Public > > > + License along with the GNU C Library; if not, see > > > + <https://www.gnu.org/licenses/>. */ > > > + > > > +#define DO_MEMSET 1 > > > +#include "bench-bzero-walk.c" > > > diff --git a/benchtests/bench-memset-zero.c b/benchtests/bench-memset-zero.c > > > new file mode 100644 > > > index 0000000000..535005f0e6 > > > --- /dev/null > > > +++ b/benchtests/bench-memset-zero.c > > > @@ -0,0 +1,20 @@ > > > +/* Measure memset functions for zeroing. > > > + Copyright (C) 2022 Free Software Foundation, Inc. > > > + This file is part of the GNU C Library. > > > + > > > + The GNU C Library is free software; you can redistribute it and/or > > > + modify it under the terms of the GNU Lesser General Public > > > + License as published by the Free Software Foundation; either > > > + version 2.1 of the License, or (at your option) any later version. > > > + > > > + The GNU C Library is distributed in the hope that it will be useful, > > > + but WITHOUT ANY WARRANTY; without even the implied warranty of > > > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > + Lesser General Public License for more details. > > > + > > > + You should have received a copy of the GNU Lesser General Public > > > + License along with the GNU C Library; if not, see > > > + <https://www.gnu.org/licenses/>. */ > > > + > > > +#define DO_MEMSET 1 > > > +#include "bench-bzero.c" > > > -- > > > 2.34.1 > > >
diff --git a/benchtests/Makefile b/benchtests/Makefile index 6f718fac35..9b8df3b3f5 100644 --- a/benchtests/Makefile +++ b/benchtests/Makefile @@ -139,6 +139,9 @@ string-benchset := \ memset \ memset-large \ memset-walk \ + memset-zero \ + memset-zero-large \ + memset-zero-walk \ rawmemchr \ stpcpy \ stpcpy_chk \ diff --git a/benchtests/bench-bzero-large.c b/benchtests/bench-bzero-large.c index f2e2e981b7..cfc7b81cdf 100644 --- a/benchtests/bench-bzero-large.c +++ b/benchtests/bench-bzero-large.c @@ -17,7 +17,11 @@ <https://www.gnu.org/licenses/>. */ #define TEST_MAIN -#define TEST_NAME "bzero" +#ifdef DO_MEMSET +# define TEST_NAME "memset" +#else +# define TEST_NAME "bzero" +#endif #define START_SIZE (128 * 1024) #define MIN_PAGE_SIZE (getpagesize () + 64 * 1024 * 1024) #define TIMEOUT (20 * 60) @@ -25,6 +29,14 @@ #include "json-lib.h" +#ifdef DO_MEMSET +void *generic_memset (void *, int, size_t); + +typedef void *(*proto_t) (void *, int, size_t); + +IMPL (memset, 1) +IMPL (generic_memset, 0) +#else static void memset_zero (void * s, size_t len) { @@ -35,6 +47,7 @@ typedef void (*proto_t) (void *, size_t); IMPL (bzero, 1) IMPL (memset_zero, 0) +#endif static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) @@ -45,7 +58,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) TIMING_NOW (start); for (i = 0; i < iters; ++i) { +#ifdef DO_MEMSET + CALL (impl, s, 0, n); +#else CALL (impl, s, n); +#endif } TIMING_NOW (stop); @@ -115,3 +132,13 @@ test_main (void) } #include <support/test-driver.c> + +#ifdef DO_MEMSET +# define libc_hidden_builtin_def(X) +# define libc_hidden_def(X) +# define libc_hidden_weak(X) +# define weak_alias(X,Y) +# undef MEMSET +# define MEMSET generic_memset +# include <string/memset.c> +#endif diff --git a/benchtests/bench-bzero-walk.c b/benchtests/bench-bzero-walk.c index b65d12a6a2..00226f80b8 100644 --- a/benchtests/bench-bzero-walk.c +++ b/benchtests/bench-bzero-walk.c @@ -17,7 +17,11 @@ <https://www.gnu.org/licenses/>. */ #define TEST_MAIN -#define TEST_NAME "bzero" +#ifdef DO_MEMSET +# define TEST_NAME "memset" +#else +# define TEST_NAME "bzero" +#endif #define START_SIZE 128 #define MIN_PAGE_SIZE (getpagesize () + 32 * 1024 * 1024) #define TIMEOUT (20 * 60) @@ -25,6 +29,15 @@ #include "json-lib.h" +#ifdef DO_MEMSET +void *generic_memset (void *, int, size_t); + +typedef void *(*proto_t) (void *, int, size_t); + +IMPL (memset, 1) +IMPL (generic_memset, 0) + +#else static void memset_zero (void * s, size_t len) { @@ -35,6 +48,7 @@ typedef void (*proto_t) (void *, size_t); IMPL (bzero, 1) IMPL (memset_zero, 0) +#endif static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, @@ -45,7 +59,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end, TIMING_NOW (start); for (i = 0; i < iters && s <= s_end; s_end -= n, i++) +#ifdef DO_MEMSET + CALL (impl, s, 0, n); +#else CALL (impl, s, n); +#endif TIMING_NOW (stop); TIMING_DIFF (cur, start, stop); @@ -116,3 +134,13 @@ test_main (void) } #include <support/test-driver.c> + +#ifdef DO_MEMSET +# define libc_hidden_builtin_def(X) +# define libc_hidden_def(X) +# define libc_hidden_weak(X) +# define weak_alias(X,Y) +# undef MEMSET +# define MEMSET generic_memset +# include <string/memset.c> +#endif diff --git a/benchtests/bench-bzero.c b/benchtests/bench-bzero.c index 93ec521725..500b7eba96 100644 --- a/benchtests/bench-bzero.c +++ b/benchtests/bench-bzero.c @@ -17,12 +17,25 @@ <https://www.gnu.org/licenses/>. */ #define TEST_MAIN -#define TEST_NAME "bzero" +#ifdef DO_MEMSET +# define TEST_NAME "memset" +#else +# define TEST_NAME "bzero" +#endif #define MIN_PAGE_SIZE 131072 #include "bench-string.h" #include "json-lib.h" +#ifdef DO_MEMSET +void *generic_memset (void *, int, size_t); + +typedef void *(*proto_t) (void *, int, size_t); + +IMPL (memset, 1) +IMPL (generic_memset, 0) + +#else static void memset_zero (void * s, size_t len) { @@ -33,6 +46,7 @@ typedef void (*proto_t) (void *, size_t); IMPL (bzero, 1) IMPL (memset_zero, 0) +#endif static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) @@ -43,7 +57,11 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) TIMING_NOW (start); for (i = 0; i < iters; ++i) { +#ifdef DO_MEMSET + CALL (impl, s, 0, n); +#else CALL (impl, s, n); +#endif } TIMING_NOW (stop); @@ -132,3 +150,13 @@ test_main (void) } #include <support/test-driver.c> + +#ifdef DO_MEMSET +# define libc_hidden_builtin_def(X) +# define libc_hidden_def(X) +# define libc_hidden_weak(X) +# define weak_alias(X,Y) +# undef MEMSET +# define MEMSET generic_memset +# include <string/memset.c> +#endif diff --git a/benchtests/bench-memset-zero-large.c b/benchtests/bench-memset-zero-large.c new file mode 100644 index 0000000000..bc938cdfff --- /dev/null +++ b/benchtests/bench-memset-zero-large.c @@ -0,0 +1,20 @@ +/* Measure memset functions for zeroing with large data sizes. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define DO_MEMSET 1 +#include "bench-bzero-large.c" diff --git a/benchtests/bench-memset-zero-walk.c b/benchtests/bench-memset-zero-walk.c new file mode 100644 index 0000000000..dce4b43e06 --- /dev/null +++ b/benchtests/bench-memset-zero-walk.c @@ -0,0 +1,20 @@ +/* Measure memset functions for zeroing throughput with large data sizes. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define DO_MEMSET 1 +#include "bench-bzero-walk.c" diff --git a/benchtests/bench-memset-zero.c b/benchtests/bench-memset-zero.c new file mode 100644 index 0000000000..535005f0e6 --- /dev/null +++ b/benchtests/bench-memset-zero.c @@ -0,0 +1,20 @@ +/* Measure memset functions for zeroing. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#define DO_MEMSET 1 +#include "bench-bzero.c"