diff --git a/examples/v0_parameters.ref-23-03-2022 b/examples/v0_parameters.ref-23-03-2022 new file mode 100644 index 000000000..3e2cb9bdc --- /dev/null +++ b/examples/v0_parameters.ref-23-03-2022 @@ -0,0 +1,274 @@ +{ /* 6.3e-5 errors */ +{ /* precision 1 */ + /* 0 */ V0Parameter( 1, 10, 538, 2, 8, 3, 3), // 46 mops, 5.9e-5 errors + /* 1 */ V0Parameter( 1, 10, 514, 2, 8, 5, 2), // 46 mops, 5.4e-5 errors + /* 2 */ V0Parameter( 1, 10, 519, 2, 8, 5, 2), // 46 mops, 6.0e-5 errors + /* 3 */ V0Parameter( 1, 10, 515, 3, 6, 5, 2), // 59 mops, 4.9e-5 errors + /* 4 */ V0Parameter( 1, 10, 523, 3, 6, 5, 2), // 60 mops, 5.4e-5 errors + /* 5 */ V0Parameter( 1, 11, 563, 1, 23, 3, 3), // 71 mops, 5.4e-5 errors + /* 6 */ V0Parameter( 1, 11, 563, 1, 23, 3, 3), // 71 mops, 5.5e-5 errors + /* 7 */ V0Parameter( 1, 11, 563, 1, 23, 3, 3), // 71 mops, 5.8e-5 errors + /* 8 */ V0Parameter( 1, 11, 564, 1, 23, 3, 3), // 71 mops, 5.8e-5 errors + /* 9 */ V0Parameter( 1, 11, 569, 1, 23, 3, 3), // 72 mops, 5.5e-5 errors + /* 10 */ V0Parameter( 1, 11, 555, 1, 23, 5, 2), // 75 mops, 5.7e-5 errors + /* 11 */ V0Parameter( 1, 11, 532, 2, 16, 5, 2), // 101 mops, 6.2e-5 errors + /* 12 */ V0Parameter( 1, 11, 532, 2, 16, 5, 2), // 101 mops, 6.2e-5 errors + /* 13 */ V0Parameter( 1, 11, 532, 2, 16, 5, 2), // 101 mops, 6.3e-5 errors + /* 14 */ V0Parameter( 1, 11, 533, 2, 16, 5, 2), // 101 mops, 4.9e-5 errors + /* 15 */ V0Parameter( 1, 11, 533, 2, 16, 5, 2), // 101 mops, 5.5e-5 errors + /* 16 */ V0Parameter( 1, 11, 535, 2, 16, 5, 2), // 102 mops, 5.3e-5 errors + /* 17 */ V0Parameter( 1, 11, 544, 2, 16, 5, 2), // 103 mops, 5.6e-5 errors + /* 18 */ V0Parameter( 1, 11, 533, 3, 12, 5, 2), // 130 mops, 5.0e-5 errors + /* 19 */ V0Parameter( 1, 11, 533, 3, 12, 5, 2), // 130 mops, 6.0e-5 errors + /* 20 */ V0Parameter( 1, 11, 536, 3, 12, 5, 2), // 131 mops, 5.6e-5 errors + /* 21 */ V0Parameter( 1, 11, 552, 3, 12, 5, 2), // 135 mops, 5.7e-5 errors + /* 22 */ V0Parameter( 1, 11, 536, 4, 9, 5, 2), // 160 mops, 6.1e-5 errors + /* 23 */ V0Parameter( 1, 11, 555, 4, 9, 5, 2), // 166 mops, 5.7e-5 errors + /* 24 */ V0Parameter( 1, 11, 539, 5, 8, 5, 2), // 191 mops, 5.2e-5 errors + /* 25 */ V0Parameter( 1, 11, 593, 5, 8, 5, 2), // 209 mops, 6.2e-5 errors + /* 26 */ V0Parameter( 1, 11, 541, 7, 6, 5, 2), // 251 mops, 6.3e-5 errors + /* 27 */ V0Parameter( 1, 11, 569, 8, 5, 5, 2), // 294 mops, 6.1e-5 errors + /* 28 */ V0Parameter( 1, 11, 549, 11, 4, 5, 2), // 374 mops, 5.5e-5 errors + /* 29 */ V0Parameter( 1, 11, 559, 15, 3, 5, 2), // 503 mops, 5.8e-5 errors + /* 30 */ V0Parameter( 1, 11, 542, 44, 1, 10, 1), // 1358 mops, 6.0e-5 errors + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +{ /* precision 2 */ + /* 0 */ V0Parameter( 1, 10, 557, 2, 8, 5, 2), // 49 mops, 5.2e-5 errors + /* 1 */ V0Parameter( 1, 10, 564, 2, 8, 5, 2), // 50 mops, 5.7e-5 errors + /* 2 */ V0Parameter( 1, 10, 558, 3, 6, 5, 2), // 63 mops, 5.1e-5 errors + /* 3 */ V0Parameter( 1, 10, 569, 3, 6, 5, 2), // 65 mops, 5.7e-5 errors + /* 4 */ V0Parameter( 1, 11, 579, 1, 23, 5, 2), // 78 mops, 6.0e-5 errors + /* 5 */ V0Parameter( 1, 11, 579, 1, 23, 5, 2), // 78 mops, 6.1e-5 errors + /* 6 */ V0Parameter( 1, 11, 580, 1, 23, 5, 2), // 78 mops, 5.3e-5 errors + /* 7 */ V0Parameter( 1, 11, 581, 1, 23, 5, 2), // 78 mops, 5.4e-5 errors + /* 8 */ V0Parameter( 1, 11, 585, 1, 23, 5, 2), // 78 mops, 6.3e-5 errors + /* 9 */ V0Parameter( 1, 11, 639, 1, 23, 5, 2), // 85 mops, 6.3e-5 errors + /* 10 */ V0Parameter( 1, 11, 579, 2, 16, 5, 2), // 109 mops, 6.0e-5 errors + /* 11 */ V0Parameter( 1, 11, 579, 2, 16, 5, 2), // 109 mops, 6.0e-5 errors + /* 12 */ V0Parameter( 1, 11, 579, 2, 16, 5, 2), // 109 mops, 6.1e-5 errors + /* 13 */ V0Parameter( 1, 11, 579, 2, 16, 5, 2), // 109 mops, 6.3e-5 errors + /* 14 */ V0Parameter( 1, 11, 580, 2, 16, 5, 2), // 109 mops, 5.9e-5 errors + /* 15 */ V0Parameter( 1, 11, 583, 2, 16, 5, 2), // 110 mops, 5.7e-5 errors + /* 16 */ V0Parameter( 1, 11, 599, 2, 16, 5, 2), // 113 mops, 6.3e-5 errors + /* 17 */ V0Parameter( 1, 11, 580, 3, 12, 5, 2), // 141 mops, 5.2e-5 errors + /* 18 */ V0Parameter( 1, 11, 581, 3, 12, 5, 2), // 141 mops, 5.3e-5 errors + /* 19 */ V0Parameter( 1, 11, 585, 3, 12, 5, 2), // 142 mops, 5.7e-5 errors + /* 20 */ V0Parameter( 1, 11, 622, 3, 12, 5, 2), // 151 mops, 6.3e-5 errors + /* 21 */ V0Parameter( 1, 11, 585, 4, 9, 5, 2), // 174 mops, 6.3e-5 errors + /* 22 */ V0Parameter( 1, 11, 639, 4, 9, 5, 2), // 190 mops, 6.3e-5 errors + /* 23 */ V0Parameter( 1, 11, 589, 5, 8, 5, 2), // 208 mops, 6.1e-5 errors + /* 24 */ V0Parameter( 1, 11, 591, 6, 7, 5, 2), // 241 mops, 6.3e-5 errors + /* 25 */ V0Parameter( 1, 11, 595, 7, 6, 5, 2), // 275 mops, 5.7e-5 errors + /* 26 */ V0Parameter( 1, 11, 627, 8, 5, 11, 2), // 338 mops, 6.3e-5 errors + /* 27 */ V0Parameter( 1, 11, 611, 11, 4, 5, 2), // 416 mops, 6.2e-5 errors + /* 28 */ V0Parameter( 1, 11, 617, 15, 3, 11, 2), // 569 mops, 5.8e-5 errors + /* 29 */ V0Parameter( 1, 11, 600, 44, 1, 22, 1), // 1531 mops, 5.8e-5 errors + /* 30 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +{ /* precision 3 */ + /* 0 */ V0Parameter( 1, 10, 673, 2, 8, 5, 4), // 59 mops, 5.8e-5 errors + /* 1 */ V0Parameter( 1, 10, 641, 3, 6, 5, 2), // 72 mops, 6.3e-5 errors + /* 2 */ V0Parameter( 1, 10, 649, 3, 6, 7, 3), // 76 mops, 6.2e-5 errors + /* 3 */ V0Parameter( 1, 11, 679, 1, 23, 5, 4), // 90 mops, 6.2e-5 errors + /* 4 */ V0Parameter( 1, 11, 679, 1, 23, 5, 4), // 90 mops, 6.3e-5 errors + /* 5 */ V0Parameter( 1, 11, 680, 1, 23, 5, 4), // 90 mops, 5.0e-5 errors + /* 6 */ V0Parameter( 1, 11, 681, 1, 23, 5, 4), // 90 mops, 4.8e-5 errors + /* 7 */ V0Parameter( 1, 11, 684, 1, 23, 5, 4), // 90 mops, 5.9e-5 errors + /* 8 */ V0Parameter( 1, 11, 710, 1, 23, 5, 4), // 94 mops, 6.0e-5 errors + /* 9 */ V0Parameter( 1, 11, 679, 2, 16, 5, 4), // 127 mops, 6.2e-5 errors + /* 10 */ V0Parameter( 1, 11, 679, 2, 16, 5, 4), // 127 mops, 6.2e-5 errors + /* 11 */ V0Parameter( 1, 11, 679, 2, 16, 5, 4), // 127 mops, 6.3e-5 errors + /* 12 */ V0Parameter( 1, 11, 680, 2, 16, 5, 4), // 127 mops, 4.8e-5 errors + /* 13 */ V0Parameter( 1, 11, 680, 2, 16, 5, 4), // 127 mops, 5.7e-5 errors + /* 14 */ V0Parameter( 1, 11, 682, 2, 16, 5, 4), // 127 mops, 6.0e-5 errors + /* 15 */ V0Parameter( 1, 11, 694, 2, 16, 5, 4), // 130 mops, 5.7e-5 errors + /* 16 */ V0Parameter( 1, 11, 652, 3, 12, 7, 3), // 163 mops, 4.8e-5 errors + /* 17 */ V0Parameter( 1, 11, 652, 3, 12, 7, 3), // 163 mops, 6.0e-5 errors + /* 18 */ V0Parameter( 1, 11, 655, 3, 12, 7, 3), // 164 mops, 6.3e-5 errors + /* 19 */ V0Parameter( 1, 11, 675, 3, 12, 7, 3), // 168 mops, 6.2e-5 errors + /* 20 */ V0Parameter( 1, 11, 656, 4, 9, 7, 3), // 200 mops, 5.4e-5 errors + /* 21 */ V0Parameter( 1, 11, 679, 4, 9, 7, 3), // 206 mops, 6.3e-5 errors + /* 22 */ V0Parameter( 1, 11, 659, 5, 8, 7, 3), // 237 mops, 5.1e-5 errors + /* 23 */ V0Parameter( 1, 11, 660, 6, 7, 7, 3), // 273 mops, 5.7e-5 errors + /* 24 */ V0Parameter( 1, 11, 638, 7, 6, 11, 2), // 309 mops, 6.2e-5 errors + /* 25 */ V0Parameter( 1, 11, 675, 8, 5, 11, 2), // 364 mops, 6.3e-5 errors + /* 26 */ V0Parameter( 1, 11, 647, 11, 4, 11, 2), // 455 mops, 5.7e-5 errors + /* 27 */ V0Parameter( 1, 11, 660, 15, 3, 11, 2), // 608 mops, 5.9e-5 errors + /* 28 */ V0Parameter( 1, 11, 641, 44, 1, 22, 1), // 1635 mops, 6.3e-5 errors + /* 29 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 30 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +{ /* precision 4 */ + /* 0 */ V0Parameter( 1, 10, 691, 3, 6, 7, 3), // 80 mops, 6.2e-5 errors + /* 1 */ V0Parameter( 1, 10, 731, 3, 6, 7, 3), // 85 mops, 6.3e-5 errors + /* 2 */ V0Parameter( 1, 11, 720, 1, 23, 5, 4), // 95 mops, 5.5e-5 errors + /* 3 */ V0Parameter( 1, 11, 720, 1, 23, 5, 4), // 95 mops, 5.6e-5 errors + /* 4 */ V0Parameter( 1, 11, 720, 1, 23, 5, 4), // 95 mops, 6.0e-5 errors + /* 5 */ V0Parameter( 1, 11, 721, 1, 23, 5, 4), // 95 mops, 6.0e-5 errors + /* 6 */ V0Parameter( 1, 11, 726, 1, 23, 5, 4), // 95 mops, 5.4e-5 errors + /* 7 */ V0Parameter( 1, 11, 764, 1, 23, 5, 4), // 100 mops, 6.3e-5 errors + /* 8 */ V0Parameter( 1, 11, 720, 2, 16, 5, 4), // 134 mops, 5.5e-5 errors + /* 9 */ V0Parameter( 1, 11, 720, 2, 16, 5, 4), // 134 mops, 5.5e-5 errors + /* 10 */ V0Parameter( 1, 11, 720, 2, 16, 5, 4), // 134 mops, 5.6e-5 errors + /* 11 */ V0Parameter( 1, 11, 720, 2, 16, 5, 4), // 134 mops, 5.8e-5 errors + /* 12 */ V0Parameter( 1, 11, 721, 2, 16, 5, 4), // 134 mops, 5.3e-5 errors + /* 13 */ V0Parameter( 1, 11, 723, 2, 16, 5, 4), // 135 mops, 6.2e-5 errors + /* 14 */ V0Parameter( 1, 11, 738, 2, 16, 5, 4), // 137 mops, 5.9e-5 errors + /* 15 */ V0Parameter( 1, 11, 692, 3, 12, 7, 3), // 172 mops, 5.6e-5 errors + /* 16 */ V0Parameter( 1, 11, 693, 3, 12, 7, 3), // 173 mops, 5.4e-5 errors + /* 17 */ V0Parameter( 1, 11, 697, 3, 12, 7, 3), // 174 mops, 5.3e-5 errors + /* 18 */ V0Parameter( 1, 11, 724, 3, 12, 7, 3), // 180 mops, 6.1e-5 errors + /* 19 */ V0Parameter( 1, 11, 697, 4, 9, 7, 3), // 212 mops, 6.0e-5 errors + /* 20 */ V0Parameter( 1, 11, 731, 4, 9, 7, 3), // 222 mops, 6.2e-5 errors + /* 21 */ V0Parameter( 1, 11, 700, 5, 8, 7, 3), // 251 mops, 6.3e-5 errors + /* 22 */ V0Parameter( 1, 11, 702, 6, 7, 7, 3), // 290 mops, 6.1e-5 errors + /* 23 */ V0Parameter( 1, 11, 681, 7, 6, 11, 2), // 329 mops, 5.8e-5 errors + /* 24 */ V0Parameter( 1, 11, 686, 9, 5, 11, 2), // 407 mops, 5.6e-5 errors + /* 25 */ V0Parameter( 1, 11, 692, 11, 4, 11, 2), // 486 mops, 6.2e-5 errors + /* 26 */ V0Parameter( 1, 11, 715, 15, 3, 11, 2), // 658 mops, 6.3e-5 errors + /* 27 */ V0Parameter( 1, 11, 690, 44, 1, 22, 1), // 1760 mops, 6.2e-5 errors + /* 28 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 29 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 30 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +{ /* precision 5 */ + /* 0 */ V0Parameter( 1, 11, 774, 1, 23, 5, 4), // 101 mops, 5.6e-5 errors + /* 1 */ V0Parameter( 1, 11, 774, 1, 23, 5, 4), // 101 mops, 5.7e-5 errors + /* 2 */ V0Parameter( 1, 11, 774, 1, 23, 5, 4), // 101 mops, 5.8e-5 errors + /* 3 */ V0Parameter( 1, 11, 774, 1, 23, 5, 4), // 101 mops, 6.2e-5 errors + /* 4 */ V0Parameter( 1, 11, 776, 1, 23, 5, 4), // 101 mops, 6.2e-5 errors + /* 5 */ V0Parameter( 1, 11, 787, 1, 23, 5, 4), // 103 mops, 6.0e-5 errors + /* 6 */ V0Parameter( 1, 11, 774, 2, 16, 5, 4), // 144 mops, 5.6e-5 errors + /* 7 */ V0Parameter( 1, 11, 774, 2, 16, 5, 4), // 144 mops, 5.6e-5 errors + /* 8 */ V0Parameter( 1, 11, 774, 2, 16, 5, 4), // 144 mops, 5.7e-5 errors + /* 9 */ V0Parameter( 1, 11, 774, 2, 16, 5, 4), // 144 mops, 5.7e-5 errors + /* 10 */ V0Parameter( 1, 11, 774, 2, 16, 5, 4), // 144 mops, 6.0e-5 errors + /* 11 */ V0Parameter( 1, 11, 775, 2, 16, 5, 4), // 144 mops, 6.2e-5 errors + /* 12 */ V0Parameter( 1, 11, 781, 2, 16, 5, 4), // 145 mops, 6.0e-5 errors + /* 13 */ V0Parameter( 1, 11, 745, 3, 12, 7, 3), // 185 mops, 5.6e-5 errors + /* 14 */ V0Parameter( 1, 11, 745, 3, 12, 7, 3), // 185 mops, 6.0e-5 errors + /* 15 */ V0Parameter( 1, 11, 747, 3, 12, 7, 3), // 186 mops, 5.8e-5 errors + /* 16 */ V0Parameter( 1, 11, 755, 3, 12, 7, 3), // 187 mops, 6.2e-5 errors + /* 17 */ V0Parameter( 1, 11, 747, 4, 9, 7, 3), // 226 mops, 6.0e-5 errors + /* 18 */ V0Parameter( 1, 11, 756, 4, 9, 7, 3), // 229 mops, 6.3e-5 errors + /* 19 */ V0Parameter( 1, 11, 748, 5, 8, 7, 3), // 268 mops, 6.2e-5 errors + /* 20 */ V0Parameter( 1, 11, 766, 5, 8, 7, 3), // 274 mops, 6.0e-5 errors + /* 21 */ V0Parameter( 1, 11, 773, 6, 7, 7, 3), // 319 mops, 6.0e-5 errors + /* 22 */ V0Parameter( 1, 11, 756, 7, 6, 11, 2), // 365 mops, 6.2e-5 errors + /* 23 */ V0Parameter( 1, 11, 729, 11, 4, 11, 2), // 512 mops, 6.0e-5 errors + /* 24 */ V0Parameter( 1, 11, 745, 14, 3, 11, 2), // 645 mops, 6.1e-5 errors + /* 25 */ V0Parameter( 1, 11, 746, 22, 2, 11, 2), // 972 mops, 6.2e-5 errors + /* 26 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 27 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 28 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 29 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 30 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +{ /* precision 6 */ + /* 0 */ V0Parameter( 1, 12, 833, 1, 23, 5, 4), // 230 mops, 5.9e-5 errors + /* 1 */ V0Parameter( 1, 12, 833, 1, 23, 5, 4), // 230 mops, 6.2e-5 errors + /* 2 */ V0Parameter( 1, 12, 835, 1, 23, 5, 4), // 231 mops, 5.9e-5 errors + /* 3 */ V0Parameter( 1, 12, 843, 1, 23, 5, 4), // 233 mops, 5.9e-5 errors + /* 4 */ V0Parameter( 1, 12, 833, 2, 15, 5, 4), // 328 mops, 5.8e-5 errors + /* 5 */ V0Parameter( 1, 12, 833, 2, 15, 5, 4), // 328 mops, 5.8e-5 errors + /* 6 */ V0Parameter( 1, 12, 833, 2, 15, 5, 4), // 328 mops, 5.8e-5 errors + /* 7 */ V0Parameter( 1, 12, 833, 2, 15, 5, 4), // 328 mops, 5.8e-5 errors + /* 8 */ V0Parameter( 1, 12, 833, 2, 15, 5, 4), // 328 mops, 6.1e-5 errors + /* 9 */ V0Parameter( 1, 12, 834, 2, 15, 5, 4), // 328 mops, 6.2e-5 errors + /* 10 */ V0Parameter( 1, 12, 840, 2, 15, 5, 4), // 331 mops, 6.0e-5 errors + /* 11 */ V0Parameter( 1, 12, 843, 2, 15, 11, 2), // 371 mops, 6.3e-5 errors + /* 12 */ V0Parameter( 1, 12, 804, 3, 12, 7, 3), // 424 mops, 6.2e-5 errors + /* 13 */ V0Parameter( 1, 12, 807, 3, 12, 7, 3), // 425 mops, 5.6e-5 errors + /* 14 */ V0Parameter( 1, 12, 818, 3, 12, 7, 3), // 431 mops, 6.3e-5 errors + /* 15 */ V0Parameter( 1, 12, 806, 4, 9, 7, 3), // 519 mops, 5.6e-5 errors + /* 16 */ V0Parameter( 1, 12, 813, 4, 9, 7, 3), // 524 mops, 5.8e-5 errors + /* 17 */ V0Parameter( 1, 12, 809, 5, 8, 7, 3), // 616 mops, 5.8e-5 errors + /* 18 */ V0Parameter( 1, 12, 839, 5, 8, 7, 3), // 638 mops, 6.2e-5 errors + /* 19 */ V0Parameter( 1, 12, 828, 6, 7, 11, 2), // 753 mops, 6.3e-5 errors + /* 20 */ V0Parameter( 1, 12, 793, 8, 5, 11, 2), // 908 mops, 6.2e-5 errors + /* 21 */ V0Parameter( 1, 12, 791, 11, 4, 11, 2), // 1184 mops, 6.3e-5 errors + /* 22 */ V0Parameter( 1, 12, 805, 14, 3, 11, 2), // 1487 mops, 6.0e-5 errors + /* 23 */ V0Parameter( 1, 12, 821, 22, 2, 11, 2), // 2286 mops, 6.3e-5 errors + /* 24 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 25 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 26 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 27 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 28 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 29 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 30 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +{ /* precision 7 */ + /* 0 */ V0Parameter( 1, 13, 894, 1, 23, 5, 4), // 521 mops, 6.1e-5 errors + /* 1 */ V0Parameter( 1, 13, 901, 1, 23, 5, 4), // 524 mops, 6.3e-5 errors + /* 2 */ V0Parameter( 1, 13, 892, 2, 15, 5, 4), // 742 mops, 6.1e-5 errors + /* 3 */ V0Parameter( 1, 13, 892, 2, 15, 5, 4), // 742 mops, 6.1e-5 errors + /* 4 */ V0Parameter( 1, 13, 892, 2, 15, 5, 4), // 742 mops, 6.1e-5 errors + /* 5 */ V0Parameter( 1, 13, 892, 2, 15, 5, 4), // 742 mops, 6.1e-5 errors + /* 6 */ V0Parameter( 1, 13, 892, 2, 15, 5, 4), // 742 mops, 6.3e-5 errors + /* 7 */ V0Parameter( 1, 13, 893, 2, 15, 5, 4), // 743 mops, 6.3e-5 errors + /* 8 */ V0Parameter( 1, 13, 898, 2, 15, 5, 4), // 747 mops, 6.0e-5 errors + /* 9 */ V0Parameter( 1, 13, 900, 2, 15, 7, 3), // 777 mops, 6.3e-5 errors + /* 10 */ V0Parameter( 1, 13, 864, 3, 12, 7, 3), // 963 mops, 5.8e-5 errors + /* 11 */ V0Parameter( 1, 13, 867, 3, 12, 7, 3), // 966 mops, 5.8e-5 errors + /* 12 */ V0Parameter( 1, 13, 885, 3, 12, 7, 3), // 986 mops, 6.3e-5 errors + /* 13 */ V0Parameter( 1, 13, 865, 4, 9, 7, 3), // 1180 mops, 5.7e-5 errors + /* 14 */ V0Parameter( 1, 13, 871, 4, 9, 7, 3), // 1188 mops, 6.2e-5 errors + /* 15 */ V0Parameter( 1, 13, 870, 5, 8, 7, 3), // 1405 mops, 5.9e-5 errors + /* 16 */ V0Parameter( 1, 13, 871, 6, 7, 7, 3), // 1624 mops, 6.3e-5 errors + /* 17 */ V0Parameter( 1, 13, 873, 7, 6, 7, 3), // 1846 mops, 6.2e-5 errors + /* 18 */ V0Parameter( 1, 13, 854, 8, 5, 11, 2), // 2073 mops, 6.0e-5 errors + /* 19 */ V0Parameter( 1, 13, 883, 10, 4, 11, 2), // 2584 mops, 6.2e-5 errors + /* 20 */ V0Parameter( 1, 13, 872, 14, 3, 11, 2), // 3424 mops, 6.3e-5 errors + /* 21 */ V0Parameter( 1, 13, 860, 43, 1, 11, 2), // 9613 mops, 6.3e-5 errors + /* 22 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 23 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 24 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 25 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 26 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 27 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 28 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 29 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 30 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +{ /* precision 8 */ + /* 0 */ V0Parameter( 1, 14, 952, 2, 15, 5, 4), // 1670 mops, 6.3e-5 errors + /* 1 */ V0Parameter( 1, 14, 952, 2, 15, 5, 4), // 1670 mops, 6.3e-5 errors + /* 2 */ V0Parameter( 1, 14, 952, 2, 15, 5, 4), // 1670 mops, 6.3e-5 errors + /* 3 */ V0Parameter( 1, 14, 952, 2, 15, 5, 4), // 1670 mops, 6.3e-5 errors + /* 4 */ V0Parameter( 1, 14, 953, 2, 15, 5, 4), // 1672 mops, 5.8e-5 errors + /* 5 */ V0Parameter( 1, 14, 954, 2, 15, 5, 4), // 1674 mops, 5.9e-5 errors + /* 6 */ V0Parameter( 1, 14, 958, 2, 15, 5, 4), // 1680 mops, 6.2e-5 errors + /* 7 */ V0Parameter( 1, 14, 958, 2, 15, 7, 3), // 1740 mops, 6.3e-5 errors + /* 8 */ V0Parameter( 1, 14, 924, 3, 12, 7, 3), // 2172 mops, 5.7e-5 errors + /* 9 */ V0Parameter( 1, 14, 928, 3, 12, 7, 3), // 2181 mops, 6.0e-5 errors + /* 10 */ V0Parameter( 1, 14, 965, 3, 12, 7, 3), // 2265 mops, 6.3e-5 errors + /* 11 */ V0Parameter( 1, 14, 924, 4, 9, 7, 3), // 2663 mops, 6.3e-5 errors + /* 12 */ V0Parameter( 1, 14, 932, 4, 9, 7, 3), // 2685 mops, 6.0e-5 errors + /* 13 */ V0Parameter( 1, 14, 932, 5, 8, 7, 3), // 3180 mops, 6.3e-5 errors + /* 14 */ V0Parameter( 1, 14, 935, 6, 7, 7, 3), // 3687 mops, 6.1e-5 errors + /* 15 */ V0Parameter( 1, 14, 912, 7, 6, 11, 2), // 4197 mops, 6.1e-5 errors + /* 16 */ V0Parameter( 1, 14, 918, 8, 5, 11, 2), // 4711 mops, 6.0e-5 errors + /* 17 */ V0Parameter( 1, 14, 945, 10, 4, 11, 2), // 5852 mops, 6.3e-5 errors + /* 18 */ V0Parameter( 1, 14, 910, 21, 2, 11, 2), // 10956 mops, 5.9e-5 errors + /* 19 */ V0Parameter( 1, 14, 916, 43, 1, 22, 1), // 22049 mops, 6.3e-5 errors + /* 20 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 21 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 22 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 23 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 24 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 25 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 26 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 27 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 28 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 29 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 30 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + /* 31 : NO SOLUTION */ V0Parameter(0,0,0,0,0,0,0), + }, +} diff --git a/examples/v0_parameters.rs b/examples/v0_parameters.rs index eb51ddd2b..543ebb542 100644 --- a/examples/v0_parameters.rs +++ b/examples/v0_parameters.rs @@ -1,9 +1,18 @@ use clap::Parser; use rayon_cond::CondIterator; +use concrete_optimizer::global_parameters::DEFAUT_DOMAINS; use concrete_optimizer::optimisation::atomic_pattern as optimize_atomic_pattern; const _4_SIGMA: f64 = 1.0 - 0.999_936_657_516; +const MIN_LOG_POLY_SIZE: u64 = DEFAUT_DOMAINS + .glwe_pbs_constrained + .log2_polynomial_size + .start as u64; +const MAX_LOG_POLY_SIZE: u64 = + DEFAUT_DOMAINS.glwe_pbs_constrained.log2_polynomial_size.end as u64 - 1; +const MIN_LWE_DIM: u64 = DEFAUT_DOMAINS.free_glwe.glwe_dimension.start as u64; +const MAX_LWE_DIM: u64 = DEFAUT_DOMAINS.free_glwe.glwe_dimension.end as u64 - 1; /// Simple program to greet a person #[derive(Parser, Debug)] @@ -12,7 +21,7 @@ struct Args { #[clap(long, default_value_t = 1, help = "1..16")] min_precision: u64, - #[clap(long, default_value_t = 7, help = "1..16")] + #[clap(long, default_value_t = 8, help = "1..16")] max_precision: u64, #[clap(long, default_value_t = _4_SIGMA)] @@ -21,10 +30,10 @@ struct Args { #[clap(long, default_value_t = 128, help = "Only 128 is supported")] security_level: u64, - #[clap(long, default_value_t = 10, help = "8..16")] + #[clap(long, default_value_t = MIN_LOG_POLY_SIZE, help = "8..16")] min_log_poly_size: u64, - #[clap(long, default_value_t = 12, help = "8..16")] + #[clap(long, default_value_t = MAX_LOG_POLY_SIZE, help = "8..16")] max_log_poly_size: u64, #[clap(long, default_value_t = 1, help = "EXPERIMENTAL")] @@ -34,10 +43,10 @@ struct Args { // only usefull for very low precision, some parts are not correcte if used with k > 1 max_glwe_dim: u64, - #[clap(long, default_value_t = 512)] + #[clap(long, default_value_t = MIN_LWE_DIM)] min_intern_lwe_dim: u64, - #[clap(long, default_value_t = 1024)] + #[clap(long, default_value_t = MAX_LWE_DIM)] max_intern_lwe_dim: u64, // 16bits needs around 1300 #[clap(long, default_value_t = 4096)] @@ -132,7 +141,7 @@ mod tests { #[test] fn test_reference_output() { - const REF_FILE: &str = "examples/v0_parameters.ref-02-03-2022"; + const REF_FILE: &str = "examples/v0_parameters.ref-23-03-2022"; const V0_PARAMETERS_EXE: &str = "target/debug/examples/v0_parameters"; const CMP_LINES: &str = "\n"; const EXACT_EQUALITY: i32 = 0; diff --git a/src/global_parameters.rs b/src/global_parameters.rs index 65ba54492..75214aa05 100644 --- a/src/global_parameters.rs +++ b/src/global_parameters.rs @@ -48,13 +48,13 @@ pub struct ParameterDomains { pub const DEFAUT_DOMAINS: ParameterDomains = ParameterDomains { glwe_pbs_constrained: GlweParameters { log2_polynomial_size: Range { start: 8, end: 15 }, - glwe_dimension: Range { start: 1, end: 10 }, + glwe_dimension: Range { start: 1, end: 2 }, }, free_glwe: GlweParameters { log2_polynomial_size: Range { start: 0, end: 1 }, glwe_dimension: Range { - start: 600, - end: 2000, + start: 512, + end: 1025, }, }, pbs_decomposition: PbsDecompositionParameters { @@ -83,6 +83,12 @@ impl IntoIterator for &Range { } } +impl Range { + pub fn as_vec(self) -> Vec { + self.into_iter().collect() + } +} + #[must_use] #[allow(clippy::needless_pass_by_value)] pub fn minimal_unify(_g: unparametrized::AtomicPatternDag) -> parameter_indexed::AtomicPatternDag { diff --git a/src/lib.rs b/src/lib.rs index 251d3c0b5..4301873f1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,10 +33,14 @@ pub extern "C" fn optimise_bootstrap( noise_factor: f64, maximum_acceptable_error_probability: f64, ) -> optimisation::atomic_pattern::Solution { + use global_parameters::DEFAUT_DOMAINS; let sum_size = 1; - let glwe_log_polynomial_sizes: Vec<_> = (10..=12).collect(); - let glwe_dimensions: Vec<_> = (1..=1).collect(); - let internal_lwe_dimensions: Vec<_> = (512..=1024).collect(); + let glwe_log_polynomial_sizes = DEFAUT_DOMAINS + .glwe_pbs_constrained + .log2_polynomial_size + .as_vec(); + let glwe_dimensions = DEFAUT_DOMAINS.glwe_pbs_constrained.glwe_dimension.as_vec(); + let internal_lwe_dimensions = DEFAUT_DOMAINS.free_glwe.glwe_dimension.as_vec(); let result = optimisation::atomic_pattern::optimise_one::( sum_size, precision, diff --git a/src/optimisation/atomic_pattern.rs b/src/optimisation/atomic_pattern.rs index 8e2779770..f0a5b96fe 100644 --- a/src/optimisation/atomic_pattern.rs +++ b/src/optimisation/atomic_pattern.rs @@ -560,7 +560,7 @@ pub fn optimise_one( assert!(glwe_dim < 4); for &glwe_log_poly_size in glwe_log_polynomial_sizes { - assert!(8 < glwe_log_poly_size); + assert!(8 <= glwe_log_poly_size); assert!(glwe_log_poly_size < 18); let glwe_poly_size = 1 << glwe_log_poly_size; if lower_bound_cut(glwe_poly_size) {