diff options
Diffstat (limited to 'polly/lib/External/isl/imath/imtimer.c')
-rw-r--r-- | polly/lib/External/isl/imath/imtimer.c | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/polly/lib/External/isl/imath/imtimer.c b/polly/lib/External/isl/imath/imtimer.c deleted file mode 100644 index 2b926af8f39..00000000000 --- a/polly/lib/External/isl/imath/imtimer.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - Name: imtimer.c - Purpose: Timing tests for the imath library. - Author: M. J. Fromberger <http://spinning-yarns.org/michael/> - - Copyright (C) 2002-2008 Michael J. Fromberger, All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <limits.h> -#include <time.h> - -#include <unistd.h> - -#include "imath.h" - -extern mp_size multiply_threshold; /* global in imath.c */ -extern mp_size default_precision; /* global in imath.c */ - -double clocks_to_seconds(clock_t start, clock_t end); -double get_multiply_time(int nt, int prec); -double get_exptmod_time(int nt, int prec); -mp_int alloc_values(int nt, int prec); -void randomize_values(mp_int values, int nt, int prec); -void release_values(mp_int values, int nt); -void mp_int_random(mp_int z, int prec); - -const int g_mul_factor = 1000; - -int main(int argc, char *argv[]) -{ - int do_mul = 0, do_exp = 0, do_header = 1; - int num_tests, precision = default_precision, opt; - unsigned int seed = (unsigned int) time(NULL); - - while ((opt = getopt(argc, argv, "ehmnp:s:t:")) != EOF) { - switch (opt) { - case 'e': - do_exp = 1; - break; - case 'm': - do_mul = 1; - break; - case 'n': - do_header = 0; - break; - case 'p': - precision = atoi(optarg); - break; - case 's': - seed = atoi(optarg); - break; - case 't': - multiply_threshold = (mp_size) atoi(optarg); - break; - default: - fprintf(stderr, "Usage: imtimer [options] <num-tests>\n\n" - "Options understood:\n" - " -e -- test modular exponentiation speed.\n" - " -h -- display this help message.\n" - " -m -- test multiplication speed.\n" - " -n -- no header line.\n" - " -p <dig> -- use values with <dig> digits.\n" - " -s <rnd> -- set random seed to <rnd>.\n" - " -t <dig> -- set recursion threshold to <dig> digits.\n\n"); - return (opt != 'h'); - } - } - - if (optind >= argc) { - fprintf(stderr, "Usage: imtimer [options] <num-tests>\n" - "[use \"imtimer -h\" for help with options]\n\n"); - return 1; - } - else - num_tests = atoi(argv[optind]); - - srand(seed); - - if (num_tests <= 0) { - fprintf(stderr, "You must request at least one test.\n"); - return 1; - } - if (precision <= 0) { - fprintf(stderr, "Precision must be positive.\n"); - return 1; - } - - if (do_header) - printf("NUM\tPREC\tBITS\tREC\tRESULT\n"); - printf("%d\t%d\t%d\t%u", num_tests, precision, - (int) (precision * MP_DIGIT_BIT), - multiply_threshold); - - if (do_mul) { - double m_time = get_multiply_time(num_tests, precision); - - printf("\tMUL %.3f %.3f", m_time, m_time / num_tests); - } - - if (do_exp) { - double e_time = get_exptmod_time(num_tests, precision); - - printf("\tEXP %.3f %.3f", e_time, e_time / num_tests); - } - fputc('\n', stdout); - fflush(stdout); - - return 0; -} - -double clocks_to_seconds(clock_t start, clock_t end) -{ - return (double)(end - start) / CLOCKS_PER_SEC; -} - -mp_int alloc_values(int nt, int prec) -{ - mp_int out = malloc(nt * sizeof(mpz_t)); - int i; - - if (out == NULL) - return NULL; - - for (i = 0; i < nt; ++i) { - if (mp_int_init_size(out + i, prec) != MP_OK) { - while (--i >= 0) - mp_int_clear(out + i); - return NULL; - } - } - - return out; -} - -void randomize_values(mp_int values, int nt, int prec) -{ - int i; - - for (i = 0; i < nt; ++i) - mp_int_random(values + i, prec); -} - -void release_values(mp_int values, int nt) -{ - int i; - - for (i = 0; i < nt; ++i) - mp_int_clear(values + i); - - free(values); -} - -double get_multiply_time(int nt, int prec) -{ - clock_t start, end; - mp_int values; - int i; - - if ((values = alloc_values(3, prec)) == NULL) - return 0.0; - randomize_values(values, 2, prec); - - start = clock(); - for (i = 0; i < nt; ++i) - mp_int_mul(values, values + 1, values + 2); - end = clock(); - - release_values(values, 3); - - return clocks_to_seconds(start, end); -} - -double get_exptmod_time(int nt, int prec) -{ - clock_t start, end; - mp_int values; - int i; - - if ((values = alloc_values(4, prec)) == NULL) - return 0.0; - randomize_values(values, 3, prec); - - start = clock(); - for (i = 0; i < nt; ++i) - mp_int_exptmod(values, values + 1, values + 2, values + 3); - end = clock(); - - release_values(values, 4); - - return clocks_to_seconds(start, end); -} - -void mp_int_random(mp_int z, int prec) -{ - int i; - - if (prec > MP_ALLOC(z)) - prec = MP_ALLOC(z); - - for (i = 0; i < prec; ++i) { - mp_digit d = 0; - int j; - - for (j = 0; j < sizeof(d); ++j) - d = (d << CHAR_BIT) | (rand() & UCHAR_MAX); - - z->digits[i] = d; - } - MP_USED(z) = prec; -} |