annotate src/fftw-3.3.8/libbench2/bench-main.c @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents d0c2a83c1364
children
rev   line source
Chris@82 1 /*
Chris@82 2 * Copyright (c) 2001 Matteo Frigo
Chris@82 3 * Copyright (c) 2001 Massachusetts Institute of Technology
Chris@82 4 *
Chris@82 5 * This program is free software; you can redistribute it and/or modify
Chris@82 6 * it under the terms of the GNU General Public License as published by
Chris@82 7 * the Free Software Foundation; either version 2 of the License, or
Chris@82 8 * (at your option) any later version.
Chris@82 9 *
Chris@82 10 * This program is distributed in the hope that it will be useful,
Chris@82 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@82 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@82 13 * GNU General Public License for more details.
Chris@82 14 *
Chris@82 15 * You should have received a copy of the GNU General Public License
Chris@82 16 * along with this program; if not, write to the Free Software
Chris@82 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Chris@82 18 *
Chris@82 19 */
Chris@82 20
Chris@82 21
Chris@82 22 #include "libbench2/bench.h"
Chris@82 23 #include "my-getopt.h"
Chris@82 24 #include <stdio.h>
Chris@82 25 #include <stdlib.h>
Chris@82 26
Chris@82 27 int verbose;
Chris@82 28
Chris@82 29 static const struct my_option options[] =
Chris@82 30 {
Chris@82 31 {"accuracy", REQARG, 'a'},
Chris@82 32 {"accuracy-rounds", REQARG, 405},
Chris@82 33 {"impulse-accuracy-rounds", REQARG, 406},
Chris@82 34 {"can-do", REQARG, 'd'},
Chris@82 35 {"help", NOARG, 'h'},
Chris@82 36 {"info", REQARG, 'i'},
Chris@82 37 {"info-all", NOARG, 'I'},
Chris@82 38 {"print-precision", NOARG, 402},
Chris@82 39 {"print-time-min", NOARG, 400},
Chris@82 40 {"random-seed", REQARG, 404},
Chris@82 41 {"report-benchmark", NOARG, 320},
Chris@82 42 {"report-mflops", NOARG, 300},
Chris@82 43 {"report-time", NOARG, 310},
Chris@82 44 {"report-verbose", NOARG, 330},
Chris@82 45 {"speed", REQARG, 's'},
Chris@82 46 {"setup-speed", REQARG, 'S'},
Chris@82 47 {"time-min", REQARG, 't'},
Chris@82 48 {"time-repeat", REQARG, 'r'},
Chris@82 49 {"user-option", REQARG, 'o'},
Chris@82 50 {"verbose", OPTARG, 'v'},
Chris@82 51 {"verify", REQARG, 'y'},
Chris@82 52 {"verify-rounds", REQARG, 401},
Chris@82 53 {"verify-tolerance", REQARG, 403},
Chris@82 54 {0, NOARG, 0}
Chris@82 55 };
Chris@82 56
Chris@82 57 int bench_main(int argc, char *argv[])
Chris@82 58 {
Chris@82 59 double tmin = 0.0;
Chris@82 60 double tol;
Chris@82 61 int repeat = 0;
Chris@82 62 int rounds = 10;
Chris@82 63 int iarounds = 0;
Chris@82 64 int arounds = 1; /* this is too low for precise results */
Chris@82 65 int c;
Chris@82 66
Chris@82 67 report = report_verbose; /* default */
Chris@82 68 verbose = 0;
Chris@82 69
Chris@82 70 tol = SINGLE_PRECISION ? 1.0e-3 : (QUAD_PRECISION ? 1e-29 : 1.0e-10);
Chris@82 71
Chris@82 72 main_init(&argc, &argv);
Chris@82 73
Chris@82 74 bench_srand(1);
Chris@82 75
Chris@82 76 while ((c = my_getopt (argc, argv, options)) != -1) {
Chris@82 77 switch (c) {
Chris@82 78 case 't' :
Chris@82 79 tmin = strtod(my_optarg, 0);
Chris@82 80 break;
Chris@82 81 case 'r':
Chris@82 82 repeat = atoi(my_optarg);
Chris@82 83 break;
Chris@82 84 case 's':
Chris@82 85 timer_init(tmin, repeat);
Chris@82 86 speed(my_optarg, 0);
Chris@82 87 break;
Chris@82 88 case 'S':
Chris@82 89 timer_init(tmin, repeat);
Chris@82 90 speed(my_optarg, 1);
Chris@82 91 break;
Chris@82 92 case 'd':
Chris@82 93 report_can_do(my_optarg);
Chris@82 94 break;
Chris@82 95 case 'o':
Chris@82 96 useropt(my_optarg);
Chris@82 97 break;
Chris@82 98 case 'v':
Chris@82 99 if (verbose >= 0) { /* verbose < 0 disables output */
Chris@82 100 if (my_optarg)
Chris@82 101 verbose = atoi(my_optarg);
Chris@82 102 else
Chris@82 103 ++verbose;
Chris@82 104 }
Chris@82 105 break;
Chris@82 106 case 'y':
Chris@82 107 verify(my_optarg, rounds, tol);
Chris@82 108 break;
Chris@82 109 case 'a':
Chris@82 110 accuracy(my_optarg, arounds, iarounds);
Chris@82 111 break;
Chris@82 112 case 'i':
Chris@82 113 report_info(my_optarg);
Chris@82 114 break;
Chris@82 115 case 'I':
Chris@82 116 report_info_all();
Chris@82 117 break;
Chris@82 118 case 'h':
Chris@82 119 if (verbose >= 0) my_usage(argv[0], options);
Chris@82 120 break;
Chris@82 121
Chris@82 122 case 300: /* --report-mflops */
Chris@82 123 report = report_mflops;
Chris@82 124 break;
Chris@82 125
Chris@82 126 case 310: /* --report-time */
Chris@82 127 report = report_time;
Chris@82 128 break;
Chris@82 129
Chris@82 130 case 320: /* --report-benchmark */
Chris@82 131 report = report_benchmark;
Chris@82 132 break;
Chris@82 133
Chris@82 134 case 330: /* --report-verbose */
Chris@82 135 report = report_verbose;
Chris@82 136 break;
Chris@82 137
Chris@82 138 case 400: /* --print-time-min */
Chris@82 139 timer_init(tmin, repeat);
Chris@82 140 ovtpvt("%g\n", time_min);
Chris@82 141 break;
Chris@82 142
Chris@82 143 case 401: /* --verify-rounds */
Chris@82 144 rounds = atoi(my_optarg);
Chris@82 145 break;
Chris@82 146
Chris@82 147 case 402: /* --print-precision */
Chris@82 148 if (SINGLE_PRECISION)
Chris@82 149 ovtpvt("single\n");
Chris@82 150 else if (QUAD_PRECISION)
Chris@82 151 ovtpvt("quad\n");
Chris@82 152 else if (LDOUBLE_PRECISION)
Chris@82 153 ovtpvt("long-double\n");
Chris@82 154 else if (DOUBLE_PRECISION)
Chris@82 155 ovtpvt("double\n");
Chris@82 156 else
Chris@82 157 ovtpvt("unknown %d\n", sizeof(bench_real));
Chris@82 158 break;
Chris@82 159
Chris@82 160 case 403: /* --verify-tolerance */
Chris@82 161 tol = strtod(my_optarg, 0);
Chris@82 162 break;
Chris@82 163
Chris@82 164 case 404: /* --random-seed */
Chris@82 165 bench_srand(atoi(my_optarg));
Chris@82 166 break;
Chris@82 167
Chris@82 168 case 405: /* --accuracy-rounds */
Chris@82 169 arounds = atoi(my_optarg);
Chris@82 170 break;
Chris@82 171
Chris@82 172 case 406: /* --impulse-accuracy-rounds */
Chris@82 173 iarounds = atoi(my_optarg);
Chris@82 174 break;
Chris@82 175
Chris@82 176 case '?':
Chris@82 177 /* my_getopt() already printed an error message. */
Chris@82 178 cleanup();
Chris@82 179 return 1;
Chris@82 180
Chris@82 181 default:
Chris@82 182 abort ();
Chris@82 183 }
Chris@82 184 }
Chris@82 185
Chris@82 186 /* assume that any remaining arguments are problems to be
Chris@82 187 benchmarked */
Chris@82 188 while (my_optind < argc) {
Chris@82 189 timer_init(tmin, repeat);
Chris@82 190 speed(argv[my_optind++], 0);
Chris@82 191 }
Chris@82 192
Chris@82 193 cleanup();
Chris@82 194 return 0;
Chris@82 195 }