From b3b25ed2a325adb2941f3fcad640aa78dc8dc92e Mon Sep 17 00:00:00 2001 From: Marco Bodrato Date: Thu, 14 Oct 2021 07:05:13 +0200 Subject: Add speed support for gmp_primesieve. --- tune/common.c | 6 ++++++ tune/speed.c | 1 + tune/speed.h | 29 +++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) (limited to 'tune') diff --git a/tune/common.c b/tune/common.c index 4f68b2652..b757bf271 100644 --- a/tune/common.c +++ b/tune/common.c @@ -1780,6 +1780,12 @@ speed_mpn_gcd_22 (struct speed_params *s) SPEED_ROUTINE_MPN_GCD_22 (mpn_gcd_22); } +double +speed_gmp_primesieve (struct speed_params *s) +{ + SPEED_ROUTINE_GMP_PRIMESIEVE (gmp_primesieve); +} + double speed_mpz_nextprime (struct speed_params *s) { diff --git a/tune/speed.c b/tune/speed.c index f26771168..115f2470f 100644 --- a/tune/speed.c +++ b/tune/speed.c @@ -321,6 +321,7 @@ const struct routine_t { { "mpn_gcdext_lehmer", speed_mpn_gcdext_lehmer }, #endif + { "gmp_primesieve", speed_gmp_primesieve }, { "mpz_nextprime", speed_mpz_nextprime }, { "mpz_nextprime_1", speed_mpz_nextprime_1, FLAG_R_OPTIONAL }, { "mpz_prevprime", speed_mpz_prevprime }, diff --git a/tune/speed.h b/tune/speed.h index 7fb0a8068..2f613bd9f 100644 --- a/tune/speed.h +++ b/tune/speed.h @@ -410,6 +410,7 @@ double speed_mpz_fib_ui (struct speed_params *); double speed_mpz_fib2_ui (struct speed_params *); double speed_mpz_init_clear (struct speed_params *); double speed_mpz_init_realloc_clear (struct speed_params *); +double speed_gmp_primesieve (struct speed_params *); double speed_mpz_nextprime (struct speed_params *); double speed_mpz_nextprime_1 (struct speed_params *); double speed_mpz_prevprime (struct speed_params *); @@ -3248,6 +3249,34 @@ int speed_routine_count_zeros_setup (struct speed_params *, mp_ptr, int, int); return t; \ } +#define SPEED_ROUTINE_GMP_PRIMESIEVE(function) \ +{ \ + mp_ptr wp; \ + unsigned i; \ + double t; \ + mp_limb_t a = s->size * GMP_LIMB_BITS * 3; \ + TMP_DECL; \ + \ + SPEED_RESTRICT_COND (s->size >= 1); \ + \ + TMP_MARK; \ + SPEED_TMP_ALLOC_LIMBS (wp, s->size, s->align_wp); \ + \ + speed_operand_dst (s, wp, s->size); \ + speed_cache_fill (s); \ + \ + speed_starttime (); \ + i = s->reps; \ + do \ + function (wp, a); \ + while (--i != 0); \ + t = speed_endtime (); \ + \ + TMP_FREE; \ + return t; \ +} + + /* Calculate nextprime(n) for random n of s->size bits (not limbs). */ #define SPEED_ROUTINE_MPZ_NEXTPRIME(function) \ { \ -- cgit v1.2.1