summaryrefslogtreecommitdiff
path: root/tune
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2020-03-20 12:06:28 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2020-03-20 12:06:28 +0100
commit3737a65526f080d5ec31f32f50196a9cf4a8471c (patch)
tree8f90acf1e612ffefa124d9b3a8b63714560b983f /tune
parent610f37abf2e1b3082b8f9b5d6789d042c09e9e23 (diff)
downloadgmp-3737a65526f080d5ec31f32f50196a9cf4a8471c.tar.gz
tune: New mesurable speed, mpz_nextprime_1.
Diffstat (limited to 'tune')
-rw-r--r--tune/common.c6
-rw-r--r--tune/speed.c1
-rw-r--r--tune/speed.h47
3 files changed, 54 insertions, 0 deletions
diff --git a/tune/common.c b/tune/common.c
index c8b17fced..b7e243e88 100644
--- a/tune/common.c
+++ b/tune/common.c
@@ -1770,6 +1770,12 @@ speed_mpz_nextprime (struct speed_params *s)
}
double
+speed_mpz_nextprime_1 (struct speed_params *s)
+{
+ SPEED_ROUTINE_MPZ_UNARY_1 (mpz_nextprime);
+}
+
+double
speed_mpz_jacobi (struct speed_params *s)
{
SPEED_ROUTINE_MPZ_JACOBI (mpz_jacobi);
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; \