From 3737a65526f080d5ec31f32f50196a9cf4a8471c Mon Sep 17 00:00:00 2001 From: Marco Bodrato Date: Fri, 20 Mar 2020 12:06:28 +0100 Subject: tune: New mesurable speed, mpz_nextprime_1. --- tune/common.c | 6 ++++++ tune/speed.c | 1 + tune/speed.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) (limited to 'tune') diff --git a/tune/common.c b/tune/common.c index c8b17fced..b7e243e88 100644 --- a/tune/common.c +++ b/tune/common.c @@ -1769,6 +1769,12 @@ speed_mpz_nextprime (struct speed_params *s) SPEED_ROUTINE_MPZ_NEXTPRIME (mpz_nextprime); } +double +speed_mpz_nextprime_1 (struct speed_params *s) +{ + SPEED_ROUTINE_MPZ_UNARY_1 (mpz_nextprime); +} + double speed_mpz_jacobi (struct speed_params *s) { diff --git a/tune/speed.c b/tune/speed.c index 1708e4ca1..e0d961e22 100644 --- a/tune/speed.c +++ b/tune/speed.c @@ -317,6 +317,7 @@ const struct routine_t { #endif { "mpz_nextprime", speed_mpz_nextprime }, + { "mpz_nextprime_1", speed_mpz_nextprime_1, FLAG_R_OPTIONAL }, { "mpz_jacobi", speed_mpz_jacobi }, { "mpn_jacobi_base", speed_mpn_jacobi_base }, diff --git a/tune/speed.h b/tune/speed.h index f23bacb1e..f6f532e00 100644 --- a/tune/speed.h +++ b/tune/speed.h @@ -408,6 +408,7 @@ 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_mpz_nextprime (struct speed_params *); +double speed_mpz_nextprime_1 (struct speed_params *); double speed_mpz_jacobi (struct speed_params *); double speed_mpz_lucnum_ui (struct speed_params *); double speed_mpz_lucnum2_ui (struct speed_params *); @@ -2575,6 +2576,52 @@ int speed_routine_count_zeros_setup (struct speed_params *, mp_ptr, int, int); #define SPEED_ROUTINE_MPZ_LUCNUM_UI(function) SPEED_ROUTINE_MPZ_UI(function) +#define SPEED_ROUTINE_MPZ_UNARY_1(function) \ + { \ + mpz_t z, a; \ + unsigned i; \ + mp_limb_t ls; \ + double t; \ + \ + SPEED_RESTRICT_COND (s->size >= 0); \ + \ + mpz_init (z); \ + ls = s->size; \ + mpz_roinit_n (a, &ls, s->size != 0); \ + \ + if (s->r < 2) \ + { \ + speed_starttime (); \ + i = s->reps; \ + do \ + function (z, a); \ + while (--i != 0); \ + t = speed_endtime (); \ + } \ + else \ + { \ + speed_starttime (); \ + i = s->reps; \ + do \ + { \ + int j = s->r; \ + mpz_set (z, a); \ + do \ + { \ + function (z, z); \ + } \ + while (--j != 0); \ + } \ + while (--i != 0); \ + t = speed_endtime (); \ + s->time_divisor = s->r; \ + } \ + \ + mpz_clear (z); \ + return t; \ + } + + #define SPEED_ROUTINE_MPZ_2_UI(function) \ { \ mpz_t z, z2; \ -- cgit v1.2.1