annotate src/fftw-3.3.5/tests/check.pl @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 7867fa7e1b6b
children
rev   line source
cannam@127 1 #! /usr/bin/perl -w
cannam@127 2
cannam@127 3 $program = "./bench";
cannam@127 4 $default_options = "";
cannam@127 5 $verbose = 0;
cannam@127 6 $paranoid = 0;
cannam@127 7 $exhaustive = 0;
cannam@127 8 $patient = 0;
cannam@127 9 $estimate = 0;
cannam@127 10 $wisdom = 0;
cannam@127 11 $nthreads = 1;
cannam@127 12 $rounds = 0;
cannam@127 13 $maxsize = 60000;
cannam@127 14 $maxcount = 100;
cannam@127 15 $do_0d = 0;
cannam@127 16 $do_1d = 0;
cannam@127 17 $do_2d = 0;
cannam@127 18 $do_random = 0;
cannam@127 19 $keepgoing = 0;
cannam@127 20 $flushcount = 42;
cannam@127 21
cannam@127 22 $mpi = 0;
cannam@127 23 $mpi_transposed_in = 0;
cannam@127 24 $mpi_transposed_out = 0;
cannam@127 25
cannam@127 26 sub make_options {
cannam@127 27 my $options = $default_options;
cannam@127 28 $options = "--verify-rounds=$rounds $options" if $rounds;
cannam@127 29 $options = "--verbose=$verbose $options" if $verbose;
cannam@127 30 $options = "-o paranoid $options" if $paranoid;
cannam@127 31 $options = "-o exhaustive $options" if $exhaustive;
cannam@127 32 $options = "-o patient $options" if $patient;
cannam@127 33 $options = "-o estimate $options" if $estimate;
cannam@127 34 $options = "-o wisdom $options" if $wisdom;
cannam@127 35 $options = "-o nthreads=$nthreads $options" if ($nthreads > 1);
cannam@127 36 $options = "-obflag=30 $options" if $mpi_transposed_in;
cannam@127 37 $options = "-obflag=31 $options" if $mpi_transposed_out;
cannam@127 38 return $options;
cannam@127 39 }
cannam@127 40
cannam@127 41 @list_of_problems = ();
cannam@127 42
cannam@127 43 sub flush_problems {
cannam@127 44 my $options = shift;
cannam@127 45 my $problist = "";
cannam@127 46
cannam@127 47 if ($#list_of_problems >= 0) {
cannam@127 48 for (@list_of_problems) {
cannam@127 49 $problist = "$problist --verify '$_'";
cannam@127 50 }
cannam@127 51 print "Executing \"$program $options $problist\"\n"
cannam@127 52 if $verbose;
cannam@127 53
cannam@127 54 system("$program $options $problist");
cannam@127 55 $exit_value = $? >> 8;
cannam@127 56 $signal_num = $? & 127;
cannam@127 57 $dumped_core = $? & 128;
cannam@127 58
cannam@127 59 if ($signal_num == 1) {
cannam@127 60 print "hangup\n";
cannam@127 61 exit 0;
cannam@127 62 }
cannam@127 63 if ($signal_num == 2) {
cannam@127 64 print "interrupted\n";
cannam@127 65 exit 0;
cannam@127 66 }
cannam@127 67 if ($signal_num == 9) {
cannam@127 68 print "killed\n";
cannam@127 69 exit 0;
cannam@127 70 }
cannam@127 71
cannam@127 72 if ($exit_value != 0 || $dumped_core || $signal_num) {
cannam@127 73 print "FAILED $program: $problist\n";
cannam@127 74 if ($signal_num) { print "received signal $signal_num\n"; }
cannam@127 75 exit 1 unless $keepgoing;
cannam@127 76 }
cannam@127 77 @list_of_problems = ();
cannam@127 78 }
cannam@127 79 }
cannam@127 80
cannam@127 81 sub do_problem {
cannam@127 82 my $problem = shift;
cannam@127 83 my $doablep = shift;
cannam@127 84 my $options = &make_options;
cannam@127 85
cannam@127 86 if ($problem =~ /\// && $problem =~ /r/
cannam@127 87 && ($problem =~ /i.*x/
cannam@127 88 || $problem =~ /v/ || $problem =~ /\*/)) {
cannam@127 89 return; # cannot do real split inplace-multidimensional or vector
cannam@127 90 }
cannam@127 91
cannam@127 92 # in --mpi mode, restrict to problems supported by MPI code
cannam@127 93 if ($mpi) {
cannam@127 94 if ($problem =~ /\//) { return; } # no split
cannam@127 95 if ($problem =~ /\*/) { return; } # no non-contiguous vectors
cannam@127 96 if ($problem =~ /r/ && $problem !~ /x/) { return; } # no 1d r2c
cannam@127 97 if ($problem =~ /k/ && $problem !~ /x/) { return; } # no 1d r2r
cannam@127 98 if ($mpi_transposed_in || $problem =~ /\[/) {
cannam@127 99 if ($problem !~ /x/) { return; } # no 1d transposed_in
cannam@127 100 if ($problem =~ /r/ && $problem !~ /b/) { return; } # only c2r
cannam@127 101 }
cannam@127 102 if ($mpi_transposed_out || $problem =~ /\]/) {
cannam@127 103 if ($problem !~ /x/) { return; } # no 1d transposed_out
cannam@127 104 if ($problem =~ /r/ && $problem =~ /b/) { return; } # only r2c
cannam@127 105 }
cannam@127 106 }
cannam@127 107
cannam@127 108 # size-1 redft00 is not defined/doable
cannam@127 109 return if ($problem =~ /[^0-9]1e00/);
cannam@127 110
cannam@127 111 if ($doablep) {
cannam@127 112 @list_of_problems = ($problem, @list_of_problems);
cannam@127 113 &flush_problems($options) if ($#list_of_problems > $flushcount);
cannam@127 114 } else {
cannam@127 115 print "Executing \"$program $options --can-do $problem\"\n"
cannam@127 116 if $verbose;
cannam@127 117 $result=`$program $options --can-do $problem`;
cannam@127 118 if ($result ne "#f\n" && $result ne "#f\r\n") {
cannam@127 119 print "FAILED $program: $problem is not undoable\n";
cannam@127 120 exit 1 unless $keepgoing;
cannam@127 121 }
cannam@127 122 }
cannam@127 123 }
cannam@127 124
cannam@127 125 # given geometry, try both directions and in place/out of place
cannam@127 126 sub do_geometry {
cannam@127 127 my $geom = shift;
cannam@127 128 my $doablep = shift;
cannam@127 129 do_problem("if$geom", $doablep);
cannam@127 130 do_problem("of$geom", $doablep);
cannam@127 131 do_problem("ib$geom", $doablep);
cannam@127 132 do_problem("ob$geom", $doablep);
cannam@127 133 do_problem("//if$geom", $doablep);
cannam@127 134 do_problem("//of$geom", $doablep);
cannam@127 135 do_problem("//ib$geom", $doablep);
cannam@127 136 do_problem("//ob$geom", $doablep);
cannam@127 137 }
cannam@127 138
cannam@127 139 # given size, try all transform kinds (complex, real, etc.)
cannam@127 140 sub do_size {
cannam@127 141 my $size = shift;
cannam@127 142 my $doablep = shift;
cannam@127 143 do_geometry("c$size", $doablep);
cannam@127 144 do_geometry("r$size", $doablep);
cannam@127 145 }
cannam@127 146
cannam@127 147 sub small_0d {
cannam@127 148 for ($i = 0; $i <= 16; ++$i) {
cannam@127 149 for ($j = 0; $j <= 16; ++$j) {
cannam@127 150 for ($vl = 1; $vl <= 5; ++$vl) {
cannam@127 151 my $ivl = $i * $vl;
cannam@127 152 my $jvl = $j * $vl;
cannam@127 153 do_problem("o1v${i}:${vl}:${jvl}x${j}:${ivl}:${vl}x${vl}:1:1", 1);
cannam@127 154 do_problem("i1v${i}:${vl}:${jvl}x${j}:${ivl}:${vl}x${vl}:1:1", 1);
cannam@127 155 do_problem("ok1v${i}:${vl}:${jvl}x${j}:${ivl}:${vl}x${vl}:1:1", 1);
cannam@127 156 do_problem("ik1v${i}:${vl}:${jvl}x${j}:${ivl}:${vl}x${vl}:1:1", 1);
cannam@127 157 }
cannam@127 158 }
cannam@127 159 }
cannam@127 160 }
cannam@127 161
cannam@127 162 sub small_1d {
cannam@127 163 do_size (0, 0);
cannam@127 164 for ($i = 1; $i <= 100; ++$i) {
cannam@127 165 do_size ($i, 1);
cannam@127 166 }
cannam@127 167 do_size (128, 1);
cannam@127 168 do_size (256, 1);
cannam@127 169 do_size (512, 1);
cannam@127 170 do_size (1024, 1);
cannam@127 171 do_size (2048, 1);
cannam@127 172 do_size (4096, 1);
cannam@127 173 }
cannam@127 174
cannam@127 175 sub small_2d {
cannam@127 176 do_size ("0x0", 0);
cannam@127 177 for ($i = 1; $i <= 100; ++$i) {
cannam@127 178 my $ub = 900/$i;
cannam@127 179 $ub = 100 if $ub > 100;
cannam@127 180 for ($j = 1; $j <= $ub; ++$j) {
cannam@127 181 do_size ("${i}x${j}", 1);
cannam@127 182 }
cannam@127 183 }
cannam@127 184 }
cannam@127 185
cannam@127 186 sub rand_small_factors {
cannam@127 187 my $l = shift;
cannam@127 188 my $n = 1;
cannam@127 189 my $maxfactor = 13;
cannam@127 190 my $f = int(rand($maxfactor) + 1);
cannam@127 191 while ($n * $f < $l) {
cannam@127 192 $n *= $f;
cannam@127 193 $f = int(rand($maxfactor) + 1);
cannam@127 194 };
cannam@127 195 return $n;
cannam@127 196 }
cannam@127 197
cannam@127 198 # way too complicated...
cannam@127 199 sub one_random_test {
cannam@127 200 my $q = int(2 + rand($maxsize));
cannam@127 201 my $rnk = int(1 + rand(4));
cannam@127 202 my $vtype = int(rand(3));
cannam@127 203 my $g = int(2 + exp(log($q) / ($rnk + ($vtype > 0))));
cannam@127 204 my $first = 1;
cannam@127 205 my $sz = "";
cannam@127 206 my $is_r2r = shift;
cannam@127 207 my @r2r_kinds = ("f", "b", "h",
cannam@127 208 "e00", "e01", "e10", "e11", "o00", "o01", "o10", "o11");
cannam@127 209
cannam@127 210 while ($q > 1 && $rnk > 0) {
cannam@127 211 my $r = rand_small_factors(int(rand($g) + 10));
cannam@127 212 if ($r > 1) {
cannam@127 213 $sz = "${sz}x" if (!$first);
cannam@127 214 $first = 0;
cannam@127 215 $sz = "${sz}${r}";
cannam@127 216 if ($is_r2r) {
cannam@127 217 my $k = $r2r_kinds[int(1 + rand($#r2r_kinds))];
cannam@127 218 $sz = "${sz}${k}";
cannam@127 219 }
cannam@127 220 $q = int($q / $r);
cannam@127 221 if ($g > $q) { $g = $q; }
cannam@127 222 --$rnk;
cannam@127 223 }
cannam@127 224 }
cannam@127 225 if ($vtype > 0 && $g > 1) {
cannam@127 226 my $v = int(1 + rand($g));
cannam@127 227 $sz = "${sz}*${v}" if ($vtype == 1);
cannam@127 228 $sz = "${sz}v${v}" if ($vtype == 2);
cannam@127 229 }
cannam@127 230 if ($mpi) {
cannam@127 231 my $stype = int(rand(3));
cannam@127 232 $sz = "]${sz}" if ($stype == 1);
cannam@127 233 $sz = "[${sz}" if ($stype == 2);
cannam@127 234 }
cannam@127 235 $sz = "d$sz" if (int(rand(3)) == 0);
cannam@127 236 if ($is_r2r) {
cannam@127 237 do_problem("ik$sz", 1);
cannam@127 238 do_problem("ok$sz", 1);
cannam@127 239 }
cannam@127 240 else {
cannam@127 241 do_size($sz, 1);
cannam@127 242 }
cannam@127 243 }
cannam@127 244
cannam@127 245 sub random_tests {
cannam@127 246 my $i;
cannam@127 247 for ($i = 0; $i < $maxcount; ++$i) {
cannam@127 248 &one_random_test(0);
cannam@127 249 &one_random_test(1);
cannam@127 250 }
cannam@127 251 }
cannam@127 252
cannam@127 253 sub parse_arguments (@)
cannam@127 254 {
cannam@127 255 local (@arglist) = @_;
cannam@127 256
cannam@127 257 while (@arglist)
cannam@127 258 {
cannam@127 259 if ($arglist[0] eq '-v') { ++$verbose; }
cannam@127 260 elsif ($arglist[0] eq '--verbose') { ++$verbose; }
cannam@127 261 elsif ($arglist[0] eq '-p') { ++$paranoid; }
cannam@127 262 elsif ($arglist[0] eq '--paranoid') { ++$paranoid; }
cannam@127 263 elsif ($arglist[0] eq '--exhaustive') { ++$exhaustive; }
cannam@127 264 elsif ($arglist[0] eq '--patient') { ++$patient; }
cannam@127 265 elsif ($arglist[0] eq '--estimate') { ++$estimate; }
cannam@127 266 elsif ($arglist[0] eq '--wisdom') { ++$wisdom; }
cannam@127 267 elsif ($arglist[0] =~ /^--nthreads=(.+)$/) { $nthreads = $1; }
cannam@127 268 elsif ($arglist[0] eq '-k') { ++$keepgoing; }
cannam@127 269 elsif ($arglist[0] eq '--keep-going') { ++$keepgoing; }
cannam@127 270 elsif ($arglist[0] =~ /^--verify-rounds=(.+)$/) { $rounds = $1; }
cannam@127 271 elsif ($arglist[0] =~ /^--count=(.+)$/) { $maxcount = $1; }
cannam@127 272 elsif ($arglist[0] =~ /^-c=(.+)$/) { $maxcount = $1; }
cannam@127 273 elsif ($arglist[0] =~ /^--flushcount=(.+)$/) { $flushcount = $1; }
cannam@127 274 elsif ($arglist[0] =~ /^--maxsize=(.+)$/) { $maxsize = $1; }
cannam@127 275
cannam@127 276 elsif ($arglist[0] eq '--mpi') { ++$mpi; }
cannam@127 277 elsif ($arglist[0] eq '--mpi-transposed-in') {
cannam@127 278 ++$mpi; ++$mpi_transposed_in; }
cannam@127 279 elsif ($arglist[0] eq '--mpi-transposed-out') {
cannam@127 280 ++$mpi; ++$mpi_transposed_out; }
cannam@127 281
cannam@127 282 elsif ($arglist[0] eq '-0d') { ++$do_0d; }
cannam@127 283 elsif ($arglist[0] eq '-1d') { ++$do_1d; }
cannam@127 284 elsif ($arglist[0] eq '-2d') { ++$do_2d; }
cannam@127 285 elsif ($arglist[0] eq '-r') { ++$do_random; }
cannam@127 286 elsif ($arglist[0] eq '--random') { ++$do_random; }
cannam@127 287 elsif ($arglist[0] eq '-a') {
cannam@127 288 ++$do_0d; ++$do_1d; ++$do_2d; ++$do_random;
cannam@127 289 }
cannam@127 290
cannam@127 291 else { $program=$arglist[0]; }
cannam@127 292 shift (@arglist);
cannam@127 293 }
cannam@127 294 }
cannam@127 295
cannam@127 296 # MAIN PROGRAM:
cannam@127 297
cannam@127 298 &parse_arguments (@ARGV);
cannam@127 299
cannam@127 300 &random_tests if $do_random;
cannam@127 301 &small_0d if $do_0d;
cannam@127 302 &small_1d if $do_1d;
cannam@127 303 &small_2d if $do_2d;
cannam@127 304
cannam@127 305 {
cannam@127 306 my $options = &make_options;
cannam@127 307 &flush_problems($options);
cannam@127 308 }