Mercurial > hg > sv-dependency-builds
diff src/fftw-3.3.5/libbench2/bench-main.c @ 42:2cd0e3b3e1fd
Current fftw source
author | Chris Cannam |
---|---|
date | Tue, 18 Oct 2016 13:40:26 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fftw-3.3.5/libbench2/bench-main.c Tue Oct 18 13:40:26 2016 +0100 @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2001 Matteo Frigo + * Copyright (c) 2001 Massachusetts Institute of Technology + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#include "bench.h" +#include "my-getopt.h" +#include <stdio.h> +#include <stdlib.h> + +int verbose; + +static const struct my_option options[] = +{ + {"accuracy", REQARG, 'a'}, + {"accuracy-rounds", REQARG, 405}, + {"impulse-accuracy-rounds", REQARG, 406}, + {"can-do", REQARG, 'd'}, + {"help", NOARG, 'h'}, + {"info", REQARG, 'i'}, + {"info-all", NOARG, 'I'}, + {"print-precision", NOARG, 402}, + {"print-time-min", NOARG, 400}, + {"random-seed", REQARG, 404}, + {"report-benchmark", NOARG, 320}, + {"report-mflops", NOARG, 300}, + {"report-time", NOARG, 310}, + {"report-verbose", NOARG, 330}, + {"speed", REQARG, 's'}, + {"setup-speed", REQARG, 'S'}, + {"time-min", REQARG, 't'}, + {"time-repeat", REQARG, 'r'}, + {"user-option", REQARG, 'o'}, + {"verbose", OPTARG, 'v'}, + {"verify", REQARG, 'y'}, + {"verify-rounds", REQARG, 401}, + {"verify-tolerance", REQARG, 403}, + {0, NOARG, 0} +}; + +int bench_main(int argc, char *argv[]) +{ + double tmin = 0.0; + double tol; + int repeat = 0; + int rounds = 10; + int iarounds = 0; + int arounds = 1; /* this is too low for precise results */ + int c; + + report = report_verbose; /* default */ + verbose = 0; + + tol = SINGLE_PRECISION ? 1.0e-3 : (QUAD_PRECISION ? 1e-29 : 1.0e-10); + + main_init(&argc, &argv); + + bench_srand(1); + + while ((c = my_getopt (argc, argv, options)) != -1) { + switch (c) { + case 't' : + tmin = strtod(my_optarg, 0); + break; + case 'r': + repeat = atoi(my_optarg); + break; + case 's': + timer_init(tmin, repeat); + speed(my_optarg, 0); + break; + case 'S': + timer_init(tmin, repeat); + speed(my_optarg, 1); + break; + case 'd': + report_can_do(my_optarg); + break; + case 'o': + useropt(my_optarg); + break; + case 'v': + if (verbose >= 0) { /* verbose < 0 disables output */ + if (my_optarg) + verbose = atoi(my_optarg); + else + ++verbose; + } + break; + case 'y': + verify(my_optarg, rounds, tol); + break; + case 'a': + accuracy(my_optarg, arounds, iarounds); + break; + case 'i': + report_info(my_optarg); + break; + case 'I': + report_info_all(); + break; + case 'h': + if (verbose >= 0) my_usage(argv[0], options); + break; + + case 300: /* --report-mflops */ + report = report_mflops; + break; + + case 310: /* --report-time */ + report = report_time; + break; + + case 320: /* --report-benchmark */ + report = report_benchmark; + break; + + case 330: /* --report-verbose */ + report = report_verbose; + break; + + case 400: /* --print-time-min */ + timer_init(tmin, repeat); + ovtpvt("%g\n", time_min); + break; + + case 401: /* --verify-rounds */ + rounds = atoi(my_optarg); + break; + + case 402: /* --print-precision */ + if (SINGLE_PRECISION) + ovtpvt("single\n"); + else if (QUAD_PRECISION) + ovtpvt("quad\n"); + else if (LDOUBLE_PRECISION) + ovtpvt("long-double\n"); + else if (DOUBLE_PRECISION) + ovtpvt("double\n"); + else + ovtpvt("unknown %d\n", sizeof(bench_real)); + break; + + case 403: /* --verify-tolerance */ + tol = strtod(my_optarg, 0); + break; + + case 404: /* --random-seed */ + bench_srand(atoi(my_optarg)); + break; + + case 405: /* --accuracy-rounds */ + arounds = atoi(my_optarg); + break; + + case 406: /* --impulse-accuracy-rounds */ + iarounds = atoi(my_optarg); + break; + + case '?': + /* my_getopt() already printed an error message. */ + cleanup(); + return 1; + + default: + abort (); + } + } + + /* assume that any remaining arguments are problems to be + benchmarked */ + while (my_optind < argc) { + timer_init(tmin, repeat); + speed(argv[my_optind++], 0); + } + + cleanup(); + return 0; +}