diff options
Diffstat (limited to 'moon-abe/pbc-0.5.14/guru/timefp.c')
-rw-r--r-- | moon-abe/pbc-0.5.14/guru/timefp.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/moon-abe/pbc-0.5.14/guru/timefp.c b/moon-abe/pbc-0.5.14/guru/timefp.c new file mode 100644 index 00000000..6e308f9a --- /dev/null +++ b/moon-abe/pbc-0.5.14/guru/timefp.c @@ -0,0 +1,98 @@ +#include "pbc.h" +#include "pbc_fp.h" +#include "pbc_test.h" + +static void timefield(field_t fp) { + int i, n; + double t0, t1; + + element_t x, y, z; + element_init(x, fp); + element_init(y, fp); + element_init(z, fp); + + element_random(x); + element_random(y); + + n = 20000; + t0 = pbc_get_time(); + for (i=0; i<n; i++) { + element_mul(z, x, y); + element_mul(x, y, z); + element_mul(y, z, x); + } + t1 = pbc_get_time(); + printf("mul %fs\n", t1 - t0); + + n = 20000; + t0 = pbc_get_time(); + for (i=0; i<n; i++) { + element_square(x, x); + } + t1 = pbc_get_time(); + printf("square %fs\n", t1 - t0); + + n = 1000; + t0 = pbc_get_time(); + for (i=0; i<n; i++) { + element_invert(z, x); + element_invert(z, y); + } + t1 = pbc_get_time(); + printf("invert %fs\n", t1 - t0); + + n = 40000; + t0 = pbc_get_time(); + for (i=0; i<n; i++) { + element_set0(z); + } + t1 = pbc_get_time(); + printf("set0 %fs\n", t1 - t0); + + n = 40000; + t0 = pbc_get_time(); + for (i=0; i<n; i++) { + element_set(z, x); + element_set(z, y); + } + t1 = pbc_get_time(); + printf("set %fs\n", t1 - t0); + + n = 400; + t0 = pbc_get_time(); + for (i=0; i<n; i++) { + element_pow_zn(x, y, z); + } + t1 = pbc_get_time(); + printf("pow_zn %fs\n", t1 - t0); + + element_clear(x); + element_clear(y); + element_clear(z); +} + +int main(int argc, char **argv) { + field_t f1, f2; + mpz_t prime; + + mpz_init(prime); + if (argc > 1) { + mpz_setbit(prime, atoi(argv[1])); + } else { + mpz_setbit(prime, 201); + } + mpz_setbit(prime, 70); + mpz_nextprime(prime, prime); + field_init_mont_fp(f1, prime); + field_init_faster_fp(f2, prime); + + printf("montfp.c\n"); + timefield(f1); + printf("fasterfp.c\n"); + timefield(f2); + + mpz_clear(prime); + field_clear(f1); + field_clear(f2); + return 0; +} |