From d7ef51bf85cf5c6749365fa3e99c77356f9f7d67 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sat, 12 Sep 2026 12:59:36 -0400 Subject: [PATCH 01/17] Swapping out std bench for criterion --- Cargo.toml | 50 +- benches/bench_check_neon_2to1024.rs | 151 +---- benches/bench_check_scalar_2to1024.rs | 183 ++---- benches/bench_check_sse_2to1024.rs | 151 +---- benches/bench_compare_scalar_neon.rs | 59 +- benches/bench_compare_scalar_sse_avx.rs | 76 ++- benches/bench_compare_scalar_wasm_simd.rs | 60 +- benches/bench_rustfft.rs | 694 +++++++++++++++------- benches/bench_rustfft_neon.rs | 361 +++++++---- benches/bench_rustfft_scalar.rs | 203 ++++--- benches/bench_rustfft_sse.rs | 361 +++++++---- benches/bench_rustfft_wasm_simd.rs | 259 ++++---- benches/compare_3n2m_strategies.rs | 470 +++++++-------- benches/config.rs | 24 + 14 files changed, 1679 insertions(+), 1423 deletions(-) create mode 100644 benches/config.rs diff --git a/Cargo.toml b/Cargo.toml index d0132078..e127b843 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,55 @@ transpose = "0.2" primal-check = "0.3.3" [dev-dependencies] +criterion = { version = "0.5", default-features = false, features = ["cargo_bench_support", "rayon"] } rand = "0.8" -pastey = "0.2" getrandom = {version = "^0.2", features = ["js"]} wasm-bindgen-test = "^0.3.36" + +[[bench]] +name = "bench_check_neon_2to1024" +harness = false + +[[bench]] +name = "bench_check_scalar_2to1024" +harness = false + +[[bench]] +name = "bench_check_sse_2to1024" +harness = false + +[[bench]] +name = "bench_compare_scalar_neon" +harness = false + +[[bench]] +name = "bench_compare_scalar_sse_avx" +harness = false + +[[bench]] +name = "bench_compare_scalar_wasm_simd" +harness = false + +[[bench]] +name = "bench_rustfft" +harness = false + +[[bench]] +name = "bench_rustfft_neon" +harness = false + +[[bench]] +name = "bench_rustfft_scalar" +harness = false + +[[bench]] +name = "bench_rustfft_sse" +harness = false + +[[bench]] +name = "bench_rustfft_wasm_simd" +harness = false + +[[bench]] +name = "compare_3n2m_strategies" +harness = false diff --git a/benches/bench_check_neon_2to1024.rs b/benches/bench_check_neon_2to1024.rs index bf561050..2c1e572f 100644 --- a/benches/bench_check_neon_2to1024.rs +++ b/benches/bench_check_neon_2to1024.rs @@ -1,13 +1,12 @@ -#![feature(test)] extern crate rustfft; -extern crate test; -use pastey::paste; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; // Make fft using planner fn bench_planned_32(b: &mut Bencher, len: usize) { @@ -33,136 +32,20 @@ fn bench_planned_64(b: &mut Bencher, len: usize) { }); } -// Create benches using functions taking one argument -macro_rules! make_benches { - ($name:ident, $fname:ident, { $($len:literal),* }) => { - paste! { - $( - #[bench] - fn [](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [](b: &mut Bencher) { - [](b, $len); - } - )* - } +fn criterion_benchmark(c: &mut Criterion) { + for len in 2..200 { + c.bench_function(&format!("bench_from2to1024_f32_{len}"), move |b| { + bench_planned_32(b, len) + }); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), move |b| { + bench_planned_64(b, len) + }); } } -make_benches!(from2to1024, planned, {2, 3, 4, 5, 6, 7, 8, 9 }); -make_benches!(from2to1024, planned, {10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); -make_benches!(from2to1024, planned, {20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }); -make_benches!(from2to1024, planned, {30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }); -make_benches!(from2to1024, planned, {40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }); -make_benches!(from2to1024, planned, {50, 51, 52, 53, 54, 55, 56, 57, 58, 59 }); -make_benches!(from2to1024, planned, {60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }); -make_benches!(from2to1024, planned, {70, 71, 72, 73, 74, 75, 76, 77, 78, 79 }); -make_benches!(from2to1024, planned, {80, 81, 82, 83, 84, 85, 86, 87, 88, 89 }); -make_benches!(from2to1024, planned, {90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }); - -make_benches!(from2to1024, planned, {100, 101, 102, 103, 104, 105, 106, 107, 108, 109 }); -make_benches!(from2to1024, planned, {110, 111, 112, 113, 114, 115, 116, 117, 118, 119 }); -make_benches!(from2to1024, planned, {120, 121, 122, 123, 124, 125, 126, 127, 128, 129 }); -make_benches!(from2to1024, planned, {130, 131, 132, 133, 134, 135, 136, 137, 138, 139 }); -make_benches!(from2to1024, planned, {140, 141, 142, 143, 144, 145, 146, 147, 148, 149 }); -make_benches!(from2to1024, planned, {150, 151, 152, 153, 154, 155, 156, 157, 158, 159 }); -make_benches!(from2to1024, planned, {160, 161, 162, 163, 164, 165, 166, 167, 168, 169 }); -make_benches!(from2to1024, planned, {170, 171, 172, 173, 174, 175, 176, 177, 178, 179 }); -make_benches!(from2to1024, planned, {180, 181, 182, 183, 184, 185, 186, 187, 188, 189 }); -make_benches!(from2to1024, planned, {190, 191, 192, 193, 194, 195, 196, 197, 198, 199 }); -/* -make_benches!(from2to1024, planned, {200, 201, 202, 203, 204, 205, 206, 207, 208, 209 }); -make_benches!(from2to1024, planned, {210, 211, 212, 213, 214, 215, 216, 217, 218, 219 }); -make_benches!(from2to1024, planned, {220, 221, 222, 223, 224, 225, 226, 227, 228, 229 }); -make_benches!(from2to1024, planned, {230, 231, 232, 233, 234, 235, 236, 237, 238, 239 }); -make_benches!(from2to1024, planned, {240, 241, 242, 243, 244, 245, 246, 247, 248, 249 }); -make_benches!(from2to1024, planned, {250, 251, 252, 253, 254, 255, 256, 257, 258, 259 }); -make_benches!(from2to1024, planned, {260, 261, 262, 263, 264, 265, 266, 267, 268, 269 }); -make_benches!(from2to1024, planned, {270, 271, 272, 273, 274, 275, 276, 277, 278, 279 }); -make_benches!(from2to1024, planned, {280, 281, 282, 283, 284, 285, 286, 287, 288, 289 }); -make_benches!(from2to1024, planned, {290, 291, 292, 293, 294, 295, 296, 297, 298, 299 }); - -make_benches!(from2to1024, planned, {300, 301, 302, 303, 304, 305, 306, 307, 308, 309 }); -make_benches!(from2to1024, planned, {310, 311, 312, 313, 314, 315, 316, 317, 318, 319 }); -make_benches!(from2to1024, planned, {320, 321, 322, 323, 324, 325, 326, 327, 328, 329 }); -make_benches!(from2to1024, planned, {330, 331, 332, 333, 334, 335, 336, 337, 338, 339 }); -make_benches!(from2to1024, planned, {340, 341, 342, 343, 344, 345, 346, 347, 348, 349 }); -make_benches!(from2to1024, planned, {350, 351, 352, 353, 354, 355, 356, 357, 358, 359 }); -make_benches!(from2to1024, planned, {360, 361, 362, 363, 364, 365, 366, 367, 368, 369 }); -make_benches!(from2to1024, planned, {370, 371, 372, 373, 374, 375, 376, 377, 378, 379 }); -make_benches!(from2to1024, planned, {380, 381, 382, 383, 384, 385, 386, 387, 388, 389 }); -make_benches!(from2to1024, planned, {390, 391, 392, 393, 394, 395, 396, 397, 398, 399 }); - -make_benches!(from2to1024, planned, {400, 401, 402, 403, 404, 405, 406, 407, 408, 409 }); -make_benches!(from2to1024, planned, {410, 411, 412, 413, 414, 415, 416, 417, 418, 419 }); -make_benches!(from2to1024, planned, {420, 421, 422, 423, 424, 425, 426, 427, 428, 429 }); -make_benches!(from2to1024, planned, {430, 431, 432, 433, 434, 435, 436, 437, 438, 439 }); -make_benches!(from2to1024, planned, {440, 441, 442, 443, 444, 445, 446, 447, 448, 449 }); -make_benches!(from2to1024, planned, {450, 451, 452, 453, 454, 455, 456, 457, 458, 459 }); -make_benches!(from2to1024, planned, {460, 461, 462, 463, 464, 465, 466, 467, 468, 469 }); -make_benches!(from2to1024, planned, {470, 471, 472, 473, 474, 475, 476, 477, 478, 479 }); -make_benches!(from2to1024, planned, {480, 481, 482, 483, 484, 485, 486, 487, 488, 489 }); -make_benches!(from2to1024, planned, {490, 491, 492, 493, 494, 495, 496, 497, 498, 499 }); - -make_benches!(from2to1024, planned, {500, 501, 502, 503, 504, 505, 506, 507, 508, 509 }); -make_benches!(from2to1024, planned, {510, 511, 512, 513, 514, 515, 516, 517, 518, 519 }); -make_benches!(from2to1024, planned, {520, 521, 522, 523, 524, 525, 526, 527, 528, 529 }); -make_benches!(from2to1024, planned, {530, 531, 532, 533, 534, 535, 536, 537, 538, 539 }); -make_benches!(from2to1024, planned, {540, 541, 542, 543, 544, 545, 546, 547, 548, 549 }); -make_benches!(from2to1024, planned, {550, 551, 552, 553, 554, 555, 556, 557, 558, 559 }); -make_benches!(from2to1024, planned, {560, 561, 562, 563, 564, 565, 566, 567, 568, 569 }); -make_benches!(from2to1024, planned, {570, 571, 572, 573, 574, 575, 576, 577, 578, 579 }); -make_benches!(from2to1024, planned, {580, 581, 582, 583, 584, 585, 586, 587, 588, 589 }); -make_benches!(from2to1024, planned, {590, 591, 592, 593, 594, 595, 596, 597, 598, 599 }); - -make_benches!(from2to1024, planned, {600, 601, 602, 603, 604, 605, 606, 607, 608, 609 }); -make_benches!(from2to1024, planned, {610, 611, 612, 613, 614, 615, 616, 617, 618, 619 }); -make_benches!(from2to1024, planned, {620, 621, 622, 623, 624, 625, 626, 627, 628, 629 }); -make_benches!(from2to1024, planned, {630, 631, 632, 633, 634, 635, 636, 637, 638, 639 }); -make_benches!(from2to1024, planned, {640, 641, 642, 643, 644, 645, 646, 647, 648, 649 }); -make_benches!(from2to1024, planned, {650, 651, 652, 653, 654, 655, 656, 657, 658, 659 }); -make_benches!(from2to1024, planned, {660, 661, 662, 663, 664, 665, 666, 667, 668, 669 }); -make_benches!(from2to1024, planned, {670, 671, 672, 673, 674, 675, 676, 677, 678, 679 }); -make_benches!(from2to1024, planned, {680, 681, 682, 683, 684, 685, 686, 687, 688, 689 }); -make_benches!(from2to1024, planned, {690, 691, 692, 693, 694, 695, 696, 697, 698, 699 }); - -make_benches!(from2to1024, planned, {700, 701, 702, 703, 704, 705, 706, 707, 708, 709 }); -make_benches!(from2to1024, planned, {710, 711, 712, 713, 714, 715, 716, 717, 718, 719 }); -make_benches!(from2to1024, planned, {720, 721, 722, 723, 724, 725, 726, 727, 728, 729 }); -make_benches!(from2to1024, planned, {730, 731, 732, 733, 734, 735, 736, 737, 738, 739 }); -make_benches!(from2to1024, planned, {740, 741, 742, 743, 744, 745, 746, 747, 748, 749 }); -make_benches!(from2to1024, planned, {750, 751, 752, 753, 754, 755, 756, 757, 758, 759 }); -make_benches!(from2to1024, planned, {760, 761, 762, 763, 764, 765, 766, 767, 768, 769 }); -make_benches!(from2to1024, planned, {770, 771, 772, 773, 774, 775, 776, 777, 778, 779 }); -make_benches!(from2to1024, planned, {780, 781, 782, 783, 784, 785, 786, 787, 788, 789 }); -make_benches!(from2to1024, planned, {790, 791, 792, 793, 794, 795, 796, 797, 798, 799 }); - -make_benches!(from2to1024, planned, {800, 801, 802, 803, 804, 805, 806, 807, 808, 809 }); -make_benches!(from2to1024, planned, {810, 811, 812, 813, 814, 815, 816, 817, 818, 819 }); -make_benches!(from2to1024, planned, {820, 821, 822, 823, 824, 825, 826, 827, 828, 829 }); -make_benches!(from2to1024, planned, {830, 831, 832, 833, 834, 835, 836, 837, 838, 839 }); -make_benches!(from2to1024, planned, {840, 841, 842, 843, 844, 845, 846, 847, 848, 849 }); -make_benches!(from2to1024, planned, {850, 851, 852, 853, 854, 855, 856, 857, 858, 859 }); -make_benches!(from2to1024, planned, {860, 861, 862, 863, 864, 865, 866, 867, 868, 869 }); -make_benches!(from2to1024, planned, {870, 871, 872, 873, 874, 875, 876, 877, 878, 879 }); -make_benches!(from2to1024, planned, {880, 881, 882, 883, 884, 885, 886, 887, 888, 889 }); -make_benches!(from2to1024, planned, {890, 891, 892, 893, 894, 895, 896, 897, 898, 899 }); - -make_benches!(from2to1024, planned, {900, 901, 902, 903, 904, 905, 906, 907, 908, 909 }); -make_benches!(from2to1024, planned, {910, 911, 912, 913, 914, 915, 916, 917, 918, 919 }); -make_benches!(from2to1024, planned, {920, 921, 922, 923, 924, 925, 926, 927, 928, 929 }); -make_benches!(from2to1024, planned, {930, 931, 932, 933, 934, 935, 936, 937, 938, 939 }); -make_benches!(from2to1024, planned, {940, 941, 942, 943, 944, 945, 946, 947, 948, 949 }); -make_benches!(from2to1024, planned, {950, 951, 952, 953, 954, 955, 956, 957, 958, 959 }); -make_benches!(from2to1024, planned, {960, 961, 962, 963, 964, 965, 966, 967, 968, 969 }); -make_benches!(from2to1024, planned, {970, 971, 972, 973, 974, 975, 976, 977, 978, 979 }); -make_benches!(from2to1024, planned, {980, 981, 982, 983, 984, 985, 986, 987, 988, 989 }); -make_benches!(from2to1024, planned, {990, 991, 992, 993, 994, 995, 996, 997, 998, 999 }); - -make_benches!(from2to1024, planned, {1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009 }); -make_benches!(from2to1024, planned, {1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019 }); -make_benches!(from2to1024, planned, {1020, 1021, 1022, 1023, 1024 }); -*/ +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_check_scalar_2to1024.rs b/benches/bench_check_scalar_2to1024.rs index d96f5a7d..bffe9002 100644 --- a/benches/bench_check_scalar_2to1024.rs +++ b/benches/bench_check_scalar_2to1024.rs @@ -1,13 +1,12 @@ -#![feature(test)] extern crate rustfft; -extern crate test; -use pastey::paste; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::{Fft, FftDirection}; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; // Make fft using planner fn bench_planned_32(b: &mut Bencher, len: usize) { @@ -33,142 +32,6 @@ fn bench_planned_64(b: &mut Bencher, len: usize) { }); } -// Create benches using functions taking one argument -macro_rules! make_benches { - ($name:ident, $fname:ident, { $($len:literal),* }) => { - paste! { - $( - #[bench] - fn [](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [](b: &mut Bencher) { - [](b, $len); - } - )* - } - } -} - -make_benches!(from2to1024, planned, {2, 3, 4, 5, 6, 7, 8, 9 }); -make_benches!(from2to1024, planned, {10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); -make_benches!(from2to1024, planned, {20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }); -make_benches!(from2to1024, planned, {30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }); -make_benches!(from2to1024, planned, {40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }); -make_benches!(from2to1024, planned, {50, 51, 52, 53, 54, 55, 56, 57, 58, 59 }); -make_benches!(from2to1024, planned, {60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }); -make_benches!(from2to1024, planned, {70, 71, 72, 73, 74, 75, 76, 77, 78, 79 }); -make_benches!(from2to1024, planned, {80, 81, 82, 83, 84, 85, 86, 87, 88, 89 }); -make_benches!(from2to1024, planned, {90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }); - -make_benches!(from2to1024, planned, {100, 101, 102, 103, 104, 105, 106, 107, 108, 109 }); -make_benches!(from2to1024, planned, {110, 111, 112, 113, 114, 115, 116, 117, 118, 119 }); -make_benches!(from2to1024, planned, {120, 121, 122, 123, 124, 125, 126, 127, 128, 129 }); -make_benches!(from2to1024, planned, {130, 131, 132, 133, 134, 135, 136, 137, 138, 139 }); -make_benches!(from2to1024, planned, {140, 141, 142, 143, 144, 145, 146, 147, 148, 149 }); -make_benches!(from2to1024, planned, {150, 151, 152, 153, 154, 155, 156, 157, 158, 159 }); -make_benches!(from2to1024, planned, {160, 161, 162, 163, 164, 165, 166, 167, 168, 169 }); -make_benches!(from2to1024, planned, {170, 171, 172, 173, 174, 175, 176, 177, 178, 179 }); -make_benches!(from2to1024, planned, {180, 181, 182, 183, 184, 185, 186, 187, 188, 189 }); -make_benches!(from2to1024, planned, {190, 191, 192, 193, 194, 195, 196, 197, 198, 199 }); -/* -make_benches!(from2to1024, planned, {200, 201, 202, 203, 204, 205, 206, 207, 208, 209 }); -make_benches!(from2to1024, planned, {210, 211, 212, 213, 214, 215, 216, 217, 218, 219 }); -make_benches!(from2to1024, planned, {220, 221, 222, 223, 224, 225, 226, 227, 228, 229 }); -make_benches!(from2to1024, planned, {230, 231, 232, 233, 234, 235, 236, 237, 238, 239 }); -make_benches!(from2to1024, planned, {240, 241, 242, 243, 244, 245, 246, 247, 248, 249 }); -make_benches!(from2to1024, planned, {250, 251, 252, 253, 254, 255, 256, 257, 258, 259 }); -make_benches!(from2to1024, planned, {260, 261, 262, 263, 264, 265, 266, 267, 268, 269 }); -make_benches!(from2to1024, planned, {270, 271, 272, 273, 274, 275, 276, 277, 278, 279 }); -make_benches!(from2to1024, planned, {280, 281, 282, 283, 284, 285, 286, 287, 288, 289 }); -make_benches!(from2to1024, planned, {290, 291, 292, 293, 294, 295, 296, 297, 298, 299 }); - -make_benches!(from2to1024, planned, {300, 301, 302, 303, 304, 305, 306, 307, 308, 309 }); -make_benches!(from2to1024, planned, {310, 311, 312, 313, 314, 315, 316, 317, 318, 319 }); -make_benches!(from2to1024, planned, {320, 321, 322, 323, 324, 325, 326, 327, 328, 329 }); -make_benches!(from2to1024, planned, {330, 331, 332, 333, 334, 335, 336, 337, 338, 339 }); -make_benches!(from2to1024, planned, {340, 341, 342, 343, 344, 345, 346, 347, 348, 349 }); -make_benches!(from2to1024, planned, {350, 351, 352, 353, 354, 355, 356, 357, 358, 359 }); -make_benches!(from2to1024, planned, {360, 361, 362, 363, 364, 365, 366, 367, 368, 369 }); -make_benches!(from2to1024, planned, {370, 371, 372, 373, 374, 375, 376, 377, 378, 379 }); -make_benches!(from2to1024, planned, {380, 381, 382, 383, 384, 385, 386, 387, 388, 389 }); -make_benches!(from2to1024, planned, {390, 391, 392, 393, 394, 395, 396, 397, 398, 399 }); - -make_benches!(from2to1024, planned, {400, 401, 402, 403, 404, 405, 406, 407, 408, 409 }); -make_benches!(from2to1024, planned, {410, 411, 412, 413, 414, 415, 416, 417, 418, 419 }); -make_benches!(from2to1024, planned, {420, 421, 422, 423, 424, 425, 426, 427, 428, 429 }); -make_benches!(from2to1024, planned, {430, 431, 432, 433, 434, 435, 436, 437, 438, 439 }); -make_benches!(from2to1024, planned, {440, 441, 442, 443, 444, 445, 446, 447, 448, 449 }); -make_benches!(from2to1024, planned, {450, 451, 452, 453, 454, 455, 456, 457, 458, 459 }); -make_benches!(from2to1024, planned, {460, 461, 462, 463, 464, 465, 466, 467, 468, 469 }); -make_benches!(from2to1024, planned, {470, 471, 472, 473, 474, 475, 476, 477, 478, 479 }); -make_benches!(from2to1024, planned, {480, 481, 482, 483, 484, 485, 486, 487, 488, 489 }); -make_benches!(from2to1024, planned, {490, 491, 492, 493, 494, 495, 496, 497, 498, 499 }); - -make_benches!(from2to1024, planned, {500, 501, 502, 503, 504, 505, 506, 507, 508, 509 }); -make_benches!(from2to1024, planned, {510, 511, 512, 513, 514, 515, 516, 517, 518, 519 }); -make_benches!(from2to1024, planned, {520, 521, 522, 523, 524, 525, 526, 527, 528, 529 }); -make_benches!(from2to1024, planned, {530, 531, 532, 533, 534, 535, 536, 537, 538, 539 }); -make_benches!(from2to1024, planned, {540, 541, 542, 543, 544, 545, 546, 547, 548, 549 }); -make_benches!(from2to1024, planned, {550, 551, 552, 553, 554, 555, 556, 557, 558, 559 }); -make_benches!(from2to1024, planned, {560, 561, 562, 563, 564, 565, 566, 567, 568, 569 }); -make_benches!(from2to1024, planned, {570, 571, 572, 573, 574, 575, 576, 577, 578, 579 }); -make_benches!(from2to1024, planned, {580, 581, 582, 583, 584, 585, 586, 587, 588, 589 }); -make_benches!(from2to1024, planned, {590, 591, 592, 593, 594, 595, 596, 597, 598, 599 }); - -make_benches!(from2to1024, planned, {600, 601, 602, 603, 604, 605, 606, 607, 608, 609 }); -make_benches!(from2to1024, planned, {610, 611, 612, 613, 614, 615, 616, 617, 618, 619 }); -make_benches!(from2to1024, planned, {620, 621, 622, 623, 624, 625, 626, 627, 628, 629 }); -make_benches!(from2to1024, planned, {630, 631, 632, 633, 634, 635, 636, 637, 638, 639 }); -make_benches!(from2to1024, planned, {640, 641, 642, 643, 644, 645, 646, 647, 648, 649 }); -make_benches!(from2to1024, planned, {650, 651, 652, 653, 654, 655, 656, 657, 658, 659 }); -make_benches!(from2to1024, planned, {660, 661, 662, 663, 664, 665, 666, 667, 668, 669 }); -make_benches!(from2to1024, planned, {670, 671, 672, 673, 674, 675, 676, 677, 678, 679 }); -make_benches!(from2to1024, planned, {680, 681, 682, 683, 684, 685, 686, 687, 688, 689 }); -make_benches!(from2to1024, planned, {690, 691, 692, 693, 694, 695, 696, 697, 698, 699 }); - -make_benches!(from2to1024, planned, {700, 701, 702, 703, 704, 705, 706, 707, 708, 709 }); -make_benches!(from2to1024, planned, {710, 711, 712, 713, 714, 715, 716, 717, 718, 719 }); -make_benches!(from2to1024, planned, {720, 721, 722, 723, 724, 725, 726, 727, 728, 729 }); -make_benches!(from2to1024, planned, {730, 731, 732, 733, 734, 735, 736, 737, 738, 739 }); -make_benches!(from2to1024, planned, {740, 741, 742, 743, 744, 745, 746, 747, 748, 749 }); -make_benches!(from2to1024, planned, {750, 751, 752, 753, 754, 755, 756, 757, 758, 759 }); -make_benches!(from2to1024, planned, {760, 761, 762, 763, 764, 765, 766, 767, 768, 769 }); -make_benches!(from2to1024, planned, {770, 771, 772, 773, 774, 775, 776, 777, 778, 779 }); -make_benches!(from2to1024, planned, {780, 781, 782, 783, 784, 785, 786, 787, 788, 789 }); -make_benches!(from2to1024, planned, {790, 791, 792, 793, 794, 795, 796, 797, 798, 799 }); - -make_benches!(from2to1024, planned, {800, 801, 802, 803, 804, 805, 806, 807, 808, 809 }); -make_benches!(from2to1024, planned, {810, 811, 812, 813, 814, 815, 816, 817, 818, 819 }); -make_benches!(from2to1024, planned, {820, 821, 822, 823, 824, 825, 826, 827, 828, 829 }); -make_benches!(from2to1024, planned, {830, 831, 832, 833, 834, 835, 836, 837, 838, 839 }); -make_benches!(from2to1024, planned, {840, 841, 842, 843, 844, 845, 846, 847, 848, 849 }); -make_benches!(from2to1024, planned, {850, 851, 852, 853, 854, 855, 856, 857, 858, 859 }); -make_benches!(from2to1024, planned, {860, 861, 862, 863, 864, 865, 866, 867, 868, 869 }); -make_benches!(from2to1024, planned, {870, 871, 872, 873, 874, 875, 876, 877, 878, 879 }); -make_benches!(from2to1024, planned, {880, 881, 882, 883, 884, 885, 886, 887, 888, 889 }); -make_benches!(from2to1024, planned, {890, 891, 892, 893, 894, 895, 896, 897, 898, 899 }); - -make_benches!(from2to1024, planned, {900, 901, 902, 903, 904, 905, 906, 907, 908, 909 }); -make_benches!(from2to1024, planned, {910, 911, 912, 913, 914, 915, 916, 917, 918, 919 }); -make_benches!(from2to1024, planned, {920, 921, 922, 923, 924, 925, 926, 927, 928, 929 }); -make_benches!(from2to1024, planned, {930, 931, 932, 933, 934, 935, 936, 937, 938, 939 }); -make_benches!(from2to1024, planned, {940, 941, 942, 943, 944, 945, 946, 947, 948, 949 }); -make_benches!(from2to1024, planned, {950, 951, 952, 953, 954, 955, 956, 957, 958, 959 }); -make_benches!(from2to1024, planned, {960, 961, 962, 963, 964, 965, 966, 967, 968, 969 }); -make_benches!(from2to1024, planned, {970, 971, 972, 973, 974, 975, 976, 977, 978, 979 }); -make_benches!(from2to1024, planned, {980, 981, 982, 983, 984, 985, 986, 987, 988, 989 }); -make_benches!(from2to1024, planned, {990, 991, 992, 993, 994, 995, 996, 997, 998, 999 }); - -make_benches!(from2to1024, planned, {1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009 }); -make_benches!(from2to1024, planned, {1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019 }); -make_benches!(from2to1024, planned, {1020, 1021, 1022, 1023, 1024 }); -*/ - -make_benches!(power3_planned_scalar, planned, {0000003, 0000009, 0000027, 0000081, 0000243, 0000729, 0002187, 0006561, 0019683, 0059049, 0177147, 0531441, 1594323, 4782969 }); - fn bench_radix3_32(b: &mut Bencher, len: usize) { let fft: Arc> = Arc::new(rustfft::algorithm::Radix3::new(len, FftDirection::Forward)); @@ -190,4 +53,42 @@ fn bench_radix3_64(b: &mut Bencher, len: usize) { }); } -make_benches!(power3_radix3_scalar, radix3, {0000003, 0000009, 0000027, 0000081, 0000243, 0000729, 0002187, 0006561, 0019683, 0059049, 0177147, 0531441, 1594323, 4782969 }); +fn criterion_benchmark(c: &mut Criterion) { + for len in 2..200 { + c.bench_function(&format!("bench_from2to1024_f32_{len}"), move |b| { + bench_planned_32(b, len) + }); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), move |b| { + bench_planned_64(b, len) + }); + } + + const POWERS_OF_THREE: &[usize] = &[ + 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, + ]; + for &len in POWERS_OF_THREE { + c.bench_function( + &format!("bench_power3_planned_scalar_f32_{len:07}"), + move |b| bench_planned_32(b, len), + ); + c.bench_function( + &format!("bench_power3_planned_scalar_f64_{len:07}"), + move |b| bench_planned_64(b, len), + ); + c.bench_function( + &format!("bench_power3_radix3_scalar_f32_{len:07}"), + move |b| bench_radix3_32(b, len), + ); + c.bench_function( + &format!("bench_power3_radix3_scalar_f64_{len:07}"), + move |b| bench_radix3_64(b, len), + ); + } +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_check_sse_2to1024.rs b/benches/bench_check_sse_2to1024.rs index 409db16d..246ac10e 100644 --- a/benches/bench_check_sse_2to1024.rs +++ b/benches/bench_check_sse_2to1024.rs @@ -1,13 +1,12 @@ -#![feature(test)] extern crate rustfft; -extern crate test; -use pastey::paste; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; // Make fft using planner fn bench_planned_32(b: &mut Bencher, len: usize) { @@ -33,136 +32,20 @@ fn bench_planned_64(b: &mut Bencher, len: usize) { }); } -// Create benches using functions taking one argument -macro_rules! make_benches { - ($name:ident, $fname:ident, { $($len:literal),* }) => { - paste! { - $( - #[bench] - fn [](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [](b: &mut Bencher) { - [](b, $len); - } - )* - } +fn criterion_benchmark(c: &mut Criterion) { + for len in 2..200 { + c.bench_function(&format!("bench_from2to1024_f32_{len}"), move |b| { + bench_planned_32(b, len) + }); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), move |b| { + bench_planned_64(b, len) + }); } } -make_benches!(from2to1024, planned, {2, 3, 4, 5, 6, 7, 8, 9 }); -make_benches!(from2to1024, planned, {10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }); -make_benches!(from2to1024, planned, {20, 21, 22, 23, 24, 25, 26, 27, 28, 29 }); -make_benches!(from2to1024, planned, {30, 31, 32, 33, 34, 35, 36, 37, 38, 39 }); -make_benches!(from2to1024, planned, {40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }); -make_benches!(from2to1024, planned, {50, 51, 52, 53, 54, 55, 56, 57, 58, 59 }); -make_benches!(from2to1024, planned, {60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }); -make_benches!(from2to1024, planned, {70, 71, 72, 73, 74, 75, 76, 77, 78, 79 }); -make_benches!(from2to1024, planned, {80, 81, 82, 83, 84, 85, 86, 87, 88, 89 }); -make_benches!(from2to1024, planned, {90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }); - -make_benches!(from2to1024, planned, {100, 101, 102, 103, 104, 105, 106, 107, 108, 109 }); -make_benches!(from2to1024, planned, {110, 111, 112, 113, 114, 115, 116, 117, 118, 119 }); -make_benches!(from2to1024, planned, {120, 121, 122, 123, 124, 125, 126, 127, 128, 129 }); -make_benches!(from2to1024, planned, {130, 131, 132, 133, 134, 135, 136, 137, 138, 139 }); -make_benches!(from2to1024, planned, {140, 141, 142, 143, 144, 145, 146, 147, 148, 149 }); -make_benches!(from2to1024, planned, {150, 151, 152, 153, 154, 155, 156, 157, 158, 159 }); -make_benches!(from2to1024, planned, {160, 161, 162, 163, 164, 165, 166, 167, 168, 169 }); -make_benches!(from2to1024, planned, {170, 171, 172, 173, 174, 175, 176, 177, 178, 179 }); -make_benches!(from2to1024, planned, {180, 181, 182, 183, 184, 185, 186, 187, 188, 189 }); -make_benches!(from2to1024, planned, {190, 191, 192, 193, 194, 195, 196, 197, 198, 199 }); -/* -make_benches!(from2to1024, planned, {200, 201, 202, 203, 204, 205, 206, 207, 208, 209 }); -make_benches!(from2to1024, planned, {210, 211, 212, 213, 214, 215, 216, 217, 218, 219 }); -make_benches!(from2to1024, planned, {220, 221, 222, 223, 224, 225, 226, 227, 228, 229 }); -make_benches!(from2to1024, planned, {230, 231, 232, 233, 234, 235, 236, 237, 238, 239 }); -make_benches!(from2to1024, planned, {240, 241, 242, 243, 244, 245, 246, 247, 248, 249 }); -make_benches!(from2to1024, planned, {250, 251, 252, 253, 254, 255, 256, 257, 258, 259 }); -make_benches!(from2to1024, planned, {260, 261, 262, 263, 264, 265, 266, 267, 268, 269 }); -make_benches!(from2to1024, planned, {270, 271, 272, 273, 274, 275, 276, 277, 278, 279 }); -make_benches!(from2to1024, planned, {280, 281, 282, 283, 284, 285, 286, 287, 288, 289 }); -make_benches!(from2to1024, planned, {290, 291, 292, 293, 294, 295, 296, 297, 298, 299 }); - -make_benches!(from2to1024, planned, {300, 301, 302, 303, 304, 305, 306, 307, 308, 309 }); -make_benches!(from2to1024, planned, {310, 311, 312, 313, 314, 315, 316, 317, 318, 319 }); -make_benches!(from2to1024, planned, {320, 321, 322, 323, 324, 325, 326, 327, 328, 329 }); -make_benches!(from2to1024, planned, {330, 331, 332, 333, 334, 335, 336, 337, 338, 339 }); -make_benches!(from2to1024, planned, {340, 341, 342, 343, 344, 345, 346, 347, 348, 349 }); -make_benches!(from2to1024, planned, {350, 351, 352, 353, 354, 355, 356, 357, 358, 359 }); -make_benches!(from2to1024, planned, {360, 361, 362, 363, 364, 365, 366, 367, 368, 369 }); -make_benches!(from2to1024, planned, {370, 371, 372, 373, 374, 375, 376, 377, 378, 379 }); -make_benches!(from2to1024, planned, {380, 381, 382, 383, 384, 385, 386, 387, 388, 389 }); -make_benches!(from2to1024, planned, {390, 391, 392, 393, 394, 395, 396, 397, 398, 399 }); - -make_benches!(from2to1024, planned, {400, 401, 402, 403, 404, 405, 406, 407, 408, 409 }); -make_benches!(from2to1024, planned, {410, 411, 412, 413, 414, 415, 416, 417, 418, 419 }); -make_benches!(from2to1024, planned, {420, 421, 422, 423, 424, 425, 426, 427, 428, 429 }); -make_benches!(from2to1024, planned, {430, 431, 432, 433, 434, 435, 436, 437, 438, 439 }); -make_benches!(from2to1024, planned, {440, 441, 442, 443, 444, 445, 446, 447, 448, 449 }); -make_benches!(from2to1024, planned, {450, 451, 452, 453, 454, 455, 456, 457, 458, 459 }); -make_benches!(from2to1024, planned, {460, 461, 462, 463, 464, 465, 466, 467, 468, 469 }); -make_benches!(from2to1024, planned, {470, 471, 472, 473, 474, 475, 476, 477, 478, 479 }); -make_benches!(from2to1024, planned, {480, 481, 482, 483, 484, 485, 486, 487, 488, 489 }); -make_benches!(from2to1024, planned, {490, 491, 492, 493, 494, 495, 496, 497, 498, 499 }); - -make_benches!(from2to1024, planned, {500, 501, 502, 503, 504, 505, 506, 507, 508, 509 }); -make_benches!(from2to1024, planned, {510, 511, 512, 513, 514, 515, 516, 517, 518, 519 }); -make_benches!(from2to1024, planned, {520, 521, 522, 523, 524, 525, 526, 527, 528, 529 }); -make_benches!(from2to1024, planned, {530, 531, 532, 533, 534, 535, 536, 537, 538, 539 }); -make_benches!(from2to1024, planned, {540, 541, 542, 543, 544, 545, 546, 547, 548, 549 }); -make_benches!(from2to1024, planned, {550, 551, 552, 553, 554, 555, 556, 557, 558, 559 }); -make_benches!(from2to1024, planned, {560, 561, 562, 563, 564, 565, 566, 567, 568, 569 }); -make_benches!(from2to1024, planned, {570, 571, 572, 573, 574, 575, 576, 577, 578, 579 }); -make_benches!(from2to1024, planned, {580, 581, 582, 583, 584, 585, 586, 587, 588, 589 }); -make_benches!(from2to1024, planned, {590, 591, 592, 593, 594, 595, 596, 597, 598, 599 }); - -make_benches!(from2to1024, planned, {600, 601, 602, 603, 604, 605, 606, 607, 608, 609 }); -make_benches!(from2to1024, planned, {610, 611, 612, 613, 614, 615, 616, 617, 618, 619 }); -make_benches!(from2to1024, planned, {620, 621, 622, 623, 624, 625, 626, 627, 628, 629 }); -make_benches!(from2to1024, planned, {630, 631, 632, 633, 634, 635, 636, 637, 638, 639 }); -make_benches!(from2to1024, planned, {640, 641, 642, 643, 644, 645, 646, 647, 648, 649 }); -make_benches!(from2to1024, planned, {650, 651, 652, 653, 654, 655, 656, 657, 658, 659 }); -make_benches!(from2to1024, planned, {660, 661, 662, 663, 664, 665, 666, 667, 668, 669 }); -make_benches!(from2to1024, planned, {670, 671, 672, 673, 674, 675, 676, 677, 678, 679 }); -make_benches!(from2to1024, planned, {680, 681, 682, 683, 684, 685, 686, 687, 688, 689 }); -make_benches!(from2to1024, planned, {690, 691, 692, 693, 694, 695, 696, 697, 698, 699 }); - -make_benches!(from2to1024, planned, {700, 701, 702, 703, 704, 705, 706, 707, 708, 709 }); -make_benches!(from2to1024, planned, {710, 711, 712, 713, 714, 715, 716, 717, 718, 719 }); -make_benches!(from2to1024, planned, {720, 721, 722, 723, 724, 725, 726, 727, 728, 729 }); -make_benches!(from2to1024, planned, {730, 731, 732, 733, 734, 735, 736, 737, 738, 739 }); -make_benches!(from2to1024, planned, {740, 741, 742, 743, 744, 745, 746, 747, 748, 749 }); -make_benches!(from2to1024, planned, {750, 751, 752, 753, 754, 755, 756, 757, 758, 759 }); -make_benches!(from2to1024, planned, {760, 761, 762, 763, 764, 765, 766, 767, 768, 769 }); -make_benches!(from2to1024, planned, {770, 771, 772, 773, 774, 775, 776, 777, 778, 779 }); -make_benches!(from2to1024, planned, {780, 781, 782, 783, 784, 785, 786, 787, 788, 789 }); -make_benches!(from2to1024, planned, {790, 791, 792, 793, 794, 795, 796, 797, 798, 799 }); - -make_benches!(from2to1024, planned, {800, 801, 802, 803, 804, 805, 806, 807, 808, 809 }); -make_benches!(from2to1024, planned, {810, 811, 812, 813, 814, 815, 816, 817, 818, 819 }); -make_benches!(from2to1024, planned, {820, 821, 822, 823, 824, 825, 826, 827, 828, 829 }); -make_benches!(from2to1024, planned, {830, 831, 832, 833, 834, 835, 836, 837, 838, 839 }); -make_benches!(from2to1024, planned, {840, 841, 842, 843, 844, 845, 846, 847, 848, 849 }); -make_benches!(from2to1024, planned, {850, 851, 852, 853, 854, 855, 856, 857, 858, 859 }); -make_benches!(from2to1024, planned, {860, 861, 862, 863, 864, 865, 866, 867, 868, 869 }); -make_benches!(from2to1024, planned, {870, 871, 872, 873, 874, 875, 876, 877, 878, 879 }); -make_benches!(from2to1024, planned, {880, 881, 882, 883, 884, 885, 886, 887, 888, 889 }); -make_benches!(from2to1024, planned, {890, 891, 892, 893, 894, 895, 896, 897, 898, 899 }); - -make_benches!(from2to1024, planned, {900, 901, 902, 903, 904, 905, 906, 907, 908, 909 }); -make_benches!(from2to1024, planned, {910, 911, 912, 913, 914, 915, 916, 917, 918, 919 }); -make_benches!(from2to1024, planned, {920, 921, 922, 923, 924, 925, 926, 927, 928, 929 }); -make_benches!(from2to1024, planned, {930, 931, 932, 933, 934, 935, 936, 937, 938, 939 }); -make_benches!(from2to1024, planned, {940, 941, 942, 943, 944, 945, 946, 947, 948, 949 }); -make_benches!(from2to1024, planned, {950, 951, 952, 953, 954, 955, 956, 957, 958, 959 }); -make_benches!(from2to1024, planned, {960, 961, 962, 963, 964, 965, 966, 967, 968, 969 }); -make_benches!(from2to1024, planned, {970, 971, 972, 973, 974, 975, 976, 977, 978, 979 }); -make_benches!(from2to1024, planned, {980, 981, 982, 983, 984, 985, 986, 987, 988, 989 }); -make_benches!(from2to1024, planned, {990, 991, 992, 993, 994, 995, 996, 997, 998, 999 }); - -make_benches!(from2to1024, planned, {1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009 }); -make_benches!(from2to1024, planned, {1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019 }); -make_benches!(from2to1024, planned, {1020, 1021, 1022, 1023, 1024 }); -*/ +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_compare_scalar_neon.rs b/benches/bench_compare_scalar_neon.rs index 8fe88350..7f01ab7f 100644 --- a/benches/bench_compare_scalar_neon.rs +++ b/benches/bench_compare_scalar_neon.rs @@ -1,13 +1,12 @@ -#![feature(test)] extern crate rustfft; -extern crate test; -use pastey::paste; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; // Make fft using scalar planner fn bench_scalar_32(b: &mut Bencher, len: usize) { @@ -57,35 +56,31 @@ fn bench_neon_64(b: &mut Bencher, len: usize) { }); } +fn criterion_benchmark(c: &mut Criterion) { + const LENGTHS: &[usize] = &[ + 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, + 262144, 524288, 1048576, 2097152, 4194304, + ]; -// Create benches using functions taking one argument -macro_rules! make_benches { - ($name:ident, { $($len:literal),* }) => { - paste! { - $( - #[bench] - fn [<$name _ $len _f32_scalar>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_scalar>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f32_neon>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_neon>](b: &mut Bencher) { - [](b, $len); - } - )* - } + for &len in LENGTHS { + c.bench_function(&format!("neoncomparison_{len}_f32_scalar"), move |b| { + bench_scalar_32(b, len) + }); + c.bench_function(&format!("neoncomparison_{len}_f64_scalar"), move |b| { + bench_scalar_64(b, len) + }); + c.bench_function(&format!("neoncomparison_{len}_f32_neon"), move |b| { + bench_neon_32(b, len) + }); + c.bench_function(&format!("neoncomparison_{len}_f64_neon"), move |b| { + bench_neon_64(b, len) + }); } } -make_benches!(neoncomparison, {4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072}); -make_benches!(neoncomparison, { 262144, 524288, 1048576, 2097152, 4194304 }); +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_compare_scalar_sse_avx.rs b/benches/bench_compare_scalar_sse_avx.rs index 07f25e3e..938edc5f 100644 --- a/benches/bench_compare_scalar_sse_avx.rs +++ b/benches/bench_compare_scalar_sse_avx.rs @@ -1,13 +1,12 @@ -#![feature(test)] extern crate rustfft; -extern crate test; -use pastey::paste; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; // Make fft using scalar planner fn bench_scalar_32(b: &mut Bencher, len: usize) { @@ -81,44 +80,37 @@ fn bench_avx_64(b: &mut Bencher, len: usize) { }); } -// Create benches using functions taking one argument -macro_rules! make_benches { - ($name:ident, { $($len:literal),* }) => { - paste! { - $( - #[bench] - fn [<$name _ $len _f32_scalar>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_scalar>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f32_sse>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_sse>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f32_avx>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_avx>](b: &mut Bencher) { - [](b, $len); - } - )* - } +fn criterion_benchmark(c: &mut Criterion) { + const LENGTHS: &[usize] = &[ + 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, + 524288, 1048576, 2097152, 4194304, + ]; + + for &len in LENGTHS { + c.bench_function(&format!("comparison_{len}_f32_scalar"), move |b| { + bench_scalar_32(b, len) + }); + c.bench_function(&format!("comparison_{len}_f64_scalar"), move |b| { + bench_scalar_64(b, len) + }); + c.bench_function(&format!("comparison_{len}_f32_sse"), move |b| { + bench_sse_32(b, len) + }); + c.bench_function(&format!("comparison_{len}_f64_sse"), move |b| { + bench_sse_64(b, len) + }); + c.bench_function(&format!("comparison_{len}_f32_avx"), move |b| { + bench_avx_32(b, len) + }); + c.bench_function(&format!("comparison_{len}_f64_avx"), move |b| { + bench_avx_64(b, len) + }); } } -make_benches!(comparison, {16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 }); -make_benches!(comparison, {65536, 131072, 262144, 524288, 1048576, 2097152, 4194304 }); +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_compare_scalar_wasm_simd.rs b/benches/bench_compare_scalar_wasm_simd.rs index 9ef65177..901360bd 100644 --- a/benches/bench_compare_scalar_wasm_simd.rs +++ b/benches/bench_compare_scalar_wasm_simd.rs @@ -1,4 +1,3 @@ -#![feature(test)] /// Unfortunately, `cargo bench` does not permit running these benchmarks out-of-the-box /// on a WebAssembly virtual machine. /// @@ -30,14 +29,14 @@ /// For more information, refer to [Criterion's user guide](https://github.com/bheisler/criterion.rs/blob/dc2b06cd31f7aa34cff6a83a00598e0523186dad/book/src/user_guide/wasi.md) /// which should be mostly applicable to our use case. extern crate rustfft; -extern crate test; -use pastey::paste; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; // Make fft using scalar planner fn bench_scalar_32(b: &mut Bencher, len: usize) { @@ -87,34 +86,33 @@ fn bench_wasmsimd_64(b: &mut Bencher, len: usize) { }); } -// Create benches using functions taking one argument -macro_rules! make_benches { - ($name:ident, { $($len:literal),* }) => { - paste! { - $( - #[bench] - fn [<$name _ $len _f32_scalar>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_scalar>](b: &mut Bencher) { - [](b, $len); - } +fn criterion_benchmark(c: &mut Criterion) { + const LENGTHS: &[usize] = &[ + 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, + 262144, 524288, 1048576, 2097152, 4194304, + ]; - #[bench] - fn [<$name _ $len _f32_wasmsimd>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_wasmsimd>](b: &mut Bencher) { - [](b, $len); - } - )* - } + for &len in LENGTHS { + c.bench_function(&format!("wasmsimdcomparison_{len}_f32_scalar"), move |b| { + bench_scalar_32(b, len) + }); + c.bench_function(&format!("wasmsimdcomparison_{len}_f64_scalar"), move |b| { + bench_scalar_64(b, len) + }); + c.bench_function( + &format!("wasmsimdcomparison_{len}_f32_wasmsimd"), + move |b| bench_wasmsimd_32(b, len), + ); + c.bench_function( + &format!("wasmsimdcomparison_{len}_f64_wasmsimd"), + move |b| bench_wasmsimd_64(b, len), + ); } } -make_benches!(wasmsimdcomparison, {4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072}); -make_benches!(wasmsimdcomparison, { 262144, 524288, 1048576, 2097152, 4194304 }); +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_rustfft.rs b/benches/bench_rustfft.rs index af9c6422..5775bcfc 100644 --- a/benches/bench_rustfft.rs +++ b/benches/bench_rustfft.rs @@ -1,11 +1,11 @@ #![allow(bare_trait_objects)] #![allow(non_snake_case)] -#![feature(test)] -extern crate test; extern crate rustfft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; use rustfft::{Direction, FftNum, Fft, FftDirection, Length}; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; @@ -55,72 +55,72 @@ fn bench_planned_f32(b: &mut Bencher, len: usize) { // Powers of 4 -#[bench] fn planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } -#[bench] fn planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } -#[bench] fn planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } -#[bench] fn planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } -#[bench] fn planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } -#[bench] fn planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } -#[bench] fn planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } -#[bench] fn planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } -#[bench] fn planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } -#[bench] fn planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } -#[bench] fn planned32_p2_16777216(b: &mut Bencher) { bench_planned_f32(b, 16777216); } +fn planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } +fn planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } +fn planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } +fn planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } +fn planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } +fn planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } +fn planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } +fn planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } +fn planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } +fn planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } +fn planned32_p2_16777216(b: &mut Bencher) { bench_planned_f32(b, 16777216); } // Powers of 5 -#[bench] fn planned32_p5_00125(b: &mut Bencher) { bench_planned_f32(b, 125); } -#[bench] fn planned32_p5_00625(b: &mut Bencher) { bench_planned_f32(b, 625); } -#[bench] fn planned32_p5_03125(b: &mut Bencher) { bench_planned_f32(b, 3125); } -#[bench] fn planned32_p5_15625(b: &mut Bencher) { bench_planned_f32(b, 15625); } +fn planned32_p5_00125(b: &mut Bencher) { bench_planned_f32(b, 125); } +fn planned32_p5_00625(b: &mut Bencher) { bench_planned_f32(b, 625); } +fn planned32_p5_03125(b: &mut Bencher) { bench_planned_f32(b, 3125); } +fn planned32_p5_15625(b: &mut Bencher) { bench_planned_f32(b, 15625); } // Powers of 7 -#[bench] fn planned32_p7_00343(b: &mut Bencher) { bench_planned_f32(b, 343); } -#[bench] fn planned32_p7_02401(b: &mut Bencher) { bench_planned_f32(b, 2401); } -#[bench] fn planned32_p7_16807(b: &mut Bencher) { bench_planned_f32(b, 16807); } +fn planned32_p7_00343(b: &mut Bencher) { bench_planned_f32(b, 343); } +fn planned32_p7_02401(b: &mut Bencher) { bench_planned_f32(b, 2401); } +fn planned32_p7_16807(b: &mut Bencher) { bench_planned_f32(b, 16807); } // Prime lengths // Prime lengths -#[bench] fn planned32_prime_0005(b: &mut Bencher) { bench_planned_f32(b, 5); } -#[bench] fn planned32_prime_0017(b: &mut Bencher) { bench_planned_f32(b, 17); } -#[bench] fn planned32_prime_0149(b: &mut Bencher) { bench_planned_f32(b, 149); } -#[bench] fn planned32_prime_0151(b: &mut Bencher) { bench_planned_f32(b, 151); } -#[bench] fn planned32_prime_0251(b: &mut Bencher) { bench_planned_f32(b, 251); } -#[bench] fn planned32_prime_0257(b: &mut Bencher) { bench_planned_f32(b, 257); } -#[bench] fn planned32_prime_1009(b: &mut Bencher) { bench_planned_f32(b, 1009); } -#[bench] fn planned32_prime_1201(b: &mut Bencher) { bench_planned_f32(b, 1201); } -#[bench] fn planned32_prime_2017(b: &mut Bencher) { bench_planned_f32(b, 2017); } -#[bench] fn planned32_prime_2879(b: &mut Bencher) { bench_planned_f32(b, 2879); } -#[bench] fn planned32_prime_32767(b: &mut Bencher) { bench_planned_f32(b, 32767); } -#[bench] fn planned32_prime_65521(b: &mut Bencher) { bench_planned_f32(b, 65521); } -#[bench] fn planned32_prime_65537(b: &mut Bencher) { bench_planned_f32(b, 65537); } -#[bench] fn planned32_prime_746483(b: &mut Bencher) { bench_planned_f32(b,746483); } -#[bench] fn planned32_prime_746497(b: &mut Bencher) { bench_planned_f32(b,746497); } +fn planned32_prime_0005(b: &mut Bencher) { bench_planned_f32(b, 5); } +fn planned32_prime_0017(b: &mut Bencher) { bench_planned_f32(b, 17); } +fn planned32_prime_0149(b: &mut Bencher) { bench_planned_f32(b, 149); } +fn planned32_prime_0151(b: &mut Bencher) { bench_planned_f32(b, 151); } +fn planned32_prime_0251(b: &mut Bencher) { bench_planned_f32(b, 251); } +fn planned32_prime_0257(b: &mut Bencher) { bench_planned_f32(b, 257); } +fn planned32_prime_1009(b: &mut Bencher) { bench_planned_f32(b, 1009); } +fn planned32_prime_1201(b: &mut Bencher) { bench_planned_f32(b, 1201); } +fn planned32_prime_2017(b: &mut Bencher) { bench_planned_f32(b, 2017); } +fn planned32_prime_2879(b: &mut Bencher) { bench_planned_f32(b, 2879); } +fn planned32_prime_32767(b: &mut Bencher) { bench_planned_f32(b, 32767); } +fn planned32_prime_65521(b: &mut Bencher) { bench_planned_f32(b, 65521); } +fn planned32_prime_65537(b: &mut Bencher) { bench_planned_f32(b, 65537); } +fn planned32_prime_746483(b: &mut Bencher) { bench_planned_f32(b,746483); } +fn planned32_prime_746497(b: &mut Bencher) { bench_planned_f32(b,746497); } //primes raised to a power -#[bench] fn planned32_primepower_044521(b: &mut Bencher) { bench_planned_f32(b, 44521); } // 211^2 -#[bench] fn planned32_primepower_160801(b: &mut Bencher) { bench_planned_f32(b, 160801); } // 401^2 +fn planned32_primepower_044521(b: &mut Bencher) { bench_planned_f32(b, 44521); } // 211^2 +fn planned32_primepower_160801(b: &mut Bencher) { bench_planned_f32(b, 160801); } // 401^2 // numbers times powers of two -#[bench] fn planned32_composite_024576(b: &mut Bencher) { bench_planned_f32(b, 24576); } -#[bench] fn planned32_composite_020736(b: &mut Bencher) { bench_planned_f32(b, 20736); } +fn planned32_composite_024576(b: &mut Bencher) { bench_planned_f32(b, 24576); } +fn planned32_composite_020736(b: &mut Bencher) { bench_planned_f32(b, 20736); } // power of 2 times large prime -#[bench] fn planned32_composite_032192(b: &mut Bencher) { bench_planned_f32(b, 32192); } -#[bench] fn planned32_composite_024028(b: &mut Bencher) { bench_planned_f32(b, 24028); } +fn planned32_composite_032192(b: &mut Bencher) { bench_planned_f32(b, 32192); } +fn planned32_composite_024028(b: &mut Bencher) { bench_planned_f32(b, 24028); } // small mixed composites times a large prime -#[bench] fn planned32_composite_005472(b: &mut Bencher) { bench_planned_f32(b, 5472); } -#[bench] fn planned32_composite_030270(b: &mut Bencher) { bench_planned_f32(b, 30270); } +fn planned32_composite_005472(b: &mut Bencher) { bench_planned_f32(b, 5472); } +fn planned32_composite_030270(b: &mut Bencher) { bench_planned_f32(b, 30270); } // small mixed composites -#[bench] fn planned32_composite_000018(b: &mut Bencher) { bench_planned_f32(b, 00018); } -#[bench] fn planned32_composite_000360(b: &mut Bencher) { bench_planned_f32(b, 00360); } -#[bench] fn planned32_composite_001200(b: &mut Bencher) { bench_planned_f32(b, 01200); } -#[bench] fn planned32_composite_044100(b: &mut Bencher) { bench_planned_f32(b, 44100); } -#[bench] fn planned32_composite_048000(b: &mut Bencher) { bench_planned_f32(b, 48000); } -#[bench] fn planned32_composite_046656(b: &mut Bencher) { bench_planned_f32(b, 46656); } -#[bench] fn planned32_composite_100000(b: &mut Bencher) { bench_planned_f32(b, 100000); } +fn planned32_composite_000018(b: &mut Bencher) { bench_planned_f32(b, 00018); } +fn planned32_composite_000360(b: &mut Bencher) { bench_planned_f32(b, 00360); } +fn planned32_composite_001200(b: &mut Bencher) { bench_planned_f32(b, 01200); } +fn planned32_composite_044100(b: &mut Bencher) { bench_planned_f32(b, 44100); } +fn planned32_composite_048000(b: &mut Bencher) { bench_planned_f32(b, 48000); } +fn planned32_composite_046656(b: &mut Bencher) { bench_planned_f32(b, 46656); } +fn planned32_composite_100000(b: &mut Bencher) { bench_planned_f32(b, 100000); } /// Times just the FFT execution (not allocation and pre-calculation) /// for a given length @@ -134,66 +134,66 @@ fn bench_planned_f64(b: &mut Bencher, len: usize) { b.iter(|| { fft.process_with_scratch(&mut buffer, &mut scratch); }); } -#[bench] fn planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } -#[bench] fn planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } -#[bench] fn planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } -#[bench] fn planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } -#[bench] fn planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } -#[bench] fn planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } -#[bench] fn planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } -#[bench] fn planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } -#[bench] fn planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } -#[bench] fn planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } +fn planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } +fn planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } +fn planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } +fn planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } +fn planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } +fn planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } +fn planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } +fn planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } +fn planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } +fn planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } //#[bench] fn planned64_p2_16777216(b: &mut Bencher) { bench_planned_f64(b, 16777216); } // Powers of 5 -#[bench] fn planned64_p5_00125(b: &mut Bencher) { bench_planned_f64(b, 125); } -#[bench] fn planned64_p5_00625(b: &mut Bencher) { bench_planned_f64(b, 625); } -#[bench] fn planned64_p5_03125(b: &mut Bencher) { bench_planned_f64(b, 3125); } -#[bench] fn planned64_p5_15625(b: &mut Bencher) { bench_planned_f64(b, 15625); } +fn planned64_p5_00125(b: &mut Bencher) { bench_planned_f64(b, 125); } +fn planned64_p5_00625(b: &mut Bencher) { bench_planned_f64(b, 625); } +fn planned64_p5_03125(b: &mut Bencher) { bench_planned_f64(b, 3125); } +fn planned64_p5_15625(b: &mut Bencher) { bench_planned_f64(b, 15625); } -#[bench] fn planned64_p7_00343(b: &mut Bencher) { bench_planned_f64(b, 343); } -#[bench] fn planned64_p7_02401(b: &mut Bencher) { bench_planned_f64(b, 2401); } -#[bench] fn planned64_p7_16807(b: &mut Bencher) { bench_planned_f64(b, 16807); } +fn planned64_p7_00343(b: &mut Bencher) { bench_planned_f64(b, 343); } +fn planned64_p7_02401(b: &mut Bencher) { bench_planned_f64(b, 2401); } +fn planned64_p7_16807(b: &mut Bencher) { bench_planned_f64(b, 16807); } // Prime lengths -#[bench] fn planned64_prime_0005(b: &mut Bencher) { bench_planned_f64(b, 5); } -#[bench] fn planned64_prime_0017(b: &mut Bencher) { bench_planned_f64(b, 17); } -#[bench] fn planned64_prime_0149(b: &mut Bencher) { bench_planned_f64(b, 149); } -#[bench] fn planned64_prime_0151(b: &mut Bencher) { bench_planned_f64(b, 151); } -#[bench] fn planned64_prime_0251(b: &mut Bencher) { bench_planned_f64(b, 251); } -#[bench] fn planned64_prime_0257(b: &mut Bencher) { bench_planned_f64(b, 257); } -#[bench] fn planned64_prime_1009(b: &mut Bencher) { bench_planned_f64(b, 1009); } -#[bench] fn planned64_prime_2017(b: &mut Bencher) { bench_planned_f64(b, 2017); } -#[bench] fn planned64_prime_2879(b: &mut Bencher) { bench_planned_f64(b, 2879); } -#[bench] fn planned64_prime_32767(b: &mut Bencher) { bench_planned_f64(b, 32767); } -#[bench] fn planned64_prime_65521(b: &mut Bencher) { bench_planned_f64(b, 65521); } -#[bench] fn planned64_prime_65537(b: &mut Bencher) { bench_planned_f64(b, 65537); } -#[bench] fn planned64_prime_746483(b: &mut Bencher) { bench_planned_f64(b,746483); } -#[bench] fn planned64_prime_746497(b: &mut Bencher) { bench_planned_f64(b,746497); } +fn planned64_prime_0005(b: &mut Bencher) { bench_planned_f64(b, 5); } +fn planned64_prime_0017(b: &mut Bencher) { bench_planned_f64(b, 17); } +fn planned64_prime_0149(b: &mut Bencher) { bench_planned_f64(b, 149); } +fn planned64_prime_0151(b: &mut Bencher) { bench_planned_f64(b, 151); } +fn planned64_prime_0251(b: &mut Bencher) { bench_planned_f64(b, 251); } +fn planned64_prime_0257(b: &mut Bencher) { bench_planned_f64(b, 257); } +fn planned64_prime_1009(b: &mut Bencher) { bench_planned_f64(b, 1009); } +fn planned64_prime_2017(b: &mut Bencher) { bench_planned_f64(b, 2017); } +fn planned64_prime_2879(b: &mut Bencher) { bench_planned_f64(b, 2879); } +fn planned64_prime_32767(b: &mut Bencher) { bench_planned_f64(b, 32767); } +fn planned64_prime_65521(b: &mut Bencher) { bench_planned_f64(b, 65521); } +fn planned64_prime_65537(b: &mut Bencher) { bench_planned_f64(b, 65537); } +fn planned64_prime_746483(b: &mut Bencher) { bench_planned_f64(b,746483); } +fn planned64_prime_746497(b: &mut Bencher) { bench_planned_f64(b,746497); } //primes raised to a power -#[bench] fn planned64_primepower_044521(b: &mut Bencher) { bench_planned_f64(b, 44521); } // 211^2 -#[bench] fn planned64_primepower_160801(b: &mut Bencher) { bench_planned_f64(b, 160801); } // 401^2 +fn planned64_primepower_044521(b: &mut Bencher) { bench_planned_f64(b, 44521); } // 211^2 +fn planned64_primepower_160801(b: &mut Bencher) { bench_planned_f64(b, 160801); } // 401^2 // numbers times powers of two -#[bench] fn planned64_composite_024576(b: &mut Bencher) { bench_planned_f64(b, 24576); } -#[bench] fn planned64_composite_020736(b: &mut Bencher) { bench_planned_f64(b, 20736); } +fn planned64_composite_024576(b: &mut Bencher) { bench_planned_f64(b, 24576); } +fn planned64_composite_020736(b: &mut Bencher) { bench_planned_f64(b, 20736); } // power of 2 times large prime -#[bench] fn planned64_composite_032192(b: &mut Bencher) { bench_planned_f64(b, 32192); } -#[bench] fn planned64_composite_024028(b: &mut Bencher) { bench_planned_f64(b, 24028); } +fn planned64_composite_032192(b: &mut Bencher) { bench_planned_f64(b, 32192); } +fn planned64_composite_024028(b: &mut Bencher) { bench_planned_f64(b, 24028); } // small mixed composites times a large prime -#[bench] fn planned64_composite_030270(b: &mut Bencher) { bench_planned_f64(b, 30270); } +fn planned64_composite_030270(b: &mut Bencher) { bench_planned_f64(b, 30270); } // small mixed composites -#[bench] fn planned64_composite_000018(b: &mut Bencher) { bench_planned_f64(b, 00018); } -#[bench] fn planned64_composite_000360(b: &mut Bencher) { bench_planned_f64(b, 00360); } -#[bench] fn planned64_composite_044100(b: &mut Bencher) { bench_planned_f64(b, 44100); } -#[bench] fn planned64_composite_048000(b: &mut Bencher) { bench_planned_f64(b, 48000); } -#[bench] fn planned64_composite_046656(b: &mut Bencher) { bench_planned_f64(b, 46656); } -#[bench] fn planned64_composite_100000(b: &mut Bencher) { bench_planned_f64(b, 100000); } +fn planned64_composite_000018(b: &mut Bencher) { bench_planned_f64(b, 00018); } +fn planned64_composite_000360(b: &mut Bencher) { bench_planned_f64(b, 00360); } +fn planned64_composite_044100(b: &mut Bencher) { bench_planned_f64(b, 44100); } +fn planned64_composite_048000(b: &mut Bencher) { bench_planned_f64(b, 48000); } +fn planned64_composite_046656(b: &mut Bencher) { bench_planned_f64(b, 46656); } +fn planned64_composite_100000(b: &mut Bencher) { bench_planned_f64(b, 100000); } /// Times just the FFT execution (not allocation and pre-calculation) /// for a given length, specific to the Good-Thomas algorithm @@ -210,14 +210,14 @@ fn bench_good_thomas(b: &mut Bencher, width: usize, height: usize) { b.iter(|| {fft.process_with_scratch(&mut buffer, &mut scratch);} ); } -#[bench] fn good_thomas_0002_3(b: &mut Bencher) { bench_good_thomas(b, 2, 3); } -#[bench] fn good_thomas_0003_4(b: &mut Bencher) { bench_good_thomas(b, 3, 4); } -#[bench] fn good_thomas_0004_5(b: &mut Bencher) { bench_good_thomas(b, 4, 5); } -#[bench] fn good_thomas_0007_32(b: &mut Bencher) { bench_good_thomas(b, 7, 32); } -#[bench] fn good_thomas_0032_27(b: &mut Bencher) { bench_good_thomas(b, 32, 27); } -#[bench] fn good_thomas_0256_243(b: &mut Bencher) { bench_good_thomas(b, 256, 243); } -#[bench] fn good_thomas_2048_3(b: &mut Bencher) { bench_good_thomas(b, 2048, 3); } -#[bench] fn good_thomas_2048_2187(b: &mut Bencher) { bench_good_thomas(b, 2048, 2187); } +fn good_thomas_0002_3(b: &mut Bencher) { bench_good_thomas(b, 2, 3); } +fn good_thomas_0003_4(b: &mut Bencher) { bench_good_thomas(b, 3, 4); } +fn good_thomas_0004_5(b: &mut Bencher) { bench_good_thomas(b, 4, 5); } +fn good_thomas_0007_32(b: &mut Bencher) { bench_good_thomas(b, 7, 32); } +fn good_thomas_0032_27(b: &mut Bencher) { bench_good_thomas(b, 32, 27); } +fn good_thomas_0256_243(b: &mut Bencher) { bench_good_thomas(b, 256, 243); } +fn good_thomas_2048_3(b: &mut Bencher) { bench_good_thomas(b, 2048, 3); } +fn good_thomas_2048_2187(b: &mut Bencher) { bench_good_thomas(b, 2048, 2187); } /// Times just the FFT setup (not execution) /// for a given length, specific to the Good-Thomas algorithm @@ -229,18 +229,18 @@ fn bench_good_thomas_setup(b: &mut Bencher, width: usize, height: usize) { b.iter(|| { let fft : Arc> = Arc::new(GoodThomasAlgorithm::new(Arc::clone(&width_fft), Arc::clone(&height_fft))); - test::black_box(fft); + std::hint::black_box(fft); }); } -#[bench] fn good_thomas_setup_0002_3(b: &mut Bencher) { bench_good_thomas_setup(b, 2, 3); } -#[bench] fn good_thomas_setup_0003_4(b: &mut Bencher) { bench_good_thomas_setup(b, 3, 4); } -#[bench] fn good_thomas_setup_0004_5(b: &mut Bencher) { bench_good_thomas_setup(b, 4, 5); } -#[bench] fn good_thomas_setup_0007_32(b: &mut Bencher) { bench_good_thomas_setup(b, 7, 32); } -#[bench] fn good_thomas_setup_0032_27(b: &mut Bencher) { bench_good_thomas_setup(b, 32, 27); } -#[bench] fn good_thomas_setup_0256_243(b: &mut Bencher) { bench_good_thomas_setup(b, 256, 243); } -#[bench] fn good_thomas_setup_2048_3(b: &mut Bencher) { bench_good_thomas_setup(b, 2048, 3); } -#[bench] fn good_thomas_setup_2048_2187(b: &mut Bencher) { bench_good_thomas_setup(b, 2048, 2187); } +fn good_thomas_setup_0002_3(b: &mut Bencher) { bench_good_thomas_setup(b, 2, 3); } +fn good_thomas_setup_0003_4(b: &mut Bencher) { bench_good_thomas_setup(b, 3, 4); } +fn good_thomas_setup_0004_5(b: &mut Bencher) { bench_good_thomas_setup(b, 4, 5); } +fn good_thomas_setup_0007_32(b: &mut Bencher) { bench_good_thomas_setup(b, 7, 32); } +fn good_thomas_setup_0032_27(b: &mut Bencher) { bench_good_thomas_setup(b, 32, 27); } +fn good_thomas_setup_0256_243(b: &mut Bencher) { bench_good_thomas_setup(b, 256, 243); } +fn good_thomas_setup_2048_3(b: &mut Bencher) { bench_good_thomas_setup(b, 2048, 3); } +fn good_thomas_setup_2048_2187(b: &mut Bencher) { bench_good_thomas_setup(b, 2048, 2187); } /// Times just the FFT setup (not execution) /// for a given length, specific to MixedRadix @@ -252,18 +252,18 @@ fn bench_mixed_radix_setup(b: &mut Bencher, width: usize, height: usize) { b.iter(|| { let fft : Arc> = Arc::new(MixedRadix::new(Arc::clone(&width_fft), Arc::clone(&height_fft))); - test::black_box(fft); + std::hint::black_box(fft); }); } -#[bench] fn setup_mixed_radix_0002_3(b: &mut Bencher) { bench_mixed_radix_setup(b, 2, 3); } -#[bench] fn setup_mixed_radix_0003_4(b: &mut Bencher) { bench_mixed_radix_setup(b, 3, 4); } -#[bench] fn setup_mixed_radix_0004_5(b: &mut Bencher) { bench_mixed_radix_setup(b, 4, 5); } -#[bench] fn setup_mixed_radix_0007_32(b: &mut Bencher) { bench_mixed_radix_setup(b, 7, 32); } -#[bench] fn setup_mixed_radix_0032_27(b: &mut Bencher) { bench_mixed_radix_setup(b, 32, 27); } -#[bench] fn setup_mixed_radix_0256_243(b: &mut Bencher) { bench_mixed_radix_setup(b, 256, 243); } -#[bench] fn setup_mixed_radix_2048_3(b: &mut Bencher) { bench_mixed_radix_setup(b, 2048, 3); } -#[bench] fn setup_mixed_radix_2048_2187(b: &mut Bencher) { bench_mixed_radix_setup(b, 2048, 2187); } +fn setup_mixed_radix_0002_3(b: &mut Bencher) { bench_mixed_radix_setup(b, 2, 3); } +fn setup_mixed_radix_0003_4(b: &mut Bencher) { bench_mixed_radix_setup(b, 3, 4); } +fn setup_mixed_radix_0004_5(b: &mut Bencher) { bench_mixed_radix_setup(b, 4, 5); } +fn setup_mixed_radix_0007_32(b: &mut Bencher) { bench_mixed_radix_setup(b, 7, 32); } +fn setup_mixed_radix_0032_27(b: &mut Bencher) { bench_mixed_radix_setup(b, 32, 27); } +fn setup_mixed_radix_0256_243(b: &mut Bencher) { bench_mixed_radix_setup(b, 256, 243); } +fn setup_mixed_radix_2048_3(b: &mut Bencher) { bench_mixed_radix_setup(b, 2048, 3); } +fn setup_mixed_radix_2048_2187(b: &mut Bencher) { bench_mixed_radix_setup(b, 2048, 2187); } /// Times just the FFT setup (not execution) /// for a given length, specific to MixedRadix @@ -275,15 +275,15 @@ fn bench_small_mixed_radix_setup(b: &mut Bencher, width: usize, height: usize) { b.iter(|| { let fft : Arc> = Arc::new(MixedRadixSmall::new(Arc::clone(&width_fft), Arc::clone(&height_fft))); - test::black_box(fft); + std::hint::black_box(fft); }); } -#[bench] fn setup_small_mixed_radix_0002_3(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 2, 3); } -#[bench] fn setup_small_mixed_radix_0003_4(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 3, 4); } -#[bench] fn setup_small_mixed_radix_0004_5(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 4, 5); } -#[bench] fn setup_small_mixed_radix_0007_32(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 7, 32); } -#[bench] fn setup_small_mixed_radix_0032_27(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 32, 27); } +fn setup_small_mixed_radix_0002_3(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 2, 3); } +fn setup_small_mixed_radix_0003_4(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 3, 4); } +fn setup_small_mixed_radix_0004_5(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 4, 5); } +fn setup_small_mixed_radix_0007_32(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 7, 32); } +fn setup_small_mixed_radix_0032_27(b: &mut Bencher) { bench_small_mixed_radix_setup(b, 32, 27); } /// Times just the FFT execution (not allocation and pre-calculation) @@ -301,14 +301,14 @@ fn bench_mixed_radix(b: &mut Bencher, width: usize, height: usize) { b.iter(|| {fft.process_with_scratch(&mut buffer, &mut scratch);} ); } -#[bench] fn mixed_radix_0002_3(b: &mut Bencher) { bench_mixed_radix(b, 2, 3); } -#[bench] fn mixed_radix_0003_4(b: &mut Bencher) { bench_mixed_radix(b, 3, 4); } -#[bench] fn mixed_radix_0004_5(b: &mut Bencher) { bench_mixed_radix(b, 4, 5); } -#[bench] fn mixed_radix_0007_32(b: &mut Bencher) { bench_mixed_radix(b, 7, 32); } -#[bench] fn mixed_radix_0032_27(b: &mut Bencher) { bench_mixed_radix(b, 32, 27); } -#[bench] fn mixed_radix_0256_243(b: &mut Bencher) { bench_mixed_radix(b, 256, 243); } -#[bench] fn mixed_radix_2048_3(b: &mut Bencher) { bench_mixed_radix(b, 2048, 3); } -#[bench] fn mixed_radix_2048_2187(b: &mut Bencher) { bench_mixed_radix(b, 2048, 2187); } +fn mixed_radix_0002_3(b: &mut Bencher) { bench_mixed_radix(b, 2, 3); } +fn mixed_radix_0003_4(b: &mut Bencher) { bench_mixed_radix(b, 3, 4); } +fn mixed_radix_0004_5(b: &mut Bencher) { bench_mixed_radix(b, 4, 5); } +fn mixed_radix_0007_32(b: &mut Bencher) { bench_mixed_radix(b, 7, 32); } +fn mixed_radix_0032_27(b: &mut Bencher) { bench_mixed_radix(b, 32, 27); } +fn mixed_radix_0256_243(b: &mut Bencher) { bench_mixed_radix(b, 256, 243); } +fn mixed_radix_2048_3(b: &mut Bencher) { bench_mixed_radix(b, 2048, 3); } +fn mixed_radix_2048_2187(b: &mut Bencher) { bench_mixed_radix(b, 2048, 2187); } fn plan_butterfly_fft(len: usize) -> Arc> { match len { @@ -339,10 +339,10 @@ fn bench_mixed_radix_small(b: &mut Bencher, width: usize, height: usize) { b.iter(|| {fft.process_with_scratch(&mut signal, &mut spectrum);} ); } -#[bench] fn mixed_radix_small_0002_3(b: &mut Bencher) { bench_mixed_radix_small(b, 2, 3); } -#[bench] fn mixed_radix_small_0003_4(b: &mut Bencher) { bench_mixed_radix_small(b, 3, 4); } -#[bench] fn mixed_radix_small_0004_5(b: &mut Bencher) { bench_mixed_radix_small(b, 4, 5); } -#[bench] fn mixed_radix_small_0007_32(b: &mut Bencher) { bench_mixed_radix_small(b, 7, 32); } +fn mixed_radix_small_0002_3(b: &mut Bencher) { bench_mixed_radix_small(b, 2, 3); } +fn mixed_radix_small_0003_4(b: &mut Bencher) { bench_mixed_radix_small(b, 3, 4); } +fn mixed_radix_small_0004_5(b: &mut Bencher) { bench_mixed_radix_small(b, 4, 5); } +fn mixed_radix_small_0007_32(b: &mut Bencher) { bench_mixed_radix_small(b, 7, 32); } /// Times just the FFT execution (not allocation and pre-calculation) /// for a given length, specific to the Mixed-Radix Double Butterfly algorithm @@ -358,10 +358,10 @@ fn bench_good_thomas_small(b: &mut Bencher, width: usize, height: usize) { b.iter(|| {fft.process_with_scratch(&mut signal, &mut spectrum);} ); } -#[bench] fn good_thomas_small_0002_3(b: &mut Bencher) { bench_good_thomas_small(b, 2, 3); } -#[bench] fn good_thomas_small_0003_4(b: &mut Bencher) { bench_good_thomas_small(b, 3, 4); } -#[bench] fn good_thomas_small_0004_5(b: &mut Bencher) { bench_good_thomas_small(b, 4, 5); } -#[bench] fn good_thomas_small_0007_32(b: &mut Bencher) { bench_good_thomas_small(b, 7, 32); } +fn good_thomas_small_0002_3(b: &mut Bencher) { bench_good_thomas_small(b, 2, 3); } +fn good_thomas_small_0003_4(b: &mut Bencher) { bench_good_thomas_small(b, 3, 4); } +fn good_thomas_small_0004_5(b: &mut Bencher) { bench_good_thomas_small(b, 4, 5); } +fn good_thomas_small_0007_32(b: &mut Bencher) { bench_good_thomas_small(b, 7, 32); } /// Times just the FFT execution (not allocation and pre-calculation) @@ -378,20 +378,20 @@ fn bench_raders_scalar(b: &mut Bencher, len: usize) { b.iter(|| {fft.process_with_scratch(&mut buffer, &mut scratch);} ); } -#[bench] fn raders_fft_scalar_prime_0005(b: &mut Bencher) { bench_raders_scalar(b, 5); } -#[bench] fn raders_fft_scalar_prime_0017(b: &mut Bencher) { bench_raders_scalar(b, 17); } -#[bench] fn raders_fft_scalar_prime_0149(b: &mut Bencher) { bench_raders_scalar(b, 149); } -#[bench] fn raders_fft_scalar_prime_0151(b: &mut Bencher) { bench_raders_scalar(b, 151); } -#[bench] fn raders_fft_scalar_prime_0251(b: &mut Bencher) { bench_raders_scalar(b, 251); } -#[bench] fn raders_fft_scalar_prime_0257(b: &mut Bencher) { bench_raders_scalar(b, 257); } -#[bench] fn raders_fft_scalar_prime_1009(b: &mut Bencher) { bench_raders_scalar(b, 1009); } -#[bench] fn raders_fft_scalar_prime_2017(b: &mut Bencher) { bench_raders_scalar(b, 2017); } -#[bench] fn raders_fft_scalar_prime_12289(b: &mut Bencher) { bench_raders_scalar(b, 12289); } -#[bench] fn raders_fft_scalar_prime_18433(b: &mut Bencher) { bench_raders_scalar(b, 18433); } -#[bench] fn raders_fft_scalar_prime_65521(b: &mut Bencher) { bench_raders_scalar(b, 65521); } -#[bench] fn raders_fft_scalar_prime_65537(b: &mut Bencher) { bench_raders_scalar(b, 65537); } -#[bench] fn raders_fft_scalar_prime_746483(b: &mut Bencher) { bench_raders_scalar(b,746483); } -#[bench] fn raders_fft_scalar_prime_746497(b: &mut Bencher) { bench_raders_scalar(b,746497); } +fn raders_fft_scalar_prime_0005(b: &mut Bencher) { bench_raders_scalar(b, 5); } +fn raders_fft_scalar_prime_0017(b: &mut Bencher) { bench_raders_scalar(b, 17); } +fn raders_fft_scalar_prime_0149(b: &mut Bencher) { bench_raders_scalar(b, 149); } +fn raders_fft_scalar_prime_0151(b: &mut Bencher) { bench_raders_scalar(b, 151); } +fn raders_fft_scalar_prime_0251(b: &mut Bencher) { bench_raders_scalar(b, 251); } +fn raders_fft_scalar_prime_0257(b: &mut Bencher) { bench_raders_scalar(b, 257); } +fn raders_fft_scalar_prime_1009(b: &mut Bencher) { bench_raders_scalar(b, 1009); } +fn raders_fft_scalar_prime_2017(b: &mut Bencher) { bench_raders_scalar(b, 2017); } +fn raders_fft_scalar_prime_12289(b: &mut Bencher) { bench_raders_scalar(b, 12289); } +fn raders_fft_scalar_prime_18433(b: &mut Bencher) { bench_raders_scalar(b, 18433); } +fn raders_fft_scalar_prime_65521(b: &mut Bencher) { bench_raders_scalar(b, 65521); } +fn raders_fft_scalar_prime_65537(b: &mut Bencher) { bench_raders_scalar(b, 65537); } +fn raders_fft_scalar_prime_746483(b: &mut Bencher) { bench_raders_scalar(b,746483); } +fn raders_fft_scalar_prime_746497(b: &mut Bencher) { bench_raders_scalar(b,746497); } /// Times just the FFT execution (not allocation and pre-calculation) @@ -406,19 +406,19 @@ fn bench_bluesteins_scalar_prime(b: &mut Bencher, len: usize) { b.iter(|| { fft.process_with_scratch(&mut buffer, &mut scratch);} ); } -#[bench] fn bench_bluesteins_scalar_prime_0005(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 5); } -#[bench] fn bench_bluesteins_scalar_prime_0017(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 17); } -#[bench] fn bench_bluesteins_scalar_prime_0149(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 149); } -#[bench] fn bench_bluesteins_scalar_prime_0151(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 151); } -#[bench] fn bench_bluesteins_scalar_prime_0251(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 251); } -#[bench] fn bench_bluesteins_scalar_prime_0257(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 257); } -#[bench] fn bench_bluesteins_scalar_prime_1009(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 1009); } -#[bench] fn bench_bluesteins_scalar_prime_2017(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 2017); } -#[bench] fn bench_bluesteins_scalar_prime_32767(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 32767); } -#[bench] fn bench_bluesteins_scalar_prime_65521(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 65521); } -#[bench] fn bench_bluesteins_scalar_prime_65537(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 65537); } -#[bench] fn bench_bluesteins_scalar_prime_746483(b: &mut Bencher) { bench_bluesteins_scalar_prime(b,746483); } -#[bench] fn bench_bluesteins_scalar_prime_746497(b: &mut Bencher) { bench_bluesteins_scalar_prime(b,746497); } +fn bench_bluesteins_scalar_prime_0005(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 5); } +fn bench_bluesteins_scalar_prime_0017(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 17); } +fn bench_bluesteins_scalar_prime_0149(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 149); } +fn bench_bluesteins_scalar_prime_0151(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 151); } +fn bench_bluesteins_scalar_prime_0251(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 251); } +fn bench_bluesteins_scalar_prime_0257(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 257); } +fn bench_bluesteins_scalar_prime_1009(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 1009); } +fn bench_bluesteins_scalar_prime_2017(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 2017); } +fn bench_bluesteins_scalar_prime_32767(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 32767); } +fn bench_bluesteins_scalar_prime_65521(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 65521); } +fn bench_bluesteins_scalar_prime_65537(b: &mut Bencher) { bench_bluesteins_scalar_prime(b, 65537); } +fn bench_bluesteins_scalar_prime_746483(b: &mut Bencher) { bench_bluesteins_scalar_prime(b,746483); } +fn bench_bluesteins_scalar_prime_746497(b: &mut Bencher) { bench_bluesteins_scalar_prime(b,746497); } /// Times just the FFT execution (not allocation and pre-calculation) @@ -433,11 +433,11 @@ fn bench_radix4(b: &mut Bencher, len: usize) { b.iter(|| {fft.process_outofplace_with_scratch(&mut signal, &mut spectrum, &mut []);} ); } -#[bench] fn radix4_______64(b: &mut Bencher) { bench_radix4(b, 64); } -#[bench] fn radix4______256(b: &mut Bencher) { bench_radix4(b, 256); } -#[bench] fn radix4_____1024(b: &mut Bencher) { bench_radix4(b, 1024); } -#[bench] fn radix4____65536(b: &mut Bencher) { bench_radix4(b, 65536); } -#[bench] fn radix4__1048576(b: &mut Bencher) { bench_radix4(b, 1048576); } +fn radix4_______64(b: &mut Bencher) { bench_radix4(b, 64); } +fn radix4______256(b: &mut Bencher) { bench_radix4(b, 256); } +fn radix4_____1024(b: &mut Bencher) { bench_radix4(b, 1024); } +fn radix4____65536(b: &mut Bencher) { bench_radix4(b, 65536); } +fn radix4__1048576(b: &mut Bencher) { bench_radix4(b, 1048576); } //#[bench] fn radix4_16777216(b: &mut Bencher) { bench_radix4(b, 16777216); } fn get_mixed_radix_power2(len: usize) -> Arc> { @@ -467,12 +467,12 @@ fn bench_mixed_radix_power2(b: &mut Bencher, len: usize) { }); } -#[bench] fn mixed_radix_power2__00000256(b: &mut Bencher) { bench_mixed_radix_power2(b, 256); } -#[bench] fn mixed_radix_power2__00001024(b: &mut Bencher) { bench_mixed_radix_power2(b, 1024); } -#[bench] fn mixed_radix_power2__00004096(b: &mut Bencher) { bench_mixed_radix_power2(b, 4096); } -#[bench] fn mixed_radix_power2__00065536(b: &mut Bencher) { bench_mixed_radix_power2(b, 65536); } -#[bench] fn mixed_radix_power2__01048576(b: &mut Bencher) { bench_mixed_radix_power2(b, 1048576); } -#[bench] fn mixed_radix_power2__16777216(b: &mut Bencher) { bench_mixed_radix_power2(b, 16777216); } +fn mixed_radix_power2__00000256(b: &mut Bencher) { bench_mixed_radix_power2(b, 256); } +fn mixed_radix_power2__00001024(b: &mut Bencher) { bench_mixed_radix_power2(b, 1024); } +fn mixed_radix_power2__00004096(b: &mut Bencher) { bench_mixed_radix_power2(b, 4096); } +fn mixed_radix_power2__00065536(b: &mut Bencher) { bench_mixed_radix_power2(b, 65536); } +fn mixed_radix_power2__01048576(b: &mut Bencher) { bench_mixed_radix_power2(b, 1048576); } +fn mixed_radix_power2__16777216(b: &mut Bencher) { bench_mixed_radix_power2(b, 16777216); } fn get_mixed_radix_inline_power2(len: usize) -> Arc> { @@ -502,12 +502,12 @@ fn bench_mixed_radix_inline_power2(b: &mut Bencher, len: usize) { }); } -#[bench] fn mixed_radix_power2_inline__00000256(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 256); } -#[bench] fn mixed_radix_power2_inline__00001024(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 1024); } -#[bench] fn mixed_radix_power2_inline__00004096(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 4096); } -#[bench] fn mixed_radix_power2_inline__00065536(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 65536); } -#[bench] fn mixed_radix_power2_inline__01048576(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 1048576); } -#[bench] fn mixed_radix_power2_inline__16777216(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 16777216); } +fn mixed_radix_power2_inline__00000256(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 256); } +fn mixed_radix_power2_inline__00001024(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 1024); } +fn mixed_radix_power2_inline__00004096(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 4096); } +fn mixed_radix_power2_inline__00065536(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 65536); } +fn mixed_radix_power2_inline__01048576(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 1048576); } +fn mixed_radix_power2_inline__16777216(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 16777216); } /// Times just the FFT execution (not allocation and pre-calculation) /// for a given length @@ -521,28 +521,28 @@ fn bench_butterfly32(b: &mut Bencher, len: usize) { b.iter(|| { fft.process_with_scratch(&mut buffer, &mut scratch); }); } -#[bench] fn butterfly32_02(b: &mut Bencher) { bench_butterfly32(b, 2); } -#[bench] fn butterfly32_03(b: &mut Bencher) { bench_butterfly32(b, 3); } -#[bench] fn butterfly32_04(b: &mut Bencher) { bench_butterfly32(b, 4); } -#[bench] fn butterfly32_05(b: &mut Bencher) { bench_butterfly32(b, 5); } -#[bench] fn butterfly32_06(b: &mut Bencher) { bench_butterfly32(b, 6); } -#[bench] fn butterfly32_07(b: &mut Bencher) { bench_butterfly32(b, 7); } -#[bench] fn butterfly32_08(b: &mut Bencher) { bench_butterfly32(b, 8); } -#[bench] fn butterfly32_09(b: &mut Bencher) { bench_butterfly32(b, 9); } -#[bench] fn butterfly32_11(b: &mut Bencher) { bench_butterfly32(b, 11); } -#[bench] fn butterfly32_12(b: &mut Bencher) { bench_butterfly32(b, 12); } -#[bench] fn butterfly32_16(b: &mut Bencher) { bench_butterfly32(b, 16); } -#[bench] fn butterfly32_24(b: &mut Bencher) { bench_butterfly32(b, 24); } -#[bench] fn butterfly32_27(b: &mut Bencher) { bench_butterfly32(b, 27); } -#[bench] fn butterfly32_32(b: &mut Bencher) { bench_butterfly32(b, 32); } -#[bench] fn butterfly32_36(b: &mut Bencher) { bench_butterfly32(b, 36); } -#[bench] fn butterfly32_48(b: &mut Bencher) { bench_butterfly32(b, 48); } -#[bench] fn butterfly32_54(b: &mut Bencher) { bench_butterfly32(b, 54); } -#[bench] fn butterfly32_64(b: &mut Bencher) { bench_butterfly32(b, 64); } -#[bench] fn butterfly32_72(b: &mut Bencher) { bench_butterfly32(b, 72); } -#[bench] fn butterfly32_128(b: &mut Bencher) { bench_butterfly32(b, 128); } -#[bench] fn butterfly32_256(b: &mut Bencher) { bench_butterfly32(b, 256); } -#[bench] fn butterfly32_512(b: &mut Bencher) { bench_butterfly32(b, 512); } +fn butterfly32_02(b: &mut Bencher) { bench_butterfly32(b, 2); } +fn butterfly32_03(b: &mut Bencher) { bench_butterfly32(b, 3); } +fn butterfly32_04(b: &mut Bencher) { bench_butterfly32(b, 4); } +fn butterfly32_05(b: &mut Bencher) { bench_butterfly32(b, 5); } +fn butterfly32_06(b: &mut Bencher) { bench_butterfly32(b, 6); } +fn butterfly32_07(b: &mut Bencher) { bench_butterfly32(b, 7); } +fn butterfly32_08(b: &mut Bencher) { bench_butterfly32(b, 8); } +fn butterfly32_09(b: &mut Bencher) { bench_butterfly32(b, 9); } +fn butterfly32_11(b: &mut Bencher) { bench_butterfly32(b, 11); } +fn butterfly32_12(b: &mut Bencher) { bench_butterfly32(b, 12); } +fn butterfly32_16(b: &mut Bencher) { bench_butterfly32(b, 16); } +fn butterfly32_24(b: &mut Bencher) { bench_butterfly32(b, 24); } +fn butterfly32_27(b: &mut Bencher) { bench_butterfly32(b, 27); } +fn butterfly32_32(b: &mut Bencher) { bench_butterfly32(b, 32); } +fn butterfly32_36(b: &mut Bencher) { bench_butterfly32(b, 36); } +fn butterfly32_48(b: &mut Bencher) { bench_butterfly32(b, 48); } +fn butterfly32_54(b: &mut Bencher) { bench_butterfly32(b, 54); } +fn butterfly32_64(b: &mut Bencher) { bench_butterfly32(b, 64); } +fn butterfly32_72(b: &mut Bencher) { bench_butterfly32(b, 72); } +fn butterfly32_128(b: &mut Bencher) { bench_butterfly32(b, 128); } +fn butterfly32_256(b: &mut Bencher) { bench_butterfly32(b, 256); } +fn butterfly32_512(b: &mut Bencher) { bench_butterfly32(b, 512); } /// Times just the FFT execution (not allocation and pre-calculation) /// for a given length @@ -556,23 +556,259 @@ fn bench_butterfly64(b: &mut Bencher, len: usize) { b.iter(|| { fft.process_with_scratch(&mut buffer, &mut scratch); }); } -#[bench] fn butterfly64_02(b: &mut Bencher) { bench_butterfly64(b, 2); } -#[bench] fn butterfly64_03(b: &mut Bencher) { bench_butterfly64(b, 3); } -#[bench] fn butterfly64_04(b: &mut Bencher) { bench_butterfly64(b, 4); } -#[bench] fn butterfly64_05(b: &mut Bencher) { bench_butterfly64(b, 5); } -#[bench] fn butterfly64_06(b: &mut Bencher) { bench_butterfly64(b, 6); } -#[bench] fn butterfly64_07(b: &mut Bencher) { bench_butterfly64(b, 7); } -#[bench] fn butterfly64_08(b: &mut Bencher) { bench_butterfly64(b, 8); } -#[bench] fn butterfly64_09(b: &mut Bencher) { bench_butterfly64(b, 9); } -#[bench] fn butterfly64_11(b: &mut Bencher) { bench_butterfly64(b, 11); } -#[bench] fn butterfly64_12(b: &mut Bencher) { bench_butterfly64(b, 12); } -#[bench] fn butterfly64_16(b: &mut Bencher) { bench_butterfly64(b, 16); } -#[bench] fn butterfly64_18(b: &mut Bencher) { bench_butterfly64(b, 18); } -#[bench] fn butterfly64_24(b: &mut Bencher) { bench_butterfly64(b, 24); } -#[bench] fn butterfly64_27(b: &mut Bencher) { bench_butterfly64(b, 27); } -#[bench] fn butterfly64_32(b: &mut Bencher) { bench_butterfly64(b, 32); } -#[bench] fn butterfly64_36(b: &mut Bencher) { bench_butterfly64(b, 36); } -#[bench] fn butterfly64_64(b: &mut Bencher) { bench_butterfly64(b, 64); } -#[bench] fn butterfly64_128(b: &mut Bencher) { bench_butterfly64(b, 128); } -#[bench] fn butterfly64_256(b: &mut Bencher) { bench_butterfly64(b, 256); } -#[bench] fn butterfly64_512(b: &mut Bencher) { bench_butterfly64(b, 512); } +fn butterfly64_02(b: &mut Bencher) { bench_butterfly64(b, 2); } +fn butterfly64_03(b: &mut Bencher) { bench_butterfly64(b, 3); } +fn butterfly64_04(b: &mut Bencher) { bench_butterfly64(b, 4); } +fn butterfly64_05(b: &mut Bencher) { bench_butterfly64(b, 5); } +fn butterfly64_06(b: &mut Bencher) { bench_butterfly64(b, 6); } +fn butterfly64_07(b: &mut Bencher) { bench_butterfly64(b, 7); } +fn butterfly64_08(b: &mut Bencher) { bench_butterfly64(b, 8); } +fn butterfly64_09(b: &mut Bencher) { bench_butterfly64(b, 9); } +fn butterfly64_11(b: &mut Bencher) { bench_butterfly64(b, 11); } +fn butterfly64_12(b: &mut Bencher) { bench_butterfly64(b, 12); } +fn butterfly64_16(b: &mut Bencher) { bench_butterfly64(b, 16); } +fn butterfly64_18(b: &mut Bencher) { bench_butterfly64(b, 18); } +fn butterfly64_24(b: &mut Bencher) { bench_butterfly64(b, 24); } +fn butterfly64_27(b: &mut Bencher) { bench_butterfly64(b, 27); } +fn butterfly64_32(b: &mut Bencher) { bench_butterfly64(b, 32); } +fn butterfly64_36(b: &mut Bencher) { bench_butterfly64(b, 36); } +fn butterfly64_64(b: &mut Bencher) { bench_butterfly64(b, 64); } +fn butterfly64_128(b: &mut Bencher) { bench_butterfly64(b, 128); } +fn butterfly64_256(b: &mut Bencher) { bench_butterfly64(b, 256); } +fn butterfly64_512(b: &mut Bencher) { bench_butterfly64(b, 512); } + +fn criterion_benchmark(c: &mut Criterion) { + config::register_benchmarks!( + c, + planned32_p2_00000064, + planned32_p2_00000128, + planned32_p2_00000256, + planned32_p2_00000512, + planned32_p2_00001024, + planned32_p2_00002048, + planned32_p2_00004096, + planned32_p2_00016384, + planned32_p2_00065536, + planned32_p2_01048576, + planned32_p2_16777216, + planned32_p5_00125, + planned32_p5_00625, + planned32_p5_03125, + planned32_p5_15625, + planned32_p7_00343, + planned32_p7_02401, + planned32_p7_16807, + planned32_prime_0005, + planned32_prime_0017, + planned32_prime_0149, + planned32_prime_0151, + planned32_prime_0251, + planned32_prime_0257, + planned32_prime_1009, + planned32_prime_1201, + planned32_prime_2017, + planned32_prime_2879, + planned32_prime_32767, + planned32_prime_65521, + planned32_prime_65537, + planned32_prime_746483, + planned32_prime_746497, + planned32_primepower_044521, + planned32_primepower_160801, + planned32_composite_024576, + planned32_composite_020736, + planned32_composite_032192, + planned32_composite_024028, + planned32_composite_005472, + planned32_composite_030270, + planned32_composite_000018, + planned32_composite_000360, + planned32_composite_001200, + planned32_composite_044100, + planned32_composite_048000, + planned32_composite_046656, + planned32_composite_100000, + planned64_p2_00000064, + planned64_p2_00000128, + planned64_p2_00000256, + planned64_p2_00000512, + planned64_p2_00001024, + planned64_p2_00002048, + planned64_p2_00004096, + planned64_p2_00016384, + planned64_p2_00065536, + planned64_p2_01048576, + planned64_p5_00125, + planned64_p5_00625, + planned64_p5_03125, + planned64_p5_15625, + planned64_p7_00343, + planned64_p7_02401, + planned64_p7_16807, + planned64_prime_0005, + planned64_prime_0017, + planned64_prime_0149, + planned64_prime_0151, + planned64_prime_0251, + planned64_prime_0257, + planned64_prime_1009, + planned64_prime_2017, + planned64_prime_2879, + planned64_prime_32767, + planned64_prime_65521, + planned64_prime_65537, + planned64_prime_746483, + planned64_prime_746497, + planned64_primepower_044521, + planned64_primepower_160801, + planned64_composite_024576, + planned64_composite_020736, + planned64_composite_032192, + planned64_composite_024028, + planned64_composite_030270, + planned64_composite_000018, + planned64_composite_000360, + planned64_composite_044100, + planned64_composite_048000, + planned64_composite_046656, + planned64_composite_100000, + good_thomas_0002_3, + good_thomas_0003_4, + good_thomas_0004_5, + good_thomas_0007_32, + good_thomas_0032_27, + good_thomas_0256_243, + good_thomas_2048_3, + good_thomas_2048_2187, + good_thomas_setup_0002_3, + good_thomas_setup_0003_4, + good_thomas_setup_0004_5, + good_thomas_setup_0007_32, + good_thomas_setup_0032_27, + good_thomas_setup_0256_243, + good_thomas_setup_2048_3, + good_thomas_setup_2048_2187, + setup_mixed_radix_0002_3, + setup_mixed_radix_0003_4, + setup_mixed_radix_0004_5, + setup_mixed_radix_0007_32, + setup_mixed_radix_0032_27, + setup_mixed_radix_0256_243, + setup_mixed_radix_2048_3, + setup_mixed_radix_2048_2187, + setup_small_mixed_radix_0002_3, + setup_small_mixed_radix_0003_4, + setup_small_mixed_radix_0004_5, + setup_small_mixed_radix_0007_32, + setup_small_mixed_radix_0032_27, + mixed_radix_0002_3, + mixed_radix_0003_4, + mixed_radix_0004_5, + mixed_radix_0007_32, + mixed_radix_0032_27, + mixed_radix_0256_243, + mixed_radix_2048_3, + mixed_radix_2048_2187, + mixed_radix_small_0002_3, + mixed_radix_small_0003_4, + mixed_radix_small_0004_5, + mixed_radix_small_0007_32, + good_thomas_small_0002_3, + good_thomas_small_0003_4, + good_thomas_small_0004_5, + good_thomas_small_0007_32, + raders_fft_scalar_prime_0005, + raders_fft_scalar_prime_0017, + raders_fft_scalar_prime_0149, + raders_fft_scalar_prime_0151, + raders_fft_scalar_prime_0251, + raders_fft_scalar_prime_0257, + raders_fft_scalar_prime_1009, + raders_fft_scalar_prime_2017, + raders_fft_scalar_prime_12289, + raders_fft_scalar_prime_18433, + raders_fft_scalar_prime_65521, + raders_fft_scalar_prime_65537, + raders_fft_scalar_prime_746483, + raders_fft_scalar_prime_746497, + bench_bluesteins_scalar_prime_0005, + bench_bluesteins_scalar_prime_0017, + bench_bluesteins_scalar_prime_0149, + bench_bluesteins_scalar_prime_0151, + bench_bluesteins_scalar_prime_0251, + bench_bluesteins_scalar_prime_0257, + bench_bluesteins_scalar_prime_1009, + bench_bluesteins_scalar_prime_2017, + bench_bluesteins_scalar_prime_32767, + bench_bluesteins_scalar_prime_65521, + bench_bluesteins_scalar_prime_65537, + bench_bluesteins_scalar_prime_746483, + bench_bluesteins_scalar_prime_746497, + radix4_______64, + radix4______256, + radix4_____1024, + radix4____65536, + radix4__1048576, + mixed_radix_power2__00000256, + mixed_radix_power2__00001024, + mixed_radix_power2__00004096, + mixed_radix_power2__00065536, + mixed_radix_power2__01048576, + mixed_radix_power2__16777216, + mixed_radix_power2_inline__00000256, + mixed_radix_power2_inline__00001024, + mixed_radix_power2_inline__00004096, + mixed_radix_power2_inline__00065536, + mixed_radix_power2_inline__01048576, + mixed_radix_power2_inline__16777216, + butterfly32_02, + butterfly32_03, + butterfly32_04, + butterfly32_05, + butterfly32_06, + butterfly32_07, + butterfly32_08, + butterfly32_09, + butterfly32_11, + butterfly32_12, + butterfly32_16, + butterfly32_24, + butterfly32_27, + butterfly32_32, + butterfly32_36, + butterfly32_48, + butterfly32_54, + butterfly32_64, + butterfly32_72, + butterfly32_128, + butterfly32_256, + butterfly32_512, + butterfly64_02, + butterfly64_03, + butterfly64_04, + butterfly64_05, + butterfly64_06, + butterfly64_07, + butterfly64_08, + butterfly64_09, + butterfly64_11, + butterfly64_12, + butterfly64_16, + butterfly64_18, + butterfly64_24, + butterfly64_27, + butterfly64_32, + butterfly64_36, + butterfly64_64, + butterfly64_128, + butterfly64_256, + butterfly64_512, + ); +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_rustfft_neon.rs b/benches/bench_rustfft_neon.rs index c81bb954..7743a1ed 100644 --- a/benches/bench_rustfft_neon.rs +++ b/benches/bench_rustfft_neon.rs @@ -1,12 +1,12 @@ -#![feature(test)] extern crate rustfft; -extern crate test; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; /// Times just the FFT execution (not allocation and pre-calculation) @@ -59,133 +59,256 @@ fn bench_planned_multi_f64(b: &mut Bencher, len: usize) { } // All butterflies -#[bench] fn neon_butterfly32_02(b: &mut Bencher) { bench_planned_multi_f32(b, 2);} -#[bench] fn neon_butterfly32_03(b: &mut Bencher) { bench_planned_multi_f32(b, 3);} -#[bench] fn neon_butterfly32_04(b: &mut Bencher) { bench_planned_multi_f32(b, 4);} -#[bench] fn neon_butterfly32_05(b: &mut Bencher) { bench_planned_multi_f32(b, 5);} -#[bench] fn neon_butterfly32_06(b: &mut Bencher) { bench_planned_multi_f32(b, 6);} -#[bench] fn neon_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} -#[bench] fn neon_butterfly32_08(b: &mut Bencher) { bench_planned_multi_f32(b, 8);} -#[bench] fn neon_butterfly32_09(b: &mut Bencher) { bench_planned_multi_f32(b, 9);} -#[bench] fn neon_butterfly32_10(b: &mut Bencher) { bench_planned_multi_f32(b, 10);} -#[bench] fn neon_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} -#[bench] fn neon_butterfly32_12(b: &mut Bencher) { bench_planned_multi_f32(b, 12);} -#[bench] fn neon_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} -#[bench] fn neon_butterfly32_15(b: &mut Bencher) { bench_planned_multi_f32(b, 15);} -#[bench] fn neon_butterfly32_16(b: &mut Bencher) { bench_planned_multi_f32(b, 16);} -#[bench] fn neon_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} -#[bench] fn neon_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} -#[bench] fn neon_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} -#[bench] fn neon_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} -#[bench] fn neon_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} -#[bench] fn neon_butterfly32_32(b: &mut Bencher) { bench_planned_multi_f32(b, 32);} - - -#[bench] fn neon_prime_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} -#[bench] fn neon_prime_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} -#[bench] fn neon_prime_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} -#[bench] fn neon_prime_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} -#[bench] fn neon_prime_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} -#[bench] fn neon_prime_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} -#[bench] fn neon_prime_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} -#[bench] fn neon_prime_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} - -#[bench] fn neon_prime_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} -#[bench] fn neon_prime_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} -#[bench] fn neon_prime_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} -#[bench] fn neon_prime_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} -#[bench] fn neon_prime_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} -#[bench] fn neon_prime_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} -#[bench] fn neon_prime_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} -#[bench] fn neon_prime_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} - -#[bench] fn neon_butterfly64_02(b: &mut Bencher) { bench_planned_multi_f64(b, 2);} -#[bench] fn neon_butterfly64_03(b: &mut Bencher) { bench_planned_multi_f64(b, 3);} -#[bench] fn neon_butterfly64_04(b: &mut Bencher) { bench_planned_multi_f64(b, 4);} -#[bench] fn neon_butterfly64_05(b: &mut Bencher) { bench_planned_multi_f64(b, 5);} -#[bench] fn neon_butterfly64_06(b: &mut Bencher) { bench_planned_multi_f64(b, 6);} -#[bench] fn neon_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} -#[bench] fn neon_butterfly64_08(b: &mut Bencher) { bench_planned_multi_f64(b, 8);} -#[bench] fn neon_butterfly64_09(b: &mut Bencher) { bench_planned_multi_f64(b, 9);} -#[bench] fn neon_butterfly64_10(b: &mut Bencher) { bench_planned_multi_f64(b, 10);} -#[bench] fn neon_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} -#[bench] fn neon_butterfly64_12(b: &mut Bencher) { bench_planned_multi_f64(b, 12);} -#[bench] fn neon_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} -#[bench] fn neon_butterfly64_15(b: &mut Bencher) { bench_planned_multi_f64(b, 15);} -#[bench] fn neon_butterfly64_16(b: &mut Bencher) { bench_planned_multi_f64(b, 16);} -#[bench] fn neon_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} -#[bench] fn neon_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} -#[bench] fn neon_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} -#[bench] fn neon_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} -#[bench] fn neon_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} -#[bench] fn neon_butterfly64_32(b: &mut Bencher) { bench_planned_multi_f64(b, 32);} +fn neon_butterfly32_02(b: &mut Bencher) { bench_planned_multi_f32(b, 2);} +fn neon_butterfly32_03(b: &mut Bencher) { bench_planned_multi_f32(b, 3);} +fn neon_butterfly32_04(b: &mut Bencher) { bench_planned_multi_f32(b, 4);} +fn neon_butterfly32_05(b: &mut Bencher) { bench_planned_multi_f32(b, 5);} +fn neon_butterfly32_06(b: &mut Bencher) { bench_planned_multi_f32(b, 6);} +fn neon_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} +fn neon_butterfly32_08(b: &mut Bencher) { bench_planned_multi_f32(b, 8);} +fn neon_butterfly32_09(b: &mut Bencher) { bench_planned_multi_f32(b, 9);} +fn neon_butterfly32_10(b: &mut Bencher) { bench_planned_multi_f32(b, 10);} +fn neon_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} +fn neon_butterfly32_12(b: &mut Bencher) { bench_planned_multi_f32(b, 12);} +fn neon_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} +fn neon_butterfly32_15(b: &mut Bencher) { bench_planned_multi_f32(b, 15);} +fn neon_butterfly32_16(b: &mut Bencher) { bench_planned_multi_f32(b, 16);} +fn neon_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} +fn neon_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} +fn neon_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} +fn neon_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} +fn neon_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} +fn neon_butterfly32_32(b: &mut Bencher) { bench_planned_multi_f32(b, 32);} + + +fn neon_prime_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} +fn neon_prime_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} +fn neon_prime_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} +fn neon_prime_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} +fn neon_prime_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} +fn neon_prime_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} +fn neon_prime_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} +fn neon_prime_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} + +fn neon_prime_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} +fn neon_prime_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} +fn neon_prime_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} +fn neon_prime_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} +fn neon_prime_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} +fn neon_prime_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} +fn neon_prime_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} +fn neon_prime_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} + +fn neon_butterfly64_02(b: &mut Bencher) { bench_planned_multi_f64(b, 2);} +fn neon_butterfly64_03(b: &mut Bencher) { bench_planned_multi_f64(b, 3);} +fn neon_butterfly64_04(b: &mut Bencher) { bench_planned_multi_f64(b, 4);} +fn neon_butterfly64_05(b: &mut Bencher) { bench_planned_multi_f64(b, 5);} +fn neon_butterfly64_06(b: &mut Bencher) { bench_planned_multi_f64(b, 6);} +fn neon_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} +fn neon_butterfly64_08(b: &mut Bencher) { bench_planned_multi_f64(b, 8);} +fn neon_butterfly64_09(b: &mut Bencher) { bench_planned_multi_f64(b, 9);} +fn neon_butterfly64_10(b: &mut Bencher) { bench_planned_multi_f64(b, 10);} +fn neon_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} +fn neon_butterfly64_12(b: &mut Bencher) { bench_planned_multi_f64(b, 12);} +fn neon_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} +fn neon_butterfly64_15(b: &mut Bencher) { bench_planned_multi_f64(b, 15);} +fn neon_butterfly64_16(b: &mut Bencher) { bench_planned_multi_f64(b, 16);} +fn neon_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} +fn neon_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} +fn neon_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} +fn neon_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} +fn neon_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} +fn neon_butterfly64_32(b: &mut Bencher) { bench_planned_multi_f64(b, 32);} // Powers of 2 -#[bench] fn neon_planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } -#[bench] fn neon_planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } -#[bench] fn neon_planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } -#[bench] fn neon_planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } -#[bench] fn neon_planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } -#[bench] fn neon_planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } -#[bench] fn neon_planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } -#[bench] fn neon_planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } -#[bench] fn neon_planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } -#[bench] fn neon_planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } - -#[bench] fn neon_planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } -#[bench] fn neon_planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } -#[bench] fn neon_planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } -#[bench] fn neon_planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } -#[bench] fn neon_planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } -#[bench] fn neon_planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } -#[bench] fn neon_planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } -#[bench] fn neon_planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } -#[bench] fn neon_planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } -#[bench] fn neon_planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } +fn neon_planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } +fn neon_planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } +fn neon_planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } +fn neon_planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } +fn neon_planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } +fn neon_planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } +fn neon_planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } +fn neon_planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } +fn neon_planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } +fn neon_planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } + +fn neon_planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } +fn neon_planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } +fn neon_planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } +fn neon_planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } +fn neon_planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } +fn neon_planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } +fn neon_planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } +fn neon_planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } +fn neon_planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } +fn neon_planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } // Powers of 7 -#[bench] fn neon_planned32_p7_00343(b: &mut Bencher) { bench_planned_f32(b, 343); } -#[bench] fn neon_planned32_p7_02401(b: &mut Bencher) { bench_planned_f32(b, 2401); } -#[bench] fn neon_planned32_p7_16807(b: &mut Bencher) { bench_planned_f32(b, 16807); } +fn neon_planned32_p7_00343(b: &mut Bencher) { bench_planned_f32(b, 343); } +fn neon_planned32_p7_02401(b: &mut Bencher) { bench_planned_f32(b, 2401); } +fn neon_planned32_p7_16807(b: &mut Bencher) { bench_planned_f32(b, 16807); } -#[bench] fn neon_planned64_p7_00343(b: &mut Bencher) { bench_planned_f64(b, 343); } -#[bench] fn neon_planned64_p7_02401(b: &mut Bencher) { bench_planned_f64(b, 2401); } -#[bench] fn neon_planned64_p7_16807(b: &mut Bencher) { bench_planned_f64(b, 16807); } +fn neon_planned64_p7_00343(b: &mut Bencher) { bench_planned_f64(b, 343); } +fn neon_planned64_p7_02401(b: &mut Bencher) { bench_planned_f64(b, 2401); } +fn neon_planned64_p7_16807(b: &mut Bencher) { bench_planned_f64(b, 16807); } // Prime lengths -#[bench] fn neon_planned32_prime_0149(b: &mut Bencher) { bench_planned_f32(b, 149); } -#[bench] fn neon_planned32_prime_0151(b: &mut Bencher) { bench_planned_f32(b, 151); } -#[bench] fn neon_planned32_prime_0251(b: &mut Bencher) { bench_planned_f32(b, 251); } -#[bench] fn neon_planned32_prime_0257(b: &mut Bencher) { bench_planned_f32(b, 257); } -#[bench] fn neon_planned32_prime_2017(b: &mut Bencher) { bench_planned_f32(b, 2017); } -#[bench] fn neon_planned32_prime_2879(b: &mut Bencher) { bench_planned_f32(b, 2879); } -#[bench] fn neon_planned32_prime_65521(b: &mut Bencher) { bench_planned_f32(b, 65521); } -#[bench] fn neon_planned32_prime_746497(b: &mut Bencher) { bench_planned_f32(b,746497); } - -#[bench] fn neon_planned64_prime_0149(b: &mut Bencher) { bench_planned_f64(b, 149); } -#[bench] fn neon_planned64_prime_0151(b: &mut Bencher) { bench_planned_f64(b, 151); } -#[bench] fn neon_planned64_prime_0251(b: &mut Bencher) { bench_planned_f64(b, 251); } -#[bench] fn neon_planned64_prime_0257(b: &mut Bencher) { bench_planned_f64(b, 257); } -#[bench] fn neon_planned64_prime_2017(b: &mut Bencher) { bench_planned_f64(b, 2017); } -#[bench] fn neon_planned64_prime_2879(b: &mut Bencher) { bench_planned_f64(b, 2879); } -#[bench] fn neon_planned64_prime_65521(b: &mut Bencher) { bench_planned_f64(b, 65521); } -#[bench] fn neon_planned64_prime_746497(b: &mut Bencher) { bench_planned_f64(b,746497); } +fn neon_planned32_prime_0149(b: &mut Bencher) { bench_planned_f32(b, 149); } +fn neon_planned32_prime_0151(b: &mut Bencher) { bench_planned_f32(b, 151); } +fn neon_planned32_prime_0251(b: &mut Bencher) { bench_planned_f32(b, 251); } +fn neon_planned32_prime_0257(b: &mut Bencher) { bench_planned_f32(b, 257); } +fn neon_planned32_prime_2017(b: &mut Bencher) { bench_planned_f32(b, 2017); } +fn neon_planned32_prime_2879(b: &mut Bencher) { bench_planned_f32(b, 2879); } +fn neon_planned32_prime_65521(b: &mut Bencher) { bench_planned_f32(b, 65521); } +fn neon_planned32_prime_746497(b: &mut Bencher) { bench_planned_f32(b,746497); } + +fn neon_planned64_prime_0149(b: &mut Bencher) { bench_planned_f64(b, 149); } +fn neon_planned64_prime_0151(b: &mut Bencher) { bench_planned_f64(b, 151); } +fn neon_planned64_prime_0251(b: &mut Bencher) { bench_planned_f64(b, 251); } +fn neon_planned64_prime_0257(b: &mut Bencher) { bench_planned_f64(b, 257); } +fn neon_planned64_prime_2017(b: &mut Bencher) { bench_planned_f64(b, 2017); } +fn neon_planned64_prime_2879(b: &mut Bencher) { bench_planned_f64(b, 2879); } +fn neon_planned64_prime_65521(b: &mut Bencher) { bench_planned_f64(b, 65521); } +fn neon_planned64_prime_746497(b: &mut Bencher) { bench_planned_f64(b,746497); } // small mixed composites -#[bench] fn neon_planned32_composite_000018(b: &mut Bencher) { bench_planned_f32(b, 00018); } -#[bench] fn neon_planned32_composite_000360(b: &mut Bencher) { bench_planned_f32(b, 00360); } -#[bench] fn neon_planned32_composite_001200(b: &mut Bencher) { bench_planned_f32(b, 01200); } -#[bench] fn neon_planned32_composite_044100(b: &mut Bencher) { bench_planned_f32(b, 44100); } -#[bench] fn neon_planned32_composite_048000(b: &mut Bencher) { bench_planned_f32(b, 48000); } -#[bench] fn neon_planned32_composite_046656(b: &mut Bencher) { bench_planned_f32(b, 46656); } +fn neon_planned32_composite_000018(b: &mut Bencher) { bench_planned_f32(b, 00018); } +fn neon_planned32_composite_000360(b: &mut Bencher) { bench_planned_f32(b, 00360); } +fn neon_planned32_composite_001200(b: &mut Bencher) { bench_planned_f32(b, 01200); } +fn neon_planned32_composite_044100(b: &mut Bencher) { bench_planned_f32(b, 44100); } +fn neon_planned32_composite_048000(b: &mut Bencher) { bench_planned_f32(b, 48000); } +fn neon_planned32_composite_046656(b: &mut Bencher) { bench_planned_f32(b, 46656); } + +fn neon_planned64_composite_000018(b: &mut Bencher) { bench_planned_f64(b, 00018); } +fn neon_planned64_composite_000360(b: &mut Bencher) { bench_planned_f64(b, 00360); } +fn neon_planned64_composite_001200(b: &mut Bencher) { bench_planned_f64(b, 01200); } +fn neon_planned64_composite_044100(b: &mut Bencher) { bench_planned_f64(b, 44100); } +fn neon_planned64_composite_048000(b: &mut Bencher) { bench_planned_f64(b, 48000); } +fn neon_planned64_composite_046656(b: &mut Bencher) { bench_planned_f64(b, 46656); } -#[bench] fn neon_planned64_composite_000018(b: &mut Bencher) { bench_planned_f64(b, 00018); } -#[bench] fn neon_planned64_composite_000360(b: &mut Bencher) { bench_planned_f64(b, 00360); } -#[bench] fn neon_planned64_composite_001200(b: &mut Bencher) { bench_planned_f64(b, 01200); } -#[bench] fn neon_planned64_composite_044100(b: &mut Bencher) { bench_planned_f64(b, 44100); } -#[bench] fn neon_planned64_composite_048000(b: &mut Bencher) { bench_planned_f64(b, 48000); } -#[bench] fn neon_planned64_composite_046656(b: &mut Bencher) { bench_planned_f64(b, 46656); } +fn criterion_benchmark(c: &mut Criterion) { + config::register_benchmarks!( + c, + neon_butterfly32_02, + neon_butterfly32_03, + neon_butterfly32_04, + neon_butterfly32_05, + neon_butterfly32_06, + neon_butterfly32_07, + neon_butterfly32_08, + neon_butterfly32_09, + neon_butterfly32_10, + neon_butterfly32_11, + neon_butterfly32_12, + neon_butterfly32_13, + neon_butterfly32_15, + neon_butterfly32_16, + neon_butterfly32_17, + neon_butterfly32_19, + neon_butterfly32_23, + neon_butterfly32_29, + neon_butterfly32_31, + neon_butterfly32_32, + neon_prime_butterfly32_07, + neon_prime_butterfly32_11, + neon_prime_butterfly32_13, + neon_prime_butterfly32_17, + neon_prime_butterfly32_19, + neon_prime_butterfly32_23, + neon_prime_butterfly32_29, + neon_prime_butterfly32_31, + neon_prime_butterfly64_07, + neon_prime_butterfly64_11, + neon_prime_butterfly64_13, + neon_prime_butterfly64_17, + neon_prime_butterfly64_19, + neon_prime_butterfly64_23, + neon_prime_butterfly64_29, + neon_prime_butterfly64_31, + neon_butterfly64_02, + neon_butterfly64_03, + neon_butterfly64_04, + neon_butterfly64_05, + neon_butterfly64_06, + neon_butterfly64_07, + neon_butterfly64_08, + neon_butterfly64_09, + neon_butterfly64_10, + neon_butterfly64_11, + neon_butterfly64_12, + neon_butterfly64_13, + neon_butterfly64_15, + neon_butterfly64_16, + neon_butterfly64_17, + neon_butterfly64_19, + neon_butterfly64_23, + neon_butterfly64_29, + neon_butterfly64_31, + neon_butterfly64_32, + neon_planned32_p2_00000064, + neon_planned32_p2_00000128, + neon_planned32_p2_00000256, + neon_planned32_p2_00000512, + neon_planned32_p2_00001024, + neon_planned32_p2_00002048, + neon_planned32_p2_00004096, + neon_planned32_p2_00016384, + neon_planned32_p2_00065536, + neon_planned32_p2_01048576, + neon_planned64_p2_00000064, + neon_planned64_p2_00000128, + neon_planned64_p2_00000256, + neon_planned64_p2_00000512, + neon_planned64_p2_00001024, + neon_planned64_p2_00002048, + neon_planned64_p2_00004096, + neon_planned64_p2_00016384, + neon_planned64_p2_00065536, + neon_planned64_p2_01048576, + neon_planned32_p7_00343, + neon_planned32_p7_02401, + neon_planned32_p7_16807, + neon_planned64_p7_00343, + neon_planned64_p7_02401, + neon_planned64_p7_16807, + neon_planned32_prime_0149, + neon_planned32_prime_0151, + neon_planned32_prime_0251, + neon_planned32_prime_0257, + neon_planned32_prime_2017, + neon_planned32_prime_2879, + neon_planned32_prime_65521, + neon_planned32_prime_746497, + neon_planned64_prime_0149, + neon_planned64_prime_0151, + neon_planned64_prime_0251, + neon_planned64_prime_0257, + neon_planned64_prime_2017, + neon_planned64_prime_2879, + neon_planned64_prime_65521, + neon_planned64_prime_746497, + neon_planned32_composite_000018, + neon_planned32_composite_000360, + neon_planned32_composite_001200, + neon_planned32_composite_044100, + neon_planned32_composite_048000, + neon_planned32_composite_046656, + neon_planned64_composite_000018, + neon_planned64_composite_000360, + neon_planned64_composite_001200, + neon_planned64_composite_044100, + neon_planned64_composite_048000, + neon_planned64_composite_046656, + ); +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_rustfft_scalar.rs b/benches/bench_rustfft_scalar.rs index 76b7d4c4..0a787523 100644 --- a/benches/bench_rustfft_scalar.rs +++ b/benches/bench_rustfft_scalar.rs @@ -1,8 +1,6 @@ #![allow(bare_trait_objects)] #![allow(non_snake_case)] -#![feature(test)] extern crate rustfft; -extern crate test; use rustfft::algorithm::butterflies::*; use rustfft::algorithm::*; @@ -11,7 +9,9 @@ use rustfft::num_traits::Zero; use rustfft::FftPlannerScalar; use rustfft::{Direction, Fft, FftDirection, FftNum, Length}; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; #[allow(unused)] struct Noop { @@ -72,43 +72,33 @@ fn bench_planned_f32(b: &mut Bencher, len: usize) { } // Powers of 4 -#[bench] fn planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } -#[bench] fn planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } -#[bench] fn planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } -#[bench] fn planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } -#[bench] fn planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } -#[bench] fn planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } -#[bench] fn planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } -#[bench] fn planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } -#[bench] fn planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } -#[bench] fn planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } @@ -181,43 +171,33 @@ fn bench_planned_f64(b: &mut Bencher, len: usize) { }); } -#[bench] fn planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } -#[bench] fn planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } -#[bench] fn planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } -#[bench] fn planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } -#[bench] fn planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } -#[bench] fn planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } -#[bench] fn planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } -#[bench] fn planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } -#[bench] fn planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } -#[bench] fn planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } @@ -288,23 +268,18 @@ fn bench_good_thomas(b: &mut Bencher, width: usize, height: usize) { }); } -#[bench] fn good_thomas_0002_3(b: &mut Bencher) { bench_good_thomas(b, 2, 3); } -#[bench] fn good_thomas_0003_4(b: &mut Bencher) { bench_good_thomas(b, 3, 4); } -#[bench] fn good_thomas_0004_5(b: &mut Bencher) { bench_good_thomas(b, 4, 5); } -#[bench] fn good_thomas_0007_32(b: &mut Bencher) { bench_good_thomas(b, 7, 32); } -#[bench] fn good_thomas_0032_27(b: &mut Bencher) { bench_good_thomas(b, 32, 27); } @@ -324,39 +299,31 @@ fn bench_good_thomas_setup(b: &mut Bencher, width: usize, height: usize) { Arc::clone(&width_fft), Arc::clone(&height_fft), )); - test::black_box(fft); + std::hint::black_box(fft); }); } -#[bench] fn good_thomas_setup_0002_3(b: &mut Bencher) { bench_good_thomas_setup(b, 2, 3); } -#[bench] fn good_thomas_setup_0003_4(b: &mut Bencher) { bench_good_thomas_setup(b, 3, 4); } -#[bench] fn good_thomas_setup_0004_5(b: &mut Bencher) { bench_good_thomas_setup(b, 4, 5); } -#[bench] fn good_thomas_setup_0007_32(b: &mut Bencher) { bench_good_thomas_setup(b, 7, 32); } -#[bench] fn good_thomas_setup_0032_27(b: &mut Bencher) { bench_good_thomas_setup(b, 32, 27); } -#[bench] fn good_thomas_setup_0256_243(b: &mut Bencher) { bench_good_thomas_setup(b, 256, 243); } -#[bench] fn good_thomas_setup_2048_3(b: &mut Bencher) { bench_good_thomas_setup(b, 2048, 3); } -#[bench] fn good_thomas_setup_2048_2187(b: &mut Bencher) { bench_good_thomas_setup(b, 2048, 2187); } @@ -389,23 +356,18 @@ fn bench_mixed_radix(b: &mut Bencher, width: usize, height: usize) { }); } -#[bench] fn mixed_radix_0002_3(b: &mut Bencher) { bench_mixed_radix(b, 2, 3); } -#[bench] fn mixed_radix_0003_4(b: &mut Bencher) { bench_mixed_radix(b, 3, 4); } -#[bench] fn mixed_radix_0004_5(b: &mut Bencher) { bench_mixed_radix(b, 4, 5); } -#[bench] fn mixed_radix_0007_32(b: &mut Bencher) { bench_mixed_radix(b, 7, 32); } -#[bench] fn mixed_radix_0032_27(b: &mut Bencher) { bench_mixed_radix(b, 32, 27); } @@ -449,19 +411,15 @@ fn bench_mixed_radix_small(b: &mut Bencher, width: usize, height: usize) { }); } -#[bench] fn mixed_radix_small_0002_3(b: &mut Bencher) { bench_mixed_radix_small(b, 2, 3); } -#[bench] fn mixed_radix_small_0003_4(b: &mut Bencher) { bench_mixed_radix_small(b, 3, 4); } -#[bench] fn mixed_radix_small_0004_5(b: &mut Bencher) { bench_mixed_radix_small(b, 4, 5); } -#[bench] fn mixed_radix_small_0007_32(b: &mut Bencher) { bench_mixed_radix_small(b, 7, 32); } @@ -487,19 +445,15 @@ fn bench_good_thomas_small(b: &mut Bencher, width: usize, height: usize) { }); } -#[bench] fn good_thomas_small_0002_3(b: &mut Bencher) { bench_good_thomas_small(b, 2, 3); } -#[bench] fn good_thomas_small_0003_4(b: &mut Bencher) { bench_good_thomas_small(b, 3, 4); } -#[bench] fn good_thomas_small_0004_5(b: &mut Bencher) { bench_good_thomas_small(b, 4, 5); } -#[bench] fn good_thomas_small_0007_32(b: &mut Bencher) { bench_good_thomas_small(b, 7, 32); } @@ -596,19 +550,15 @@ fn bench_radix4(b: &mut Bencher, len: usize) { }); } -#[bench] fn radix4_______64(b: &mut Bencher) { bench_radix4(b, 64); } -#[bench] fn radix4______256(b: &mut Bencher) { bench_radix4(b, 256); } -#[bench] fn radix4_____1024(b: &mut Bencher) { bench_radix4(b, 1024); } -#[bench] fn radix4____65536(b: &mut Bencher) { bench_radix4(b, 65536); } @@ -635,19 +585,15 @@ fn bench_64_radix4(b: &mut Bencher, len: usize) { }); } -#[bench] fn radix4_64____64(b: &mut Bencher) { bench_64_radix4(b, 64); } -#[bench] fn radix4_64___256(b: &mut Bencher) { bench_64_radix4(b, 256); } -#[bench] fn radix4_64__1024(b: &mut Bencher) { bench_64_radix4(b, 1024); } -#[bench] fn radix4_64_65536(b: &mut Bencher) { bench_64_radix4(b, 65536); } @@ -681,19 +627,15 @@ fn bench_mixed_radix_power2(b: &mut Bencher, len: usize) { }); } -#[bench] fn mixed_radix_power2__00000256(b: &mut Bencher) { bench_mixed_radix_power2(b, 256); } -#[bench] fn mixed_radix_power2__00001024(b: &mut Bencher) { bench_mixed_radix_power2(b, 1024); } -#[bench] fn mixed_radix_power2__00004096(b: &mut Bencher) { bench_mixed_radix_power2(b, 4096); } -#[bench] fn mixed_radix_power2__00065536(b: &mut Bencher) { bench_mixed_radix_power2(b, 65536); } @@ -727,19 +669,15 @@ fn bench_mixed_radix_inline_power2(b: &mut Bencher, len: usize) { }); } -#[bench] fn mixed_radix_power2_inline__00000256(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 256); } -#[bench] fn mixed_radix_power2_inline__00001024(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 1024); } -#[bench] fn mixed_radix_power2_inline__00004096(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 4096); } -#[bench] fn mixed_radix_power2_inline__00065536(b: &mut Bencher) { bench_mixed_radix_inline_power2(b, 65536); } @@ -759,47 +697,36 @@ fn bench_butterfly32(b: &mut Bencher, len: usize) { }); } -#[bench] fn butterfly32_02(b: &mut Bencher) { bench_butterfly32(b, 2); } -#[bench] fn butterfly32_03(b: &mut Bencher) { bench_butterfly32(b, 3); } -#[bench] fn butterfly32_04(b: &mut Bencher) { bench_butterfly32(b, 4); } -#[bench] fn butterfly32_05(b: &mut Bencher) { bench_butterfly32(b, 5); } -#[bench] fn butterfly32_06(b: &mut Bencher) { bench_butterfly32(b, 6); } -#[bench] fn butterfly32_07(b: &mut Bencher) { bench_butterfly32(b, 7); } -#[bench] fn butterfly32_08(b: &mut Bencher) { bench_butterfly32(b, 8); } -#[bench] fn butterfly32_09(b: &mut Bencher) { bench_butterfly32(b, 9); } -#[bench] fn butterfly32_11(b: &mut Bencher) { bench_butterfly32(b, 11); } -#[bench] fn butterfly32_12(b: &mut Bencher) { bench_butterfly32(b, 12); } -#[bench] fn butterfly32_16(b: &mut Bencher) { bench_butterfly32(b, 16); } @@ -828,47 +755,36 @@ fn bench_butterfly64(b: &mut Bencher, len: usize) { }); } -#[bench] fn butterfly64_02(b: &mut Bencher) { bench_butterfly64(b, 2); } -#[bench] fn butterfly64_03(b: &mut Bencher) { bench_butterfly64(b, 3); } -#[bench] fn butterfly64_04(b: &mut Bencher) { bench_butterfly64(b, 4); } -#[bench] fn butterfly64_05(b: &mut Bencher) { bench_butterfly64(b, 5); } -#[bench] fn butterfly64_06(b: &mut Bencher) { bench_butterfly64(b, 6); } -#[bench] fn butterfly64_07(b: &mut Bencher) { bench_butterfly64(b, 7); } -#[bench] fn butterfly64_08(b: &mut Bencher) { bench_butterfly64(b, 8); } -#[bench] fn butterfly64_09(b: &mut Bencher) { bench_butterfly64(b, 9); } -#[bench] fn butterfly64_11(b: &mut Bencher) { bench_butterfly64(b, 11); } -#[bench] fn butterfly64_12(b: &mut Bencher) { bench_butterfly64(b, 12); } -#[bench] fn butterfly64_16(b: &mut Bencher) { bench_butterfly64(b, 16); } @@ -887,31 +803,128 @@ fn bench_bluesteins_setup(b: &mut Bencher, len: usize) { let inner_fft = FftPlannerScalar::::new().plan_fft_forward(inner_len); b.iter(|| { - test::black_box(BluesteinsAlgorithm::new(len, Arc::clone(&inner_fft))); + std::hint::black_box(BluesteinsAlgorithm::new(len, Arc::clone(&inner_fft))); }); } -#[bench] fn setup_bluesteins_0017(b: &mut Bencher) { bench_bluesteins_setup(b, 17); } -#[bench] fn setup_bluesteins_0055(b: &mut Bencher) { bench_bluesteins_setup(b, 55); } -#[bench] fn setup_bluesteins_0117(b: &mut Bencher) { bench_bluesteins_setup(b, 117); } -#[bench] fn setup_bluesteins_0555(b: &mut Bencher) { bench_bluesteins_setup(b, 555); } -#[bench] fn setup_bluesteins_1117(b: &mut Bencher) { bench_bluesteins_setup(b, 1117); } -#[bench] fn setup_bluesteins_5555(b: &mut Bencher) { bench_bluesteins_setup(b, 5555); } + +fn criterion_benchmark(c: &mut Criterion) { + config::register_benchmarks!( + c, + planned32_p2_00000064, + planned32_p2_00000128, + planned32_p2_00000256, + planned32_p2_00000512, + planned32_p2_00001024, + planned32_p2_00002048, + planned32_p2_00004096, + planned32_p2_00016384, + planned32_p2_00065536, + planned32_p2_01048576, + planned64_p2_00000064, + planned64_p2_00000128, + planned64_p2_00000256, + planned64_p2_00000512, + planned64_p2_00001024, + planned64_p2_00002048, + planned64_p2_00004096, + planned64_p2_00016384, + planned64_p2_00065536, + planned64_p2_01048576, + good_thomas_0002_3, + good_thomas_0003_4, + good_thomas_0004_5, + good_thomas_0007_32, + good_thomas_0032_27, + good_thomas_setup_0002_3, + good_thomas_setup_0003_4, + good_thomas_setup_0004_5, + good_thomas_setup_0007_32, + good_thomas_setup_0032_27, + good_thomas_setup_0256_243, + good_thomas_setup_2048_3, + good_thomas_setup_2048_2187, + mixed_radix_0002_3, + mixed_radix_0003_4, + mixed_radix_0004_5, + mixed_radix_0007_32, + mixed_radix_0032_27, + mixed_radix_small_0002_3, + mixed_radix_small_0003_4, + mixed_radix_small_0004_5, + mixed_radix_small_0007_32, + good_thomas_small_0002_3, + good_thomas_small_0003_4, + good_thomas_small_0004_5, + good_thomas_small_0007_32, + radix4_______64, + radix4______256, + radix4_____1024, + radix4____65536, + radix4_64____64, + radix4_64___256, + radix4_64__1024, + radix4_64_65536, + mixed_radix_power2__00000256, + mixed_radix_power2__00001024, + mixed_radix_power2__00004096, + mixed_radix_power2__00065536, + mixed_radix_power2_inline__00000256, + mixed_radix_power2_inline__00001024, + mixed_radix_power2_inline__00004096, + mixed_radix_power2_inline__00065536, + butterfly32_02, + butterfly32_03, + butterfly32_04, + butterfly32_05, + butterfly32_06, + butterfly32_07, + butterfly32_08, + butterfly32_09, + butterfly32_11, + butterfly32_12, + butterfly32_16, + butterfly64_02, + butterfly64_03, + butterfly64_04, + butterfly64_05, + butterfly64_06, + butterfly64_07, + butterfly64_08, + butterfly64_09, + butterfly64_11, + butterfly64_12, + butterfly64_16, + setup_bluesteins_0017, + setup_bluesteins_0055, + setup_bluesteins_0117, + setup_bluesteins_0555, + setup_bluesteins_1117, + setup_bluesteins_5555, + ); +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_rustfft_sse.rs b/benches/bench_rustfft_sse.rs index e30042ae..223aae15 100644 --- a/benches/bench_rustfft_sse.rs +++ b/benches/bench_rustfft_sse.rs @@ -1,12 +1,12 @@ -#![feature(test)] extern crate rustfft; -extern crate test; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; /// Times just the FFT execution (not allocation and pre-calculation) @@ -59,134 +59,259 @@ fn bench_planned_multi_f64(b: &mut Bencher, len: usize) { } // All butterflies -#[bench] fn sse_butterfly32_02(b: &mut Bencher) { bench_planned_multi_f32(b, 2);} -#[bench] fn sse_butterfly32_03(b: &mut Bencher) { bench_planned_multi_f32(b, 3);} -#[bench] fn sse_butterfly32_04(b: &mut Bencher) { bench_planned_multi_f32(b, 4);} -#[bench] fn sse_butterfly32_05(b: &mut Bencher) { bench_planned_multi_f32(b, 5);} -#[bench] fn sse_butterfly32_06(b: &mut Bencher) { bench_planned_multi_f32(b, 6);} -#[bench] fn sse_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} -#[bench] fn sse_butterfly32_08(b: &mut Bencher) { bench_planned_multi_f32(b, 8);} -#[bench] fn sse_butterfly32_09(b: &mut Bencher) { bench_planned_multi_f32(b, 9);} -#[bench] fn sse_butterfly32_10(b: &mut Bencher) { bench_planned_multi_f32(b, 10);} -#[bench] fn sse_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} -#[bench] fn sse_butterfly32_12(b: &mut Bencher) { bench_planned_multi_f32(b, 12);} -#[bench] fn sse_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} -#[bench] fn sse_butterfly32_15(b: &mut Bencher) { bench_planned_multi_f32(b, 15);} -#[bench] fn sse_butterfly32_16(b: &mut Bencher) { bench_planned_multi_f32(b, 16);} -#[bench] fn sse_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} -#[bench] fn sse_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} -#[bench] fn sse_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} -#[bench] fn sse_butterfly32_24(b: &mut Bencher) { bench_planned_multi_f32(b, 24);} -#[bench] fn sse_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} -#[bench] fn sse_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} -#[bench] fn sse_butterfly32_32(b: &mut Bencher) { bench_planned_multi_f32(b, 32);} - -#[bench] fn sse_butterfly64_02(b: &mut Bencher) { bench_planned_multi_f64(b, 2);} -#[bench] fn sse_butterfly64_03(b: &mut Bencher) { bench_planned_multi_f64(b, 3);} -#[bench] fn sse_butterfly64_04(b: &mut Bencher) { bench_planned_multi_f64(b, 4);} -#[bench] fn sse_butterfly64_05(b: &mut Bencher) { bench_planned_multi_f64(b, 5);} -#[bench] fn sse_butterfly64_06(b: &mut Bencher) { bench_planned_multi_f64(b, 6);} -#[bench] fn sse_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} -#[bench] fn sse_butterfly64_08(b: &mut Bencher) { bench_planned_multi_f64(b, 8);} -#[bench] fn sse_butterfly64_09(b: &mut Bencher) { bench_planned_multi_f64(b, 9);} -#[bench] fn sse_butterfly64_10(b: &mut Bencher) { bench_planned_multi_f64(b, 10);} -#[bench] fn sse_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} -#[bench] fn sse_butterfly64_12(b: &mut Bencher) { bench_planned_multi_f64(b, 12);} -#[bench] fn sse_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} -#[bench] fn sse_butterfly64_15(b: &mut Bencher) { bench_planned_multi_f64(b, 15);} -#[bench] fn sse_butterfly64_16(b: &mut Bencher) { bench_planned_multi_f64(b, 16);} -#[bench] fn sse_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} -#[bench] fn sse_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} -#[bench] fn sse_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} -#[bench] fn sse_butterfly64_24(b: &mut Bencher) { bench_planned_multi_f64(b, 24);} -#[bench] fn sse_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} -#[bench] fn sse_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} -#[bench] fn sse_butterfly64_32(b: &mut Bencher) { bench_planned_multi_f64(b, 32);} +fn sse_butterfly32_02(b: &mut Bencher) { bench_planned_multi_f32(b, 2);} +fn sse_butterfly32_03(b: &mut Bencher) { bench_planned_multi_f32(b, 3);} +fn sse_butterfly32_04(b: &mut Bencher) { bench_planned_multi_f32(b, 4);} +fn sse_butterfly32_05(b: &mut Bencher) { bench_planned_multi_f32(b, 5);} +fn sse_butterfly32_06(b: &mut Bencher) { bench_planned_multi_f32(b, 6);} +fn sse_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} +fn sse_butterfly32_08(b: &mut Bencher) { bench_planned_multi_f32(b, 8);} +fn sse_butterfly32_09(b: &mut Bencher) { bench_planned_multi_f32(b, 9);} +fn sse_butterfly32_10(b: &mut Bencher) { bench_planned_multi_f32(b, 10);} +fn sse_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} +fn sse_butterfly32_12(b: &mut Bencher) { bench_planned_multi_f32(b, 12);} +fn sse_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} +fn sse_butterfly32_15(b: &mut Bencher) { bench_planned_multi_f32(b, 15);} +fn sse_butterfly32_16(b: &mut Bencher) { bench_planned_multi_f32(b, 16);} +fn sse_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} +fn sse_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} +fn sse_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} +fn sse_butterfly32_24(b: &mut Bencher) { bench_planned_multi_f32(b, 24);} +fn sse_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} +fn sse_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} +fn sse_butterfly32_32(b: &mut Bencher) { bench_planned_multi_f32(b, 32);} + +fn sse_butterfly64_02(b: &mut Bencher) { bench_planned_multi_f64(b, 2);} +fn sse_butterfly64_03(b: &mut Bencher) { bench_planned_multi_f64(b, 3);} +fn sse_butterfly64_04(b: &mut Bencher) { bench_planned_multi_f64(b, 4);} +fn sse_butterfly64_05(b: &mut Bencher) { bench_planned_multi_f64(b, 5);} +fn sse_butterfly64_06(b: &mut Bencher) { bench_planned_multi_f64(b, 6);} +fn sse_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} +fn sse_butterfly64_08(b: &mut Bencher) { bench_planned_multi_f64(b, 8);} +fn sse_butterfly64_09(b: &mut Bencher) { bench_planned_multi_f64(b, 9);} +fn sse_butterfly64_10(b: &mut Bencher) { bench_planned_multi_f64(b, 10);} +fn sse_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} +fn sse_butterfly64_12(b: &mut Bencher) { bench_planned_multi_f64(b, 12);} +fn sse_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} +fn sse_butterfly64_15(b: &mut Bencher) { bench_planned_multi_f64(b, 15);} +fn sse_butterfly64_16(b: &mut Bencher) { bench_planned_multi_f64(b, 16);} +fn sse_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} +fn sse_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} +fn sse_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} +fn sse_butterfly64_24(b: &mut Bencher) { bench_planned_multi_f64(b, 24);} +fn sse_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} +fn sse_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} +fn sse_butterfly64_32(b: &mut Bencher) { bench_planned_multi_f64(b, 32);} // prime butterflies -#[bench] fn sse_prime_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} -#[bench] fn sse_prime_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} -#[bench] fn sse_prime_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} -#[bench] fn sse_prime_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} -#[bench] fn sse_prime_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} -#[bench] fn sse_prime_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} -#[bench] fn sse_prime_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} -#[bench] fn sse_prime_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} -#[bench] fn sse_prime_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} -#[bench] fn sse_prime_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} -#[bench] fn sse_prime_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} -#[bench] fn sse_prime_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} -#[bench] fn sse_prime_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} -#[bench] fn sse_prime_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} -#[bench] fn sse_prime_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} -#[bench] fn sse_prime_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} +fn sse_prime_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} +fn sse_prime_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} +fn sse_prime_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} +fn sse_prime_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} +fn sse_prime_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} +fn sse_prime_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} +fn sse_prime_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} +fn sse_prime_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} +fn sse_prime_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} +fn sse_prime_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} +fn sse_prime_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} +fn sse_prime_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} +fn sse_prime_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} +fn sse_prime_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} +fn sse_prime_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} +fn sse_prime_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} // Powers of 2 -#[bench] fn sse_planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } -#[bench] fn sse_planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } -#[bench] fn sse_planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } -#[bench] fn sse_planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } -#[bench] fn sse_planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } -#[bench] fn sse_planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } -#[bench] fn sse_planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } -#[bench] fn sse_planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } -#[bench] fn sse_planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } -#[bench] fn sse_planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } - -#[bench] fn sse_planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } -#[bench] fn sse_planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } -#[bench] fn sse_planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } -#[bench] fn sse_planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } -#[bench] fn sse_planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } -#[bench] fn sse_planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } -#[bench] fn sse_planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } -#[bench] fn sse_planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } -#[bench] fn sse_planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } -#[bench] fn sse_planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } +fn sse_planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } +fn sse_planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } +fn sse_planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } +fn sse_planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } +fn sse_planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } +fn sse_planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } +fn sse_planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } +fn sse_planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } +fn sse_planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } +fn sse_planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } + +fn sse_planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } +fn sse_planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } +fn sse_planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } +fn sse_planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } +fn sse_planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } +fn sse_planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } +fn sse_planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } +fn sse_planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } +fn sse_planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } +fn sse_planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } // Powers of 7 -#[bench] fn sse_planned32_p7_00343(b: &mut Bencher) { bench_planned_f32(b, 343); } -#[bench] fn sse_planned32_p7_02401(b: &mut Bencher) { bench_planned_f32(b, 2401); } -#[bench] fn sse_planned32_p7_16807(b: &mut Bencher) { bench_planned_f32(b, 16807); } +fn sse_planned32_p7_00343(b: &mut Bencher) { bench_planned_f32(b, 343); } +fn sse_planned32_p7_02401(b: &mut Bencher) { bench_planned_f32(b, 2401); } +fn sse_planned32_p7_16807(b: &mut Bencher) { bench_planned_f32(b, 16807); } -#[bench] fn sse_planned64_p7_00343(b: &mut Bencher) { bench_planned_f64(b, 343); } -#[bench] fn sse_planned64_p7_02401(b: &mut Bencher) { bench_planned_f64(b, 2401); } -#[bench] fn sse_planned64_p7_16807(b: &mut Bencher) { bench_planned_f64(b, 16807); } +fn sse_planned64_p7_00343(b: &mut Bencher) { bench_planned_f64(b, 343); } +fn sse_planned64_p7_02401(b: &mut Bencher) { bench_planned_f64(b, 2401); } +fn sse_planned64_p7_16807(b: &mut Bencher) { bench_planned_f64(b, 16807); } // Prime lengths -#[bench] fn sse_planned32_prime_0149(b: &mut Bencher) { bench_planned_f32(b, 149); } -#[bench] fn sse_planned32_prime_0151(b: &mut Bencher) { bench_planned_f32(b, 151); } -#[bench] fn sse_planned32_prime_0251(b: &mut Bencher) { bench_planned_f32(b, 251); } -#[bench] fn sse_planned32_prime_0257(b: &mut Bencher) { bench_planned_f32(b, 257); } -#[bench] fn sse_planned32_prime_2017(b: &mut Bencher) { bench_planned_f32(b, 2017); } -#[bench] fn sse_planned32_prime_2879(b: &mut Bencher) { bench_planned_f32(b, 2879); } -#[bench] fn sse_planned32_prime_65521(b: &mut Bencher) { bench_planned_f32(b, 65521); } -#[bench] fn sse_planned32_prime_746497(b: &mut Bencher) { bench_planned_f32(b,746497); } - -#[bench] fn sse_planned64_prime_0149(b: &mut Bencher) { bench_planned_f64(b, 149); } -#[bench] fn sse_planned64_prime_0151(b: &mut Bencher) { bench_planned_f64(b, 151); } -#[bench] fn sse_planned64_prime_0251(b: &mut Bencher) { bench_planned_f64(b, 251); } -#[bench] fn sse_planned64_prime_0257(b: &mut Bencher) { bench_planned_f64(b, 257); } -#[bench] fn sse_planned64_prime_2017(b: &mut Bencher) { bench_planned_f64(b, 2017); } -#[bench] fn sse_planned64_prime_2879(b: &mut Bencher) { bench_planned_f64(b, 2879); } -#[bench] fn sse_planned64_prime_65521(b: &mut Bencher) { bench_planned_f64(b, 65521); } -#[bench] fn sse_planned64_prime_746497(b: &mut Bencher) { bench_planned_f64(b,746497); } +fn sse_planned32_prime_0149(b: &mut Bencher) { bench_planned_f32(b, 149); } +fn sse_planned32_prime_0151(b: &mut Bencher) { bench_planned_f32(b, 151); } +fn sse_planned32_prime_0251(b: &mut Bencher) { bench_planned_f32(b, 251); } +fn sse_planned32_prime_0257(b: &mut Bencher) { bench_planned_f32(b, 257); } +fn sse_planned32_prime_2017(b: &mut Bencher) { bench_planned_f32(b, 2017); } +fn sse_planned32_prime_2879(b: &mut Bencher) { bench_planned_f32(b, 2879); } +fn sse_planned32_prime_65521(b: &mut Bencher) { bench_planned_f32(b, 65521); } +fn sse_planned32_prime_746497(b: &mut Bencher) { bench_planned_f32(b,746497); } + +fn sse_planned64_prime_0149(b: &mut Bencher) { bench_planned_f64(b, 149); } +fn sse_planned64_prime_0151(b: &mut Bencher) { bench_planned_f64(b, 151); } +fn sse_planned64_prime_0251(b: &mut Bencher) { bench_planned_f64(b, 251); } +fn sse_planned64_prime_0257(b: &mut Bencher) { bench_planned_f64(b, 257); } +fn sse_planned64_prime_2017(b: &mut Bencher) { bench_planned_f64(b, 2017); } +fn sse_planned64_prime_2879(b: &mut Bencher) { bench_planned_f64(b, 2879); } +fn sse_planned64_prime_65521(b: &mut Bencher) { bench_planned_f64(b, 65521); } +fn sse_planned64_prime_746497(b: &mut Bencher) { bench_planned_f64(b,746497); } // small mixed composites -#[bench] fn sse_planned32_composite_000018(b: &mut Bencher) { bench_planned_f32(b, 00018); } -#[bench] fn sse_planned32_composite_000360(b: &mut Bencher) { bench_planned_f32(b, 00360); } -#[bench] fn sse_planned32_composite_001200(b: &mut Bencher) { bench_planned_f32(b, 01200); } -#[bench] fn sse_planned32_composite_044100(b: &mut Bencher) { bench_planned_f32(b, 44100); } -#[bench] fn sse_planned32_composite_048000(b: &mut Bencher) { bench_planned_f32(b, 48000); } -#[bench] fn sse_planned32_composite_046656(b: &mut Bencher) { bench_planned_f32(b, 46656); } +fn sse_planned32_composite_000018(b: &mut Bencher) { bench_planned_f32(b, 00018); } +fn sse_planned32_composite_000360(b: &mut Bencher) { bench_planned_f32(b, 00360); } +fn sse_planned32_composite_001200(b: &mut Bencher) { bench_planned_f32(b, 01200); } +fn sse_planned32_composite_044100(b: &mut Bencher) { bench_planned_f32(b, 44100); } +fn sse_planned32_composite_048000(b: &mut Bencher) { bench_planned_f32(b, 48000); } +fn sse_planned32_composite_046656(b: &mut Bencher) { bench_planned_f32(b, 46656); } -#[bench] fn sse_planned64_composite_000018(b: &mut Bencher) { bench_planned_f64(b, 00018); } -#[bench] fn sse_planned64_composite_000360(b: &mut Bencher) { bench_planned_f64(b, 00360); } -#[bench] fn sse_planned64_composite_001200(b: &mut Bencher) { bench_planned_f64(b, 01200); } -#[bench] fn sse_planned64_composite_044100(b: &mut Bencher) { bench_planned_f64(b, 44100); } -#[bench] fn sse_planned64_composite_048000(b: &mut Bencher) { bench_planned_f64(b, 48000); } -#[bench] fn sse_planned64_composite_046656(b: &mut Bencher) { bench_planned_f64(b, 46656); } +fn sse_planned64_composite_000018(b: &mut Bencher) { bench_planned_f64(b, 00018); } +fn sse_planned64_composite_000360(b: &mut Bencher) { bench_planned_f64(b, 00360); } +fn sse_planned64_composite_001200(b: &mut Bencher) { bench_planned_f64(b, 01200); } +fn sse_planned64_composite_044100(b: &mut Bencher) { bench_planned_f64(b, 44100); } +fn sse_planned64_composite_048000(b: &mut Bencher) { bench_planned_f64(b, 48000); } +fn sse_planned64_composite_046656(b: &mut Bencher) { bench_planned_f64(b, 46656); } + +fn criterion_benchmark(c: &mut Criterion) { + config::register_benchmarks!( + c, + sse_butterfly32_02, + sse_butterfly32_03, + sse_butterfly32_04, + sse_butterfly32_05, + sse_butterfly32_06, + sse_butterfly32_07, + sse_butterfly32_08, + sse_butterfly32_09, + sse_butterfly32_10, + sse_butterfly32_11, + sse_butterfly32_12, + sse_butterfly32_13, + sse_butterfly32_15, + sse_butterfly32_16, + sse_butterfly32_17, + sse_butterfly32_19, + sse_butterfly32_23, + sse_butterfly32_24, + sse_butterfly32_29, + sse_butterfly32_31, + sse_butterfly32_32, + sse_butterfly64_02, + sse_butterfly64_03, + sse_butterfly64_04, + sse_butterfly64_05, + sse_butterfly64_06, + sse_butterfly64_07, + sse_butterfly64_08, + sse_butterfly64_09, + sse_butterfly64_10, + sse_butterfly64_11, + sse_butterfly64_12, + sse_butterfly64_13, + sse_butterfly64_15, + sse_butterfly64_16, + sse_butterfly64_17, + sse_butterfly64_19, + sse_butterfly64_23, + sse_butterfly64_24, + sse_butterfly64_29, + sse_butterfly64_31, + sse_butterfly64_32, + sse_prime_butterfly32_07, + sse_prime_butterfly32_11, + sse_prime_butterfly32_13, + sse_prime_butterfly32_17, + sse_prime_butterfly32_19, + sse_prime_butterfly32_23, + sse_prime_butterfly32_29, + sse_prime_butterfly32_31, + sse_prime_butterfly64_07, + sse_prime_butterfly64_11, + sse_prime_butterfly64_13, + sse_prime_butterfly64_17, + sse_prime_butterfly64_19, + sse_prime_butterfly64_23, + sse_prime_butterfly64_29, + sse_prime_butterfly64_31, + sse_planned32_p2_00000064, + sse_planned32_p2_00000128, + sse_planned32_p2_00000256, + sse_planned32_p2_00000512, + sse_planned32_p2_00001024, + sse_planned32_p2_00002048, + sse_planned32_p2_00004096, + sse_planned32_p2_00016384, + sse_planned32_p2_00065536, + sse_planned32_p2_01048576, + sse_planned64_p2_00000064, + sse_planned64_p2_00000128, + sse_planned64_p2_00000256, + sse_planned64_p2_00000512, + sse_planned64_p2_00001024, + sse_planned64_p2_00002048, + sse_planned64_p2_00004096, + sse_planned64_p2_00016384, + sse_planned64_p2_00065536, + sse_planned64_p2_01048576, + sse_planned32_p7_00343, + sse_planned32_p7_02401, + sse_planned32_p7_16807, + sse_planned64_p7_00343, + sse_planned64_p7_02401, + sse_planned64_p7_16807, + sse_planned32_prime_0149, + sse_planned32_prime_0151, + sse_planned32_prime_0251, + sse_planned32_prime_0257, + sse_planned32_prime_2017, + sse_planned32_prime_2879, + sse_planned32_prime_65521, + sse_planned32_prime_746497, + sse_planned64_prime_0149, + sse_planned64_prime_0151, + sse_planned64_prime_0251, + sse_planned64_prime_0257, + sse_planned64_prime_2017, + sse_planned64_prime_2879, + sse_planned64_prime_65521, + sse_planned64_prime_746497, + sse_planned32_composite_000018, + sse_planned32_composite_000360, + sse_planned32_composite_001200, + sse_planned32_composite_044100, + sse_planned32_composite_048000, + sse_planned32_composite_046656, + sse_planned64_composite_000018, + sse_planned64_composite_000360, + sse_planned64_composite_001200, + sse_planned64_composite_044100, + sse_planned64_composite_048000, + sse_planned64_composite_046656, + ); +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_rustfft_wasm_simd.rs b/benches/bench_rustfft_wasm_simd.rs index 97037ab9..c3f0f0be 100644 --- a/benches/bench_rustfft_wasm_simd.rs +++ b/benches/bench_rustfft_wasm_simd.rs @@ -1,4 +1,3 @@ -#![feature(test)] /// Unfortunately, `cargo bench` does not permit running these benchmarks out-of-the-box /// on a WebAssembly virtual machine. /// @@ -30,13 +29,14 @@ /// For more information, refer to [Criterion's user guide](https://github.com/bheisler/criterion.rs/blob/dc2b06cd31f7aa34cff6a83a00598e0523186dad/book/src/user_guide/wasi.md) /// which should be mostly applicable to our use case. extern crate rustfft; -extern crate test; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; use std::sync::Arc; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; /// Times just the FFT execution (not allocation and pre-calculation) /// for a given length @@ -88,418 +88,447 @@ fn bench_planned_multi_f64(b: &mut Bencher, len: usize) { } // All butterflies -#[bench] fn wasm_simd_butterfly32_02(b: &mut Bencher) { bench_planned_multi_f32(b, 2); } -#[bench] fn wasm_simd_butterfly32_03(b: &mut Bencher) { bench_planned_multi_f32(b, 3); } -#[bench] fn wasm_simd_butterfly32_04(b: &mut Bencher) { bench_planned_multi_f32(b, 4); } -#[bench] fn wasm_simd_butterfly32_05(b: &mut Bencher) { bench_planned_multi_f32(b, 5); } -#[bench] fn wasm_simd_butterfly32_06(b: &mut Bencher) { bench_planned_multi_f32(b, 6); } -#[bench] fn wasm_simd_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7); } -#[bench] fn wasm_simd_butterfly32_08(b: &mut Bencher) { bench_planned_multi_f32(b, 8); } -#[bench] fn wasm_simd_butterfly32_09(b: &mut Bencher) { bench_planned_multi_f32(b, 9); } -#[bench] fn wasm_simd_butterfly32_10(b: &mut Bencher) { bench_planned_multi_f32(b, 10); } -#[bench] fn wasm_simd_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11); } -#[bench] fn wasm_simd_butterfly32_12(b: &mut Bencher) { bench_planned_multi_f32(b, 12); } -#[bench] fn wasm_simd_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13); } -#[bench] fn wasm_simd_butterfly32_15(b: &mut Bencher) { bench_planned_multi_f32(b, 15); } -#[bench] fn wasm_simd_butterfly32_16(b: &mut Bencher) { bench_planned_multi_f32(b, 16); } -#[bench] fn wasm_simd_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17); } -#[bench] fn wasm_simd_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19); } -#[bench] fn wasm_simd_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23); } -#[bench] fn wasm_simd_butterfly32_24(b: &mut Bencher) { bench_planned_multi_f32(b, 24); } -#[bench] fn wasm_simd_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29); } -#[bench] fn wasm_simd_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31); } -#[bench] fn wasm_simd_butterfly32_32(b: &mut Bencher) { bench_planned_multi_f32(b, 32); } -#[bench] fn wasm_simd_butterfly64_02(b: &mut Bencher) { bench_planned_multi_f64(b, 2); } -#[bench] fn wasm_simd_butterfly64_03(b: &mut Bencher) { bench_planned_multi_f64(b, 3); } -#[bench] fn wasm_simd_butterfly64_04(b: &mut Bencher) { bench_planned_multi_f64(b, 4); } -#[bench] fn wasm_simd_butterfly64_05(b: &mut Bencher) { bench_planned_multi_f64(b, 5); } -#[bench] fn wasm_simd_butterfly64_06(b: &mut Bencher) { bench_planned_multi_f64(b, 6); } -#[bench] fn wasm_simd_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7); } -#[bench] fn wasm_simd_butterfly64_08(b: &mut Bencher) { bench_planned_multi_f64(b, 8); } -#[bench] fn wasm_simd_butterfly64_09(b: &mut Bencher) { bench_planned_multi_f64(b, 9); } -#[bench] fn wasm_simd_butterfly64_10(b: &mut Bencher) { bench_planned_multi_f64(b, 10); } -#[bench] fn wasm_simd_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11); } -#[bench] fn wasm_simd_butterfly64_12(b: &mut Bencher) { bench_planned_multi_f64(b, 12); } -#[bench] fn wasm_simd_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13); } -#[bench] fn wasm_simd_butterfly64_15(b: &mut Bencher) { bench_planned_multi_f64(b, 15); } -#[bench] fn wasm_simd_butterfly64_16(b: &mut Bencher) { bench_planned_multi_f64(b, 16); } -#[bench] fn wasm_simd_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17); } -#[bench] fn wasm_simd_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19); } -#[bench] fn wasm_simd_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23); } -#[bench] fn wasm_simd_butterfly64_24(b: &mut Bencher) { bench_planned_multi_f64(b, 24); } -#[bench] fn wasm_simd_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29); } -#[bench] fn wasm_simd_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31); } -#[bench] fn wasm_simd_butterfly64_32(b: &mut Bencher) { bench_planned_multi_f64(b, 32); } // prime butterflies -#[bench] fn wasm_simd_prime_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} -#[bench] fn wasm_simd_prime_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} -#[bench] fn wasm_simd_prime_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} -#[bench] fn wasm_simd_prime_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} -#[bench] fn wasm_simd_prime_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} -#[bench] fn wasm_simd_prime_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} -#[bench] fn wasm_simd_prime_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} -#[bench] fn wasm_simd_prime_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} -#[bench] fn wasm_simd_prime_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} -#[bench] fn wasm_simd_prime_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} -#[bench] fn wasm_simd_prime_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} -#[bench] fn wasm_simd_prime_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} -#[bench] fn wasm_simd_prime_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} -#[bench] fn wasm_simd_prime_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} -#[bench] fn wasm_simd_prime_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} -#[bench] fn wasm_simd_prime_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} +fn wasm_simd_prime_butterfly32_07(b: &mut Bencher) { bench_planned_multi_f32(b, 7);} +fn wasm_simd_prime_butterfly32_11(b: &mut Bencher) { bench_planned_multi_f32(b, 11);} +fn wasm_simd_prime_butterfly32_13(b: &mut Bencher) { bench_planned_multi_f32(b, 13);} +fn wasm_simd_prime_butterfly32_17(b: &mut Bencher) { bench_planned_multi_f32(b, 17);} +fn wasm_simd_prime_butterfly32_19(b: &mut Bencher) { bench_planned_multi_f32(b, 19);} +fn wasm_simd_prime_butterfly32_23(b: &mut Bencher) { bench_planned_multi_f32(b, 23);} +fn wasm_simd_prime_butterfly32_29(b: &mut Bencher) { bench_planned_multi_f32(b, 29);} +fn wasm_simd_prime_butterfly32_31(b: &mut Bencher) { bench_planned_multi_f32(b, 31);} +fn wasm_simd_prime_butterfly64_07(b: &mut Bencher) { bench_planned_multi_f64(b, 7);} +fn wasm_simd_prime_butterfly64_11(b: &mut Bencher) { bench_planned_multi_f64(b, 11);} +fn wasm_simd_prime_butterfly64_13(b: &mut Bencher) { bench_planned_multi_f64(b, 13);} +fn wasm_simd_prime_butterfly64_17(b: &mut Bencher) { bench_planned_multi_f64(b, 17);} +fn wasm_simd_prime_butterfly64_19(b: &mut Bencher) { bench_planned_multi_f64(b, 19);} +fn wasm_simd_prime_butterfly64_23(b: &mut Bencher) { bench_planned_multi_f64(b, 23);} +fn wasm_simd_prime_butterfly64_29(b: &mut Bencher) { bench_planned_multi_f64(b, 29);} +fn wasm_simd_prime_butterfly64_31(b: &mut Bencher) { bench_planned_multi_f64(b, 31);} // Powers of 2 -#[bench] fn wasm_simd_planned32_p2_00000064(b: &mut Bencher) { bench_planned_f32(b, 64); } -#[bench] fn wasm_simd_planned32_p2_00000128(b: &mut Bencher) { bench_planned_f32(b, 128); } -#[bench] fn wasm_simd_planned32_p2_00000256(b: &mut Bencher) { bench_planned_f32(b, 256); } -#[bench] fn wasm_simd_planned32_p2_00000512(b: &mut Bencher) { bench_planned_f32(b, 512); } -#[bench] fn wasm_simd_planned32_p2_00001024(b: &mut Bencher) { bench_planned_f32(b, 1024); } -#[bench] fn wasm_simd_planned32_p2_00002048(b: &mut Bencher) { bench_planned_f32(b, 2048); } -#[bench] fn wasm_simd_planned32_p2_00004096(b: &mut Bencher) { bench_planned_f32(b, 4096); } -#[bench] fn wasm_simd_planned32_p2_00016384(b: &mut Bencher) { bench_planned_f32(b, 16384); } -#[bench] fn wasm_simd_planned32_p2_00065536(b: &mut Bencher) { bench_planned_f32(b, 65536); } -#[bench] fn wasm_simd_planned32_p2_01048576(b: &mut Bencher) { bench_planned_f32(b, 1048576); } -#[bench] fn wasm_simd_planned64_p2_00000064(b: &mut Bencher) { bench_planned_f64(b, 64); } -#[bench] fn wasm_simd_planned64_p2_00000128(b: &mut Bencher) { bench_planned_f64(b, 128); } -#[bench] fn wasm_simd_planned64_p2_00000256(b: &mut Bencher) { bench_planned_f64(b, 256); } -#[bench] fn wasm_simd_planned64_p2_00000512(b: &mut Bencher) { bench_planned_f64(b, 512); } -#[bench] fn wasm_simd_planned64_p2_00001024(b: &mut Bencher) { bench_planned_f64(b, 1024); } -#[bench] fn wasm_simd_planned64_p2_00002048(b: &mut Bencher) { bench_planned_f64(b, 2048); } -#[bench] fn wasm_simd_planned64_p2_00004096(b: &mut Bencher) { bench_planned_f64(b, 4096); } -#[bench] fn wasm_simd_planned64_p2_00016384(b: &mut Bencher) { bench_planned_f64(b, 16384); } -#[bench] fn wasm_simd_planned64_p2_00065536(b: &mut Bencher) { bench_planned_f64(b, 65536); } -#[bench] fn wasm_simd_planned64_p2_01048576(b: &mut Bencher) { bench_planned_f64(b, 1048576); } // Powers of 7 -#[bench] fn wasm_simd_planned32_p7_00343(b: &mut Bencher) { bench_planned_f32(b, 343); } -#[bench] fn wasm_simd_planned32_p7_02401(b: &mut Bencher) { bench_planned_f32(b, 2401); } -#[bench] fn wasm_simd_planned32_p7_16807(b: &mut Bencher) { bench_planned_f32(b, 16807); } -#[bench] fn wasm_simd_planned64_p7_00343(b: &mut Bencher) { bench_planned_f64(b, 343); } -#[bench] fn wasm_simd_planned64_p7_02401(b: &mut Bencher) { bench_planned_f64(b, 2401); } -#[bench] fn wasm_simd_planned64_p7_16807(b: &mut Bencher) { bench_planned_f64(b, 16807); } // Prime lengths -#[bench] fn wasm_simd_planned32_prime_0149(b: &mut Bencher) { bench_planned_f32(b, 149); } -#[bench] fn wasm_simd_planned32_prime_0151(b: &mut Bencher) { bench_planned_f32(b, 151); } -#[bench] fn wasm_simd_planned32_prime_0251(b: &mut Bencher) { bench_planned_f32(b, 251); } -#[bench] fn wasm_simd_planned32_prime_0257(b: &mut Bencher) { bench_planned_f32(b, 257); } -#[bench] fn wasm_simd_planned32_prime_2017(b: &mut Bencher) { bench_planned_f32(b, 2017); } -#[bench] fn wasm_simd_planned32_prime_2879(b: &mut Bencher) { bench_planned_f32(b, 2879); } -#[bench] fn wasm_simd_planned32_prime_65521(b: &mut Bencher) { bench_planned_f32(b, 65521); } -#[bench] fn wasm_simd_planned32_prime_746497(b: &mut Bencher) { bench_planned_f32(b, 746497); } -#[bench] fn wasm_simd_planned64_prime_0149(b: &mut Bencher) { bench_planned_f64(b, 149); } -#[bench] fn wasm_simd_planned64_prime_0151(b: &mut Bencher) { bench_planned_f64(b, 151); } -#[bench] fn wasm_simd_planned64_prime_0251(b: &mut Bencher) { bench_planned_f64(b, 251); } -#[bench] fn wasm_simd_planned64_prime_0257(b: &mut Bencher) { bench_planned_f64(b, 257); } -#[bench] fn wasm_simd_planned64_prime_2017(b: &mut Bencher) { bench_planned_f64(b, 2017); } -#[bench] fn wasm_simd_planned64_prime_2879(b: &mut Bencher) { bench_planned_f64(b, 2879); } -#[bench] fn wasm_simd_planned64_prime_65521(b: &mut Bencher) { bench_planned_f64(b, 65521); } -#[bench] fn wasm_simd_planned64_prime_746497(b: &mut Bencher) { bench_planned_f64(b, 746497); } // small mixed composites -#[bench] fn wasm_simd_planned32_composite_000018(b: &mut Bencher) { bench_planned_f32(b, 00018); } -#[bench] fn wasm_simd_planned32_composite_000360(b: &mut Bencher) { bench_planned_f32(b, 00360); } -#[bench] fn wasm_simd_planned32_composite_001200(b: &mut Bencher) { bench_planned_f32(b, 01200); } -#[bench] fn wasm_simd_planned32_composite_044100(b: &mut Bencher) { bench_planned_f32(b, 44100); } -#[bench] fn wasm_simd_planned32_composite_048000(b: &mut Bencher) { bench_planned_f32(b, 48000); } -#[bench] fn wasm_simd_planned32_composite_046656(b: &mut Bencher) { bench_planned_f32(b, 46656); } -#[bench] fn wasm_simd_planned64_composite_000018(b: &mut Bencher) { bench_planned_f64(b, 00018); } -#[bench] fn wasm_simd_planned64_composite_000360(b: &mut Bencher) { bench_planned_f64(b, 00360); } -#[bench] fn wasm_simd_planned64_composite_001200(b: &mut Bencher) { bench_planned_f64(b, 01200); } -#[bench] fn wasm_simd_planned64_composite_044100(b: &mut Bencher) { bench_planned_f64(b, 44100); } -#[bench] fn wasm_simd_planned64_composite_048000(b: &mut Bencher) { bench_planned_f64(b, 48000); } -#[bench] fn wasm_simd_planned64_composite_046656(b: &mut Bencher) { bench_planned_f64(b, 46656); } + +fn criterion_benchmark(c: &mut Criterion) { + config::register_benchmarks!( + c, + wasm_simd_butterfly32_02, + wasm_simd_butterfly32_03, + wasm_simd_butterfly32_04, + wasm_simd_butterfly32_05, + wasm_simd_butterfly32_06, + wasm_simd_butterfly32_07, + wasm_simd_butterfly32_08, + wasm_simd_butterfly32_09, + wasm_simd_butterfly32_10, + wasm_simd_butterfly32_11, + wasm_simd_butterfly32_12, + wasm_simd_butterfly32_13, + wasm_simd_butterfly32_15, + wasm_simd_butterfly32_16, + wasm_simd_butterfly32_17, + wasm_simd_butterfly32_19, + wasm_simd_butterfly32_23, + wasm_simd_butterfly32_24, + wasm_simd_butterfly32_29, + wasm_simd_butterfly32_31, + wasm_simd_butterfly32_32, + wasm_simd_butterfly64_02, + wasm_simd_butterfly64_03, + wasm_simd_butterfly64_04, + wasm_simd_butterfly64_05, + wasm_simd_butterfly64_06, + wasm_simd_butterfly64_07, + wasm_simd_butterfly64_08, + wasm_simd_butterfly64_09, + wasm_simd_butterfly64_10, + wasm_simd_butterfly64_11, + wasm_simd_butterfly64_12, + wasm_simd_butterfly64_13, + wasm_simd_butterfly64_15, + wasm_simd_butterfly64_16, + wasm_simd_butterfly64_17, + wasm_simd_butterfly64_19, + wasm_simd_butterfly64_23, + wasm_simd_butterfly64_24, + wasm_simd_butterfly64_29, + wasm_simd_butterfly64_31, + wasm_simd_butterfly64_32, + wasm_simd_prime_butterfly32_07, + wasm_simd_prime_butterfly32_11, + wasm_simd_prime_butterfly32_13, + wasm_simd_prime_butterfly32_17, + wasm_simd_prime_butterfly32_19, + wasm_simd_prime_butterfly32_23, + wasm_simd_prime_butterfly32_29, + wasm_simd_prime_butterfly32_31, + wasm_simd_prime_butterfly64_07, + wasm_simd_prime_butterfly64_11, + wasm_simd_prime_butterfly64_13, + wasm_simd_prime_butterfly64_17, + wasm_simd_prime_butterfly64_19, + wasm_simd_prime_butterfly64_23, + wasm_simd_prime_butterfly64_29, + wasm_simd_prime_butterfly64_31, + wasm_simd_planned32_p2_00000064, + wasm_simd_planned32_p2_00000128, + wasm_simd_planned32_p2_00000256, + wasm_simd_planned32_p2_00000512, + wasm_simd_planned32_p2_00001024, + wasm_simd_planned32_p2_00002048, + wasm_simd_planned32_p2_00004096, + wasm_simd_planned32_p2_00016384, + wasm_simd_planned32_p2_00065536, + wasm_simd_planned32_p2_01048576, + wasm_simd_planned64_p2_00000064, + wasm_simd_planned64_p2_00000128, + wasm_simd_planned64_p2_00000256, + wasm_simd_planned64_p2_00000512, + wasm_simd_planned64_p2_00001024, + wasm_simd_planned64_p2_00002048, + wasm_simd_planned64_p2_00004096, + wasm_simd_planned64_p2_00016384, + wasm_simd_planned64_p2_00065536, + wasm_simd_planned64_p2_01048576, + wasm_simd_planned32_p7_00343, + wasm_simd_planned32_p7_02401, + wasm_simd_planned32_p7_16807, + wasm_simd_planned64_p7_00343, + wasm_simd_planned64_p7_02401, + wasm_simd_planned64_p7_16807, + wasm_simd_planned32_prime_0149, + wasm_simd_planned32_prime_0151, + wasm_simd_planned32_prime_0251, + wasm_simd_planned32_prime_0257, + wasm_simd_planned32_prime_2017, + wasm_simd_planned32_prime_2879, + wasm_simd_planned32_prime_65521, + wasm_simd_planned32_prime_746497, + wasm_simd_planned64_prime_0149, + wasm_simd_planned64_prime_0151, + wasm_simd_planned64_prime_0251, + wasm_simd_planned64_prime_0257, + wasm_simd_planned64_prime_2017, + wasm_simd_planned64_prime_2879, + wasm_simd_planned64_prime_65521, + wasm_simd_planned64_prime_746497, + wasm_simd_planned32_composite_000018, + wasm_simd_planned32_composite_000360, + wasm_simd_planned32_composite_001200, + wasm_simd_planned32_composite_044100, + wasm_simd_planned32_composite_048000, + wasm_simd_planned32_composite_046656, + wasm_simd_planned64_composite_000018, + wasm_simd_planned64_composite_000360, + wasm_simd_planned64_composite_001200, + wasm_simd_planned64_composite_044100, + wasm_simd_planned64_composite_048000, + wasm_simd_planned64_composite_046656, + ); +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/compare_3n2m_strategies.rs b/benches/compare_3n2m_strategies.rs index 2745a0f1..6d630012 100644 --- a/benches/compare_3n2m_strategies.rs +++ b/benches/compare_3n2m_strategies.rs @@ -1,10 +1,10 @@ -#![feature(test)] #![allow(non_snake_case)] #![allow(unused)] extern crate rustfft; -extern crate test; -use test::Bencher; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; use rustfft::algorithm::butterflies::*; use rustfft::algorithm::Dft; @@ -164,9 +164,8 @@ fn filter_strategy(strategy: &Vec) -> bool { } // cargo bench generate_3n2m_comparison_benchmarks_32 -- --nocapture --ignored -#[ignore] -#[bench] -fn generate_3n2m_comparison_benchmarks_32(_: &mut test::Bencher) { +#[allow(dead_code)] +fn generate_3n2m_comparison_benchmarks_32(_: &mut Bencher) { let butterfly_sizes = [128, 256, 512, 72, 36, 48, 54, 64]; let last_ditch_butterflies = [27, 9, 32, 24]; let available_radixes = [ @@ -223,9 +222,8 @@ fn generate_3n2m_comparison_benchmarks_32(_: &mut test::Bencher) { } // cargo bench generate_3n2m_comparison_benchmarks_64 -- --nocapture --ignored -#[ignore] -#[bench] -fn generate_3n2m_comparison_benchmarks_64(_: &mut test::Bencher) { +#[allow(dead_code)] +fn generate_3n2m_comparison_benchmarks_64(_: &mut Bencher) { let butterfly_sizes = [512, 256, 128, 64, 36, 27, 24, 18, 12]; let last_ditch_butterflies = [32, 16, 8, 9]; let available_radixes = [ @@ -282,9 +280,8 @@ fn generate_3n2m_comparison_benchmarks_64(_: &mut test::Bencher) { } // cargo bench generate_3n2m_planned_benchmarks_32 -- --nocapture --ignored -#[ignore] -#[bench] -fn generate_3n2m_planned_benchmarks(_: &mut test::Bencher) { +#[allow(dead_code)] +fn generate_3n2m_planned_benchmarks(_: &mut Bencher) { let mut fft_sizes = vec![]; let max_len: usize = 1 << 23; @@ -323,9 +320,8 @@ fn generate_3n2m_planned_benchmarks(_: &mut test::Bencher) { } // cargo bench generate_3n2m_planned_benchmarks_64 -- --nocapture --ignored -#[ignore] -#[bench] -fn generate_3n2m_planned_benchmarks_64(_: &mut test::Bencher) { +#[allow(dead_code)] +fn generate_3n2m_planned_benchmarks_64(_: &mut Bencher) { let mut fft_sizes = vec![]; let max_len: usize = 1 << 23; @@ -474,9 +470,8 @@ impl PartialFactors { } // cargo bench generate_raders_benchmarks -- --nocapture --ignored -#[ignore] -#[bench] -fn generate_raders_benchmarks(_: &mut test::Bencher) { +#[allow(dead_code)] +fn generate_raders_benchmarks(_: &mut Bencher) { for len in 10usize..100000 { if miller_rabin(len as u64) { let inner_factors = PartialFactors::compute(len - 1); @@ -558,219 +553,230 @@ fn bench_planned_raders_f64(b: &mut Bencher, len: usize) { b.iter(|| { fft.process_with_scratch(&mut buffer, &mut scratch); }); } -#[bench] fn comparef64_len0000023_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 23); } -#[bench] fn comparef64_len0000023_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 23); } -#[bench] fn comparef64_len0000067_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 67); } -#[bench] fn comparef64_len0000067_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 67); } -#[bench] fn comparef64_len0000089_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 89); } -#[bench] fn comparef64_len0000089_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 89); } -#[bench] fn comparef64_len0000199_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 199); } -#[bench] fn comparef64_len0000199_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 199); } -#[bench] fn comparef64_len0000331_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 331); } -#[bench] fn comparef64_len0000331_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 331); } -#[bench] fn comparef64_len0000353_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 353); } -#[bench] fn comparef64_len0000353_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 353); } -#[bench] fn comparef64_len0000397_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 397); } -#[bench] fn comparef64_len0000397_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 397); } -#[bench] fn comparef64_len0000463_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 463); } -#[bench] fn comparef64_len0000463_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 463); } -#[bench] fn comparef64_len0000617_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 617); } -#[bench] fn comparef64_len0000617_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 617); } -#[bench] fn comparef64_len0000661_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 661); } -#[bench] fn comparef64_len0000661_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 661); } -#[bench] fn comparef64_len0000727_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 727); } -#[bench] fn comparef64_len0000727_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 727); } -#[bench] fn comparef64_len0000881_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 881); } -#[bench] fn comparef64_len0000881_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 881); } -#[bench] fn comparef64_len0000991_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 991); } -#[bench] fn comparef64_len0000991_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 991); } -#[bench] fn comparef64_len0001321_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1321); } -#[bench] fn comparef64_len0001321_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1321); } -#[bench] fn comparef64_len0001409_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1409); } -#[bench] fn comparef64_len0001409_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1409); } -#[bench] fn comparef64_len0001453_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1453); } -#[bench] fn comparef64_len0001453_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1453); } -#[bench] fn comparef64_len0001783_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1783); } -#[bench] fn comparef64_len0001783_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1783); } -#[bench] fn comparef64_len0002113_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2113); } -#[bench] fn comparef64_len0002113_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2113); } -#[bench] fn comparef64_len0002179_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2179); } -#[bench] fn comparef64_len0002179_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2179); } -#[bench] fn comparef64_len0002311_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2311); } -#[bench] fn comparef64_len0002311_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2311); } -#[bench] fn comparef64_len0002377_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2377); } -#[bench] fn comparef64_len0002377_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2377); } -#[bench] fn comparef64_len0002663_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2663); } -#[bench] fn comparef64_len0002663_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2663); } -#[bench] fn comparef64_len0002971_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2971); } -#[bench] fn comparef64_len0002971_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2971); } -#[bench] fn comparef64_len0003169_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3169); } -#[bench] fn comparef64_len0003169_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3169); } -#[bench] fn comparef64_len0003301_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3301); } -#[bench] fn comparef64_len0003301_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3301); } -#[bench] fn comparef64_len0003389_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3389); } -#[bench] fn comparef64_len0003389_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3389); } -#[bench] fn comparef64_len0003631_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3631); } -#[bench] fn comparef64_len0003631_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3631); } -#[bench] fn comparef64_len0003697_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3697); } -#[bench] fn comparef64_len0003697_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3697); } -#[bench] fn comparef64_len0003851_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3851); } -#[bench] fn comparef64_len0003851_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3851); } -#[bench] fn comparef64_len0004159_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4159); } -#[bench] fn comparef64_len0004159_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4159); } -#[bench] fn comparef64_len0004357_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4357); } -#[bench] fn comparef64_len0004357_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4357); } -#[bench] fn comparef64_len0004621_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4621); } -#[bench] fn comparef64_len0004621_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4621); } -#[bench] fn comparef64_len0004951_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4951); } -#[bench] fn comparef64_len0004951_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4951); } -#[bench] fn comparef64_len0005281_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 5281); } -#[bench] fn comparef64_len0005281_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 5281); } -#[bench] fn comparef64_len0005347_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 5347); } -#[bench] fn comparef64_len0005347_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 5347); } -#[bench] fn comparef64_len0005501_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 5501); } -#[bench] fn comparef64_len0005501_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 5501); } -#[bench] fn comparef64_len0006337_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 6337); } -#[bench] fn comparef64_len0006337_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 6337); } -#[bench] fn comparef64_len0006469_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 6469); } -#[bench] fn comparef64_len0006469_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 6469); } -#[bench] fn comparef64_len0007129_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 7129); } -#[bench] fn comparef64_len0007129_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 7129); } -#[bench] fn comparef64_len0007393_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 7393); } -#[bench] fn comparef64_len0007393_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 7393); } -#[bench] fn comparef64_len0007547_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 7547); } -#[bench] fn comparef64_len0007547_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 7547); } -#[bench] fn comparef64_len0008317_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 8317); } -#[bench] fn comparef64_len0008317_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 8317); } -#[bench] fn comparef64_len0008713_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 8713); } -#[bench] fn comparef64_len0008713_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 8713); } -#[bench] fn comparef64_len0009241_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 9241); } -#[bench] fn comparef64_len0009241_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 9241); } -#[bench] fn comparef64_len0009857_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 9857); } -#[bench] fn comparef64_len0009857_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 9857); } -#[bench] fn comparef64_len0009901_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 9901); } -#[bench] fn comparef64_len0009901_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 9901); } -#[bench] fn comparef64_len0010781_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 10781); } -#[bench] fn comparef64_len0010781_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 10781); } -#[bench] fn comparef64_len0010891_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 10891); } -#[bench] fn comparef64_len0010891_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 10891); } -#[bench] fn comparef64_len0011551_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 11551); } -#[bench] fn comparef64_len0011551_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 11551); } -#[bench] fn comparef64_len0011617_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 11617); } -#[bench] fn comparef64_len0011617_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 11617); } -#[bench] fn comparef64_len0012101_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 12101); } -#[bench] fn comparef64_len0012101_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 12101); } -#[bench] fn comparef64_len0013553_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 13553); } -#[bench] fn comparef64_len0013553_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 13553); } -#[bench] fn comparef64_len0013751_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 13751); } -#[bench] fn comparef64_len0013751_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 13751); } -#[bench] fn comparef64_len0014081_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 14081); } -#[bench] fn comparef64_len0014081_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 14081); } -#[bench] fn comparef64_len0014851_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 14851); } -#[bench] fn comparef64_len0014851_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 14851); } -#[bench] fn comparef64_len0015401_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 15401); } -#[bench] fn comparef64_len0015401_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 15401); } -#[bench] fn comparef64_len0015973_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 15973); } -#[bench] fn comparef64_len0015973_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 15973); } -#[bench] fn comparef64_len0016633_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 16633); } -#[bench] fn comparef64_len0016633_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 16633); } -#[bench] fn comparef64_len0018481_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 18481); } -#[bench] fn comparef64_len0018481_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 18481); } -#[bench] fn comparef64_len0019009_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 19009); } -#[bench] fn comparef64_len0019009_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 19009); } -#[bench] fn comparef64_len0019603_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 19603); } -#[bench] fn comparef64_len0019603_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 19603); } -#[bench] fn comparef64_len0019801_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 19801); } -#[bench] fn comparef64_len0019801_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 19801); } -#[bench] fn comparef64_len0021121_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 21121); } -#[bench] fn comparef64_len0021121_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 21121); } -#[bench] fn comparef64_len0022639_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 22639); } -#[bench] fn comparef64_len0022639_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 22639); } -#[bench] fn comparef64_len0023761_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 23761); } -#[bench] fn comparef64_len0023761_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 23761); } -#[bench] fn comparef64_len0025411_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 25411); } -#[bench] fn comparef64_len0025411_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 25411); } -#[bench] fn comparef64_len0025873_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 25873); } -#[bench] fn comparef64_len0025873_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 25873); } -#[bench] fn comparef64_len0026731_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 26731); } -#[bench] fn comparef64_len0026731_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 26731); } -#[bench] fn comparef64_len0026951_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 26951); } -#[bench] fn comparef64_len0026951_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 26951); } -#[bench] fn comparef64_len0028513_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 28513); } -#[bench] fn comparef64_len0028513_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 28513); } -#[bench] fn comparef64_len0029569_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 29569); } -#[bench] fn comparef64_len0029569_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 29569); } -#[bench] fn comparef64_len0030493_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 30493); } -#[bench] fn comparef64_len0030493_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 30493); } -#[bench] fn comparef64_len0030977_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 30977); } -#[bench] fn comparef64_len0030977_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 30977); } -#[bench] fn comparef64_len0032077_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 32077); } -#[bench] fn comparef64_len0032077_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 32077); } -#[bench] fn comparef64_len0032341_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 32341); } -#[bench] fn comparef64_len0032341_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 32341); } -#[bench] fn comparef64_len0034651_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 34651); } -#[bench] fn comparef64_len0034651_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 34651); } -#[bench] fn comparef64_len0034849_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 34849); } -#[bench] fn comparef64_len0034849_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 34849); } -#[bench] fn comparef64_len0035201_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 35201); } -#[bench] fn comparef64_len0035201_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 35201); } -#[bench] fn comparef64_len0037423_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 37423); } -#[bench] fn comparef64_len0037423_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 37423); } -#[bench] fn comparef64_len0038501_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 38501); } -#[bench] fn comparef64_len0038501_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 38501); } -#[bench] fn comparef64_len0047521_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 47521); } -#[bench] fn comparef64_len0047521_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 47521); } -#[bench] fn comparef64_len0047917_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 47917); } -#[bench] fn comparef64_len0047917_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 47917); } -#[bench] fn comparef64_len0050821_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 50821); } -#[bench] fn comparef64_len0050821_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 50821); } -#[bench] fn comparef64_len0055001_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 55001); } -#[bench] fn comparef64_len0055001_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 55001); } -#[bench] fn comparef64_len0055441_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 55441); } -#[bench] fn comparef64_len0055441_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 55441); } -#[bench] fn comparef64_len0055903_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 55903); } -#[bench] fn comparef64_len0055903_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 55903); } -#[bench] fn comparef64_len0057751_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 57751); } -#[bench] fn comparef64_len0057751_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 57751); } -#[bench] fn comparef64_len0063361_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 63361); } -#[bench] fn comparef64_len0063361_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 63361); } -#[bench] fn comparef64_len0064153_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 64153); } -#[bench] fn comparef64_len0064153_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 64153); } -#[bench] fn comparef64_len0066529_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 66529); } -#[bench] fn comparef64_len0066529_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 66529); } -#[bench] fn comparef64_len0068993_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 68993); } -#[bench] fn comparef64_len0068993_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 68993); } -#[bench] fn comparef64_len0069697_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 69697); } -#[bench] fn comparef64_len0069697_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 69697); } -#[bench] fn comparef64_len0076231_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 76231); } -#[bench] fn comparef64_len0076231_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 76231); } -#[bench] fn comparef64_len0077617_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 77617); } -#[bench] fn comparef64_len0077617_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 77617); } -#[bench] fn comparef64_len0079201_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 79201); } -#[bench] fn comparef64_len0079201_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 79201); } -#[bench] fn comparef64_len0079861_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 79861); } -#[bench] fn comparef64_len0079861_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 79861); } -#[bench] fn comparef64_len0080191_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 80191); } -#[bench] fn comparef64_len0080191_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 80191); } -#[bench] fn comparef64_len0084481_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 84481); } -#[bench] fn comparef64_len0084481_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 84481); } -#[bench] fn comparef64_len0084701_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 84701); } -#[bench] fn comparef64_len0084701_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 84701); } -#[bench] fn comparef64_len0087121_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 87121); } -#[bench] fn comparef64_len0087121_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 87121); } -#[bench] fn comparef64_len0088001_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 88001); } -#[bench] fn comparef64_len0088001_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 88001); } -#[bench] fn comparef64_len0089101_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 89101); } -#[bench] fn comparef64_len0089101_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 89101); } -#[bench] fn comparef64_len0092401_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 92401); } -#[bench] fn comparef64_len0092401_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 92401); } -#[bench] fn comparef64_len0097021_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 97021); } -#[bench] fn comparef64_len0097021_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 97021); } -#[bench] fn comparef64_len0098011_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 98011); } -#[bench] fn comparef64_len0098011_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 98011); } -#[bench] fn comparef64_len0098561_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 98561); } -#[bench] fn comparef64_len0098561_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 98561); } -#[bench] fn comparef64_len0099793_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 99793); } -#[bench] fn comparef64_len0099793_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 99793); } +fn comparef64_len0000023_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 23); } +fn comparef64_len0000023_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 23); } +fn comparef64_len0000067_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 67); } +fn comparef64_len0000067_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 67); } +fn comparef64_len0000089_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 89); } +fn comparef64_len0000089_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 89); } +fn comparef64_len0000199_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 199); } +fn comparef64_len0000199_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 199); } +fn comparef64_len0000331_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 331); } +fn comparef64_len0000331_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 331); } +fn comparef64_len0000353_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 353); } +fn comparef64_len0000353_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 353); } +fn comparef64_len0000397_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 397); } +fn comparef64_len0000397_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 397); } +fn comparef64_len0000463_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 463); } +fn comparef64_len0000463_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 463); } +fn comparef64_len0000617_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 617); } +fn comparef64_len0000617_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 617); } +fn comparef64_len0000661_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 661); } +fn comparef64_len0000661_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 661); } +fn comparef64_len0000727_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 727); } +fn comparef64_len0000727_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 727); } +fn comparef64_len0000881_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 881); } +fn comparef64_len0000881_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 881); } +fn comparef64_len0000991_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 991); } +fn comparef64_len0000991_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 991); } +fn comparef64_len0001321_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1321); } +fn comparef64_len0001321_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1321); } +fn comparef64_len0001409_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1409); } +fn comparef64_len0001409_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1409); } +fn comparef64_len0001453_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1453); } +fn comparef64_len0001453_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1453); } +fn comparef64_len0001783_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 1783); } +fn comparef64_len0001783_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 1783); } +fn comparef64_len0002113_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2113); } +fn comparef64_len0002113_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2113); } +fn comparef64_len0002179_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2179); } +fn comparef64_len0002179_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2179); } +fn comparef64_len0002311_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2311); } +fn comparef64_len0002311_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2311); } +fn comparef64_len0002377_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2377); } +fn comparef64_len0002377_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2377); } +fn comparef64_len0002663_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2663); } +fn comparef64_len0002663_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2663); } +fn comparef64_len0002971_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 2971); } +fn comparef64_len0002971_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 2971); } +fn comparef64_len0003169_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3169); } +fn comparef64_len0003169_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3169); } +fn comparef64_len0003301_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3301); } +fn comparef64_len0003301_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3301); } +fn comparef64_len0003389_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3389); } +fn comparef64_len0003389_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3389); } +fn comparef64_len0003631_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3631); } +fn comparef64_len0003631_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3631); } +fn comparef64_len0003697_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3697); } +fn comparef64_len0003697_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3697); } +fn comparef64_len0003851_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 3851); } +fn comparef64_len0003851_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 3851); } +fn comparef64_len0004159_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4159); } +fn comparef64_len0004159_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4159); } +fn comparef64_len0004357_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4357); } +fn comparef64_len0004357_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4357); } +fn comparef64_len0004621_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4621); } +fn comparef64_len0004621_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4621); } +fn comparef64_len0004951_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 4951); } +fn comparef64_len0004951_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 4951); } +fn comparef64_len0005281_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 5281); } +fn comparef64_len0005281_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 5281); } +fn comparef64_len0005347_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 5347); } +fn comparef64_len0005347_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 5347); } +fn comparef64_len0005501_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 5501); } +fn comparef64_len0005501_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 5501); } +fn comparef64_len0006337_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 6337); } +fn comparef64_len0006337_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 6337); } +fn comparef64_len0006469_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 6469); } +fn comparef64_len0006469_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 6469); } +fn comparef64_len0007129_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 7129); } +fn comparef64_len0007129_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 7129); } +fn comparef64_len0007393_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 7393); } +fn comparef64_len0007393_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 7393); } +fn comparef64_len0007547_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 7547); } +fn comparef64_len0007547_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 7547); } +fn comparef64_len0008317_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 8317); } +fn comparef64_len0008317_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 8317); } +fn comparef64_len0008713_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 8713); } +fn comparef64_len0008713_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 8713); } +fn comparef64_len0009241_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 9241); } +fn comparef64_len0009241_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 9241); } +fn comparef64_len0009857_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 9857); } +fn comparef64_len0009857_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 9857); } +fn comparef64_len0009901_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 9901); } +fn comparef64_len0009901_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 9901); } +fn comparef64_len0010781_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 10781); } +fn comparef64_len0010781_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 10781); } +fn comparef64_len0010891_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 10891); } +fn comparef64_len0010891_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 10891); } +fn comparef64_len0011551_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 11551); } +fn comparef64_len0011551_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 11551); } +fn comparef64_len0011617_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 11617); } +fn comparef64_len0011617_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 11617); } +fn comparef64_len0012101_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 12101); } +fn comparef64_len0012101_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 12101); } +fn comparef64_len0013553_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 13553); } +fn comparef64_len0013553_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 13553); } +fn comparef64_len0013751_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 13751); } +fn comparef64_len0013751_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 13751); } +fn comparef64_len0014081_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 14081); } +fn comparef64_len0014081_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 14081); } +fn comparef64_len0014851_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 14851); } +fn comparef64_len0014851_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 14851); } +fn comparef64_len0015401_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 15401); } +fn comparef64_len0015401_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 15401); } +fn comparef64_len0015973_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 15973); } +fn comparef64_len0015973_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 15973); } +fn comparef64_len0016633_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 16633); } +fn comparef64_len0016633_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 16633); } +fn comparef64_len0018481_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 18481); } +fn comparef64_len0018481_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 18481); } +fn comparef64_len0019009_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 19009); } +fn comparef64_len0019009_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 19009); } +fn comparef64_len0019603_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 19603); } +fn comparef64_len0019603_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 19603); } +fn comparef64_len0019801_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 19801); } +fn comparef64_len0019801_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 19801); } +fn comparef64_len0021121_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 21121); } +fn comparef64_len0021121_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 21121); } +fn comparef64_len0022639_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 22639); } +fn comparef64_len0022639_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 22639); } +fn comparef64_len0023761_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 23761); } +fn comparef64_len0023761_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 23761); } +fn comparef64_len0025411_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 25411); } +fn comparef64_len0025411_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 25411); } +fn comparef64_len0025873_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 25873); } +fn comparef64_len0025873_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 25873); } +fn comparef64_len0026731_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 26731); } +fn comparef64_len0026731_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 26731); } +fn comparef64_len0026951_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 26951); } +fn comparef64_len0026951_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 26951); } +fn comparef64_len0028513_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 28513); } +fn comparef64_len0028513_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 28513); } +fn comparef64_len0029569_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 29569); } +fn comparef64_len0029569_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 29569); } +fn comparef64_len0030493_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 30493); } +fn comparef64_len0030493_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 30493); } +fn comparef64_len0030977_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 30977); } +fn comparef64_len0030977_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 30977); } +fn comparef64_len0032077_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 32077); } +fn comparef64_len0032077_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 32077); } +fn comparef64_len0032341_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 32341); } +fn comparef64_len0032341_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 32341); } +fn comparef64_len0034651_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 34651); } +fn comparef64_len0034651_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 34651); } +fn comparef64_len0034849_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 34849); } +fn comparef64_len0034849_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 34849); } +fn comparef64_len0035201_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 35201); } +fn comparef64_len0035201_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 35201); } +fn comparef64_len0037423_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 37423); } +fn comparef64_len0037423_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 37423); } +fn comparef64_len0038501_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 38501); } +fn comparef64_len0038501_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 38501); } +fn comparef64_len0047521_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 47521); } +fn comparef64_len0047521_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 47521); } +fn comparef64_len0047917_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 47917); } +fn comparef64_len0047917_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 47917); } +fn comparef64_len0050821_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 50821); } +fn comparef64_len0050821_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 50821); } +fn comparef64_len0055001_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 55001); } +fn comparef64_len0055001_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 55001); } +fn comparef64_len0055441_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 55441); } +fn comparef64_len0055441_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 55441); } +fn comparef64_len0055903_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 55903); } +fn comparef64_len0055903_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 55903); } +fn comparef64_len0057751_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 57751); } +fn comparef64_len0057751_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 57751); } +fn comparef64_len0063361_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 63361); } +fn comparef64_len0063361_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 63361); } +fn comparef64_len0064153_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 64153); } +fn comparef64_len0064153_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 64153); } +fn comparef64_len0066529_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 66529); } +fn comparef64_len0066529_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 66529); } +fn comparef64_len0068993_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 68993); } +fn comparef64_len0068993_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 68993); } +fn comparef64_len0069697_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 69697); } +fn comparef64_len0069697_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 69697); } +fn comparef64_len0076231_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 76231); } +fn comparef64_len0076231_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 76231); } +fn comparef64_len0077617_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 77617); } +fn comparef64_len0077617_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 77617); } +fn comparef64_len0079201_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 79201); } +fn comparef64_len0079201_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 79201); } +fn comparef64_len0079861_11p03_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 79861); } +fn comparef64_len0079861_11p03_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 79861); } +fn comparef64_len0080191_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 80191); } +fn comparef64_len0080191_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 80191); } +fn comparef64_len0084481_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 84481); } +fn comparef64_len0084481_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 84481); } +fn comparef64_len0084701_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 84701); } +fn comparef64_len0084701_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 84701); } +fn comparef64_len0087121_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 87121); } +fn comparef64_len0087121_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 87121); } +fn comparef64_len0088001_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 88001); } +fn comparef64_len0088001_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 88001); } +fn comparef64_len0089101_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 89101); } +fn comparef64_len0089101_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 89101); } +fn comparef64_len0092401_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 92401); } +fn comparef64_len0092401_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 92401); } +fn comparef64_len0097021_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 97021); } +fn comparef64_len0097021_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 97021); } +fn comparef64_len0098011_11p02_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 98011); } +fn comparef64_len0098011_11p02_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 98011); } +fn comparef64_len0098561_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 98561); } +fn comparef64_len0098561_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 98561); } +fn comparef64_len0099793_11p01_bluesteins(b: &mut Bencher) { bench_planned_bluesteins_f64(b, 99793); } +fn comparef64_len0099793_11p01_raders(b: &mut Bencher) { bench_planned_raders_f64(b, 99793); } */ + +fn criterion_benchmark(c: &mut Criterion) { + let _ = c; +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/config.rs b/benches/config.rs new file mode 100644 index 00000000..fa3aab5f --- /dev/null +++ b/benches/config.rs @@ -0,0 +1,24 @@ +use criterion::Criterion; +use std::time::Duration; + +/// Keep each benchmark close to libtest's fast feedback time while still +/// giving Criterion distinct warm-up and measurement phases. +pub fn fast() -> Criterion { + Criterion::default() + .warm_up_time(Duration::from_millis(100)) + .measurement_time(Duration::from_millis(100)) + .sample_size(10) + .without_plots() +} + +#[allow(unused_macros)] +macro_rules! register_benchmarks { + ($criterion:expr, $($benchmark:ident),* $(,)?) => { + $( + $criterion.bench_function(stringify!($benchmark), $benchmark); + )* + }; +} + +#[allow(unused_imports)] +pub(crate) use register_benchmarks; From 26dfc4858a0c58786104dae0cc8ce342939e37cf Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sat, 12 Sep 2026 16:12:11 -0400 Subject: [PATCH 02/17] Upgrading rand --- Cargo.toml | 4 ++-- src/avx/avx_bluesteins.rs | 2 +- src/avx/avx_raders.rs | 2 +- src/test_utils.rs | 4 ++-- tests/accuracy.rs | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e127b843..9e0a1983 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,8 +42,8 @@ transpose = "0.2" primal-check = "0.3.3" [dev-dependencies] -criterion = { version = "0.5", default-features = false, features = ["cargo_bench_support", "rayon"] } -rand = "0.8" +criterion = "0.5" +rand = "0.9" getrandom = {version = "^0.2", features = ["js"]} wasm-bindgen-test = "^0.3.36" diff --git a/src/avx/avx_bluesteins.rs b/src/avx/avx_bluesteins.rs index 28430b3c..48f7f058 100644 --- a/src/avx/avx_bluesteins.rs +++ b/src/avx/avx_bluesteins.rs @@ -379,7 +379,7 @@ impl BluesteinsAvx { #[cfg(test)] mod unit_tests { use num_traits::Float; - use rand::distributions::uniform::SampleUniform; + use rand::distr::uniform::SampleUniform; use super::*; use crate::algorithm::Dft; diff --git a/src/avx/avx_raders.rs b/src/avx/avx_raders.rs index b5ebd6af..1187afda 100644 --- a/src/avx/avx_raders.rs +++ b/src/avx/avx_raders.rs @@ -546,7 +546,7 @@ boilerplate_avx_fft!( #[cfg(test)] mod unit_tests { use num_traits::Float; - use rand::distributions::uniform::SampleUniform; + use rand::distr::uniform::SampleUniform; use super::*; use crate::algorithm::Dft; diff --git a/src/test_utils.rs b/src/test_utils.rs index d859d884..d214f10d 100644 --- a/src/test_utils.rs +++ b/src/test_utils.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use num_complex::Complex; use num_traits::{Float, One, Zero}; -use rand::distributions::{uniform::SampleUniform, Distribution, Uniform}; +use rand::distr::{uniform::SampleUniform, Distribution, Uniform}; use rand::{rngs::StdRng, SeedableRng}; use crate::algorithm::butterflies::{ @@ -22,7 +22,7 @@ const RNG_SEED: [u8; 32] = [ pub fn random_signal(length: usize) -> Vec> { let mut sig = Vec::with_capacity(length); - let normal_dist: Uniform = Uniform::new(T::zero(), T::from_f32(10.0).unwrap()); + let normal_dist: Uniform = Uniform::new(T::zero(), T::from_f32(10.0).unwrap()).unwrap(); let mut rng: StdRng = SeedableRng::from_seed(RNG_SEED); for _ in 0..length { sig.push(Complex { diff --git a/tests/accuracy.rs b/tests/accuracy.rs index a45490e9..8fcc2f40 100644 --- a/tests/accuracy.rs +++ b/tests/accuracy.rs @@ -14,7 +14,7 @@ use rustfft::{ }; use rustfft::{num_traits::Zero, FftDirection}; -use rand::distributions::{uniform::SampleUniform, Distribution, Uniform}; +use rand::distr::{uniform::SampleUniform, Distribution, Uniform}; use rand::{rngs::StdRng, SeedableRng}; use wasm_bindgen_test::wasm_bindgen_test; @@ -83,7 +83,7 @@ fn fft_matches_control(control: Arc>, input: &[Com fn random_signal(length: usize) -> Vec> { let mut sig = Vec::with_capacity(length); - let dist: Uniform = Uniform::new(T::zero(), T::from_f64(10.0).unwrap()); + let dist: Uniform = Uniform::new(T::zero(), T::from_f64(10.0).unwrap()).unwrap(); let mut rng: StdRng = SeedableRng::from_seed(RNG_SEED); for _ in 0..length { sig.push(Complex { From 8f610cb7a36b535f4bae903d500aa37eba7f29f1 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sat, 12 Sep 2026 18:34:19 -0400 Subject: [PATCH 03/17] Pinning dependencies for 1.77 --- Cargo.toml | 7 ++++++- benches/bench_check_neon_2to1024.rs | 2 -- benches/bench_check_scalar_2to1024.rs | 2 -- benches/bench_check_sse_2to1024.rs | 2 -- benches/bench_compare_scalar_neon.rs | 2 -- benches/bench_compare_scalar_sse_avx.rs | 2 -- benches/bench_compare_scalar_wasm_simd.rs | 2 -- benches/bench_rustfft.rs | 1 - benches/bench_rustfft_neon.rs | 2 -- benches/bench_rustfft_scalar.rs | 1 - benches/bench_rustfft_sse.rs | 2 -- benches/bench_rustfft_wasm_simd.rs | 2 -- benches/compare_3n2m_strategies.rs | 1 - 13 files changed, 6 insertions(+), 22 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9e0a1983..002c9157 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,11 +42,16 @@ transpose = "0.2" primal-check = "0.3.3" [dev-dependencies] -criterion = "0.5" +criterion = { version = "0.5", default-features = false } + rand = "0.9" getrandom = {version = "^0.2", features = ["js"]} wasm-bindgen-test = "^0.3.36" +# These are in the dependency tree of criterion. These need to be pinned for the MSRV tests +clap = { version = "=4.5.32", default-features = false, features = ["std"] } +half = { version = "=2.4.1", default-features = false } + [[bench]] name = "bench_check_neon_2to1024" harness = false diff --git a/benches/bench_check_neon_2to1024.rs b/benches/bench_check_neon_2to1024.rs index 2c1e572f..926e95f0 100644 --- a/benches/bench_check_neon_2to1024.rs +++ b/benches/bench_check_neon_2to1024.rs @@ -1,5 +1,3 @@ -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/bench_check_scalar_2to1024.rs b/benches/bench_check_scalar_2to1024.rs index bffe9002..4c280e66 100644 --- a/benches/bench_check_scalar_2to1024.rs +++ b/benches/bench_check_scalar_2to1024.rs @@ -1,5 +1,3 @@ -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::{Fft, FftDirection}; diff --git a/benches/bench_check_sse_2to1024.rs b/benches/bench_check_sse_2to1024.rs index 246ac10e..5ac565ee 100644 --- a/benches/bench_check_sse_2to1024.rs +++ b/benches/bench_check_sse_2to1024.rs @@ -1,5 +1,3 @@ -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/bench_compare_scalar_neon.rs b/benches/bench_compare_scalar_neon.rs index 7f01ab7f..427aa4ee 100644 --- a/benches/bench_compare_scalar_neon.rs +++ b/benches/bench_compare_scalar_neon.rs @@ -1,5 +1,3 @@ -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/bench_compare_scalar_sse_avx.rs b/benches/bench_compare_scalar_sse_avx.rs index 938edc5f..c8e63536 100644 --- a/benches/bench_compare_scalar_sse_avx.rs +++ b/benches/bench_compare_scalar_sse_avx.rs @@ -1,5 +1,3 @@ -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/bench_compare_scalar_wasm_simd.rs b/benches/bench_compare_scalar_wasm_simd.rs index 901360bd..5bc8685f 100644 --- a/benches/bench_compare_scalar_wasm_simd.rs +++ b/benches/bench_compare_scalar_wasm_simd.rs @@ -28,8 +28,6 @@ /// /// For more information, refer to [Criterion's user guide](https://github.com/bheisler/criterion.rs/blob/dc2b06cd31f7aa34cff6a83a00598e0523186dad/book/src/user_guide/wasi.md) /// which should be mostly applicable to our use case. -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/bench_rustfft.rs b/benches/bench_rustfft.rs index 5775bcfc..9a85d0a1 100644 --- a/benches/bench_rustfft.rs +++ b/benches/bench_rustfft.rs @@ -1,6 +1,5 @@ #![allow(bare_trait_objects)] #![allow(non_snake_case)] -extern crate rustfft; use std::sync::Arc; mod config; diff --git a/benches/bench_rustfft_neon.rs b/benches/bench_rustfft_neon.rs index 7743a1ed..3df7733c 100644 --- a/benches/bench_rustfft_neon.rs +++ b/benches/bench_rustfft_neon.rs @@ -1,5 +1,3 @@ -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/bench_rustfft_scalar.rs b/benches/bench_rustfft_scalar.rs index 0a787523..8cdd76d4 100644 --- a/benches/bench_rustfft_scalar.rs +++ b/benches/bench_rustfft_scalar.rs @@ -1,6 +1,5 @@ #![allow(bare_trait_objects)] #![allow(non_snake_case)] -extern crate rustfft; use rustfft::algorithm::butterflies::*; use rustfft::algorithm::*; diff --git a/benches/bench_rustfft_sse.rs b/benches/bench_rustfft_sse.rs index 223aae15..88bfb875 100644 --- a/benches/bench_rustfft_sse.rs +++ b/benches/bench_rustfft_sse.rs @@ -1,5 +1,3 @@ -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/bench_rustfft_wasm_simd.rs b/benches/bench_rustfft_wasm_simd.rs index c3f0f0be..c5b4749f 100644 --- a/benches/bench_rustfft_wasm_simd.rs +++ b/benches/bench_rustfft_wasm_simd.rs @@ -28,8 +28,6 @@ /// /// For more information, refer to [Criterion's user guide](https://github.com/bheisler/criterion.rs/blob/dc2b06cd31f7aa34cff6a83a00598e0523186dad/book/src/user_guide/wasi.md) /// which should be mostly applicable to our use case. -extern crate rustfft; - use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; use rustfft::Fft; diff --git a/benches/compare_3n2m_strategies.rs b/benches/compare_3n2m_strategies.rs index 6d630012..3777d683 100644 --- a/benches/compare_3n2m_strategies.rs +++ b/benches/compare_3n2m_strategies.rs @@ -1,7 +1,6 @@ #![allow(non_snake_case)] #![allow(unused)] -extern crate rustfft; mod config; use criterion::{criterion_group, criterion_main, Bencher, Criterion}; From 52868a935e54bb0a7aa988a2fc7be15688acfaaf Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sat, 12 Sep 2026 18:46:50 -0400 Subject: [PATCH 04/17] Upgrading getrandom --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 002c9157..e1205759 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,7 +45,7 @@ primal-check = "0.3.3" criterion = { version = "0.5", default-features = false } rand = "0.9" -getrandom = {version = "^0.2", features = ["js"]} +getrandom = {version = "0.3", features = ["wasm_js"]} wasm-bindgen-test = "^0.3.36" # These are in the dependency tree of criterion. These need to be pinned for the MSRV tests From 41d18ab796164c9134611dc0ee37d20a160f1da5 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sat, 12 Sep 2026 18:55:37 -0400 Subject: [PATCH 05/17] Trying to pin getrandom --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index e1205759..baa632c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,7 +45,7 @@ primal-check = "0.3.3" criterion = { version = "0.5", default-features = false } rand = "0.9" -getrandom = {version = "0.3", features = ["wasm_js"]} +getrandom = {version = "=0.3.1", features = ["wasm_js"]} wasm-bindgen-test = "^0.3.36" # These are in the dependency tree of criterion. These need to be pinned for the MSRV tests From fb5401de87f7edf0cb4a54cf77691027800852ef Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sat, 12 Sep 2026 19:02:12 -0400 Subject: [PATCH 06/17] Small formatting update --- benches/bench_check_neon_2to1024.rs | 8 ++------ benches/bench_check_scalar_2to1024.rs | 16 ++++++--------- benches/bench_check_sse_2to1024.rs | 8 ++------ benches/bench_compare_scalar_neon.rs | 16 ++++----------- benches/bench_compare_scalar_sse_avx.rs | 24 ++++++----------------- benches/bench_compare_scalar_wasm_simd.rs | 18 ++++------------- 6 files changed, 24 insertions(+), 66 deletions(-) diff --git a/benches/bench_check_neon_2to1024.rs b/benches/bench_check_neon_2to1024.rs index 926e95f0..7f19adcb 100644 --- a/benches/bench_check_neon_2to1024.rs +++ b/benches/bench_check_neon_2to1024.rs @@ -32,12 +32,8 @@ fn bench_planned_64(b: &mut Bencher, len: usize) { fn criterion_benchmark(c: &mut Criterion) { for len in 2..200 { - c.bench_function(&format!("bench_from2to1024_f32_{len}"), move |b| { - bench_planned_32(b, len) - }); - c.bench_function(&format!("bench_from2to1024_f64_{len}"), move |b| { - bench_planned_64(b, len) - }); + c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| bench_planned_32(b, len) ); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| bench_planned_64(b, len)); } } diff --git a/benches/bench_check_scalar_2to1024.rs b/benches/bench_check_scalar_2to1024.rs index 4c280e66..1fcc09f5 100644 --- a/benches/bench_check_scalar_2to1024.rs +++ b/benches/bench_check_scalar_2to1024.rs @@ -53,12 +53,8 @@ fn bench_radix3_64(b: &mut Bencher, len: usize) { fn criterion_benchmark(c: &mut Criterion) { for len in 2..200 { - c.bench_function(&format!("bench_from2to1024_f32_{len}"), move |b| { - bench_planned_32(b, len) - }); - c.bench_function(&format!("bench_from2to1024_f64_{len}"), move |b| { - bench_planned_64(b, len) - }); + c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| bench_planned_32(b, len)); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| bench_planned_64(b, len)); } const POWERS_OF_THREE: &[usize] = &[ @@ -67,19 +63,19 @@ fn criterion_benchmark(c: &mut Criterion) { for &len in POWERS_OF_THREE { c.bench_function( &format!("bench_power3_planned_scalar_f32_{len:07}"), - move |b| bench_planned_32(b, len), + |b| bench_planned_32(b, len), ); c.bench_function( &format!("bench_power3_planned_scalar_f64_{len:07}"), - move |b| bench_planned_64(b, len), + |b| bench_planned_64(b, len), ); c.bench_function( &format!("bench_power3_radix3_scalar_f32_{len:07}"), - move |b| bench_radix3_32(b, len), + |b| bench_radix3_32(b, len), ); c.bench_function( &format!("bench_power3_radix3_scalar_f64_{len:07}"), - move |b| bench_radix3_64(b, len), + |b| bench_radix3_64(b, len), ); } } diff --git a/benches/bench_check_sse_2to1024.rs b/benches/bench_check_sse_2to1024.rs index 5ac565ee..fdf6c242 100644 --- a/benches/bench_check_sse_2to1024.rs +++ b/benches/bench_check_sse_2to1024.rs @@ -32,12 +32,8 @@ fn bench_planned_64(b: &mut Bencher, len: usize) { fn criterion_benchmark(c: &mut Criterion) { for len in 2..200 { - c.bench_function(&format!("bench_from2to1024_f32_{len}"), move |b| { - bench_planned_32(b, len) - }); - c.bench_function(&format!("bench_from2to1024_f64_{len}"), move |b| { - bench_planned_64(b, len) - }); + c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| bench_planned_32(b, len)); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| bench_planned_64(b, len)); } } diff --git a/benches/bench_compare_scalar_neon.rs b/benches/bench_compare_scalar_neon.rs index 427aa4ee..626537bc 100644 --- a/benches/bench_compare_scalar_neon.rs +++ b/benches/bench_compare_scalar_neon.rs @@ -61,18 +61,10 @@ fn criterion_benchmark(c: &mut Criterion) { ]; for &len in LENGTHS { - c.bench_function(&format!("neoncomparison_{len}_f32_scalar"), move |b| { - bench_scalar_32(b, len) - }); - c.bench_function(&format!("neoncomparison_{len}_f64_scalar"), move |b| { - bench_scalar_64(b, len) - }); - c.bench_function(&format!("neoncomparison_{len}_f32_neon"), move |b| { - bench_neon_32(b, len) - }); - c.bench_function(&format!("neoncomparison_{len}_f64_neon"), move |b| { - bench_neon_64(b, len) - }); + c.bench_function(&format!("neoncomparison_{len}_f32_scalar"), |b| bench_scalar_32(b, len)); + c.bench_function(&format!("neoncomparison_{len}_f64_scalar"), |b| bench_scalar_64(b, len)); + c.bench_function(&format!("neoncomparison_{len}_f32_neon"), |b| bench_neon_32(b, len)); + c.bench_function(&format!("neoncomparison_{len}_f64_neon"), |b| bench_neon_64(b, len)); } } diff --git a/benches/bench_compare_scalar_sse_avx.rs b/benches/bench_compare_scalar_sse_avx.rs index c8e63536..2251b1ba 100644 --- a/benches/bench_compare_scalar_sse_avx.rs +++ b/benches/bench_compare_scalar_sse_avx.rs @@ -85,24 +85,12 @@ fn criterion_benchmark(c: &mut Criterion) { ]; for &len in LENGTHS { - c.bench_function(&format!("comparison_{len}_f32_scalar"), move |b| { - bench_scalar_32(b, len) - }); - c.bench_function(&format!("comparison_{len}_f64_scalar"), move |b| { - bench_scalar_64(b, len) - }); - c.bench_function(&format!("comparison_{len}_f32_sse"), move |b| { - bench_sse_32(b, len) - }); - c.bench_function(&format!("comparison_{len}_f64_sse"), move |b| { - bench_sse_64(b, len) - }); - c.bench_function(&format!("comparison_{len}_f32_avx"), move |b| { - bench_avx_32(b, len) - }); - c.bench_function(&format!("comparison_{len}_f64_avx"), move |b| { - bench_avx_64(b, len) - }); + c.bench_function(&format!("comparison_{len}_f32_scalar"), |b| bench_scalar_32(b, len)); + c.bench_function(&format!("comparison_{len}_f64_scalar"), |b| bench_scalar_64(b, len)); + c.bench_function(&format!("comparison_{len}_f32_sse"), |b| bench_sse_32(b, len)); + c.bench_function(&format!("comparison_{len}_f64_sse"), |b| bench_sse_64(b, len)); + c.bench_function(&format!("comparison_{len}_f32_avx"), |b| bench_avx_32(b, len)); + c.bench_function(&format!("comparison_{len}_f64_avx"), |b| bench_avx_64(b, len)); } } diff --git a/benches/bench_compare_scalar_wasm_simd.rs b/benches/bench_compare_scalar_wasm_simd.rs index 5bc8685f..18da065a 100644 --- a/benches/bench_compare_scalar_wasm_simd.rs +++ b/benches/bench_compare_scalar_wasm_simd.rs @@ -91,20 +91,10 @@ fn criterion_benchmark(c: &mut Criterion) { ]; for &len in LENGTHS { - c.bench_function(&format!("wasmsimdcomparison_{len}_f32_scalar"), move |b| { - bench_scalar_32(b, len) - }); - c.bench_function(&format!("wasmsimdcomparison_{len}_f64_scalar"), move |b| { - bench_scalar_64(b, len) - }); - c.bench_function( - &format!("wasmsimdcomparison_{len}_f32_wasmsimd"), - move |b| bench_wasmsimd_32(b, len), - ); - c.bench_function( - &format!("wasmsimdcomparison_{len}_f64_wasmsimd"), - move |b| bench_wasmsimd_64(b, len), - ); + c.bench_function(&format!("wasmsimdcomparison_{len}_f32_scalar"), |b| bench_scalar_32(b, len)); + c.bench_function(&format!("wasmsimdcomparison_{len}_f64_scalar"), |b| bench_scalar_64(b, len)); + c.bench_function(&format!("wasmsimdcomparison_{len}_f32_wasmsimd"), |b| bench_wasmsimd_32(b, len)); + c.bench_function(&format!("wasmsimdcomparison_{len}_f64_wasmsimd"),|b| bench_wasmsimd_64(b, len)); } } From 38c98e2c05434f0c15ae7c76b2bef1086147a1ba Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sat, 12 Sep 2026 19:07:06 -0400 Subject: [PATCH 07/17] Updating comment --- benches/config.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benches/config.rs b/benches/config.rs index fa3aab5f..148e0b0d 100644 --- a/benches/config.rs +++ b/benches/config.rs @@ -1,8 +1,7 @@ use criterion::Criterion; use std::time::Duration; -/// Keep each benchmark close to libtest's fast feedback time while still -/// giving Criterion distinct warm-up and measurement phases. +/// Config (warm up time, measurement time) for all the benches pub fn fast() -> Criterion { Criterion::default() .warm_up_time(Duration::from_millis(100)) From 6e08c9228bdb4d90aa858dd8fac9a101c5aa64ef Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sun, 13 Sep 2026 14:48:36 -0400 Subject: [PATCH 08/17] Trying to commit lockfile --- .github/workflows/run_test.yml | 2 +- .gitignore | 1 - Cargo.lock | 825 +++++++++++++++++++++++++++++++++ 3 files changed, 826 insertions(+), 2 deletions(-) create mode 100644 Cargo.lock diff --git a/.github/workflows/run_test.yml b/.github/workflows/run_test.yml index 1b6cfe92..3a6c8ae9 100644 --- a/.github/workflows/run_test.yml +++ b/.github/workflows/run_test.yml @@ -161,4 +161,4 @@ jobs: with: version: "latest" - name: Run test suites with wasm-pack - run: wasm-pack test --node --features wasm_simd + run: wasm-pack test --node --features wasm_simd --locked diff --git a/.gitignore b/.gitignore index 449a4d20..f918e681 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /target -/Cargo.lock Tools/gen_simd_butterflies/target *.swp .vscode/ diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..dccded4e --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,825 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "async-trait" +version = "0.1.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" +dependencies = [ + "anstyle", + "clap_lex", +] + +[[package]] +name = "clap_lex" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" + +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools", + "num-traits", + "once_cell", + "oorandom", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "either" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" + +[[package]] +name = "find-msvc-tools" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hermit-abi" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" + +[[package]] +name = "is-terminal" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "minicov" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "oorandom" +version = "11.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primal-check" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08" +dependencies = [ + "num-integer", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "rustfft" +version = "6.4.1" +dependencies = [ + "clap", + "criterion", + "getrandom", + "half", + "num-complex", + "num-integer", + "num-traits", + "primal-check", + "rand", + "strength_reduce", + "transpose", + "wasm-bindgen-test", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "strength_reduce" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "transpose" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" +dependencies = [ + "num-integer", + "strength_reduce", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.5", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45863ef0bef521c12124eb39d9a38513c47db75f22e503c06beacd40afeb35db" +dependencies = [ + "async-trait", + "cast", + "js-sys", + "libm", + "minicov", + "nu-ansi-term", + "num-traits", + "oorandom", + "serde", + "serde_json", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", + "wasm-bindgen-test-shared", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c89dcab8b516b6b603baca9d550b7282d68fcc7f367e3956cff7ebf406a3f12" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "wasm-bindgen-test-shared" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37b4f992cebe528ef34964ae69681ac0fe7080071e7298e46008f9d380302af" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags", +] + +[[package]] +name = "zerocopy" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" From 0ba10d24045a78ae4569d426982d0acdfac102bd Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sun, 13 Sep 2026 15:07:39 -0400 Subject: [PATCH 09/17] Trying to update wasm pipeline --- .github/workflows/run_test.yml | 2 ++ benches/bench_check_neon_2to1024.rs | 8 +++-- benches/bench_check_scalar_2to1024.rs | 36 +++++++++++------------ benches/bench_check_sse_2to1024.rs | 8 +++-- benches/bench_compare_scalar_sse_avx.rs | 24 +++++++++++---- benches/bench_compare_scalar_wasm_simd.rs | 16 +++++++--- 6 files changed, 62 insertions(+), 32 deletions(-) diff --git a/.github/workflows/run_test.yml b/.github/workflows/run_test.yml index 3a6c8ae9..2fb83c99 100644 --- a/.github/workflows/run_test.yml +++ b/.github/workflows/run_test.yml @@ -161,4 +161,6 @@ jobs: with: version: "latest" - name: Run test suites with wasm-pack + env: + RUSTFLAGS: '--cfg getrandom_backend="wasm_js"' run: wasm-pack test --node --features wasm_simd --locked diff --git a/benches/bench_check_neon_2to1024.rs b/benches/bench_check_neon_2to1024.rs index 7f19adcb..369f2405 100644 --- a/benches/bench_check_neon_2to1024.rs +++ b/benches/bench_check_neon_2to1024.rs @@ -32,8 +32,12 @@ fn bench_planned_64(b: &mut Bencher, len: usize) { fn criterion_benchmark(c: &mut Criterion) { for len in 2..200 { - c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| bench_planned_32(b, len) ); - c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| bench_planned_64(b, len)); + c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| { + bench_planned_32(b, len) + }); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| { + bench_planned_64(b, len) + }); } } diff --git a/benches/bench_check_scalar_2to1024.rs b/benches/bench_check_scalar_2to1024.rs index 1fcc09f5..a7a8b1f5 100644 --- a/benches/bench_check_scalar_2to1024.rs +++ b/benches/bench_check_scalar_2to1024.rs @@ -53,30 +53,30 @@ fn bench_radix3_64(b: &mut Bencher, len: usize) { fn criterion_benchmark(c: &mut Criterion) { for len in 2..200 { - c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| bench_planned_32(b, len)); - c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| bench_planned_64(b, len)); + c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| { + bench_planned_32(b, len) + }); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| { + bench_planned_64(b, len) + }); } const POWERS_OF_THREE: &[usize] = &[ 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, ]; for &len in POWERS_OF_THREE { - c.bench_function( - &format!("bench_power3_planned_scalar_f32_{len:07}"), - |b| bench_planned_32(b, len), - ); - c.bench_function( - &format!("bench_power3_planned_scalar_f64_{len:07}"), - |b| bench_planned_64(b, len), - ); - c.bench_function( - &format!("bench_power3_radix3_scalar_f32_{len:07}"), - |b| bench_radix3_32(b, len), - ); - c.bench_function( - &format!("bench_power3_radix3_scalar_f64_{len:07}"), - |b| bench_radix3_64(b, len), - ); + c.bench_function(&format!("bench_power3_planned_scalar_f32_{len:07}"), |b| { + bench_planned_32(b, len) + }); + c.bench_function(&format!("bench_power3_planned_scalar_f64_{len:07}"), |b| { + bench_planned_64(b, len) + }); + c.bench_function(&format!("bench_power3_radix3_scalar_f32_{len:07}"), |b| { + bench_radix3_32(b, len) + }); + c.bench_function(&format!("bench_power3_radix3_scalar_f64_{len:07}"), |b| { + bench_radix3_64(b, len) + }); } } diff --git a/benches/bench_check_sse_2to1024.rs b/benches/bench_check_sse_2to1024.rs index fdf6c242..a4d5df32 100644 --- a/benches/bench_check_sse_2to1024.rs +++ b/benches/bench_check_sse_2to1024.rs @@ -32,8 +32,12 @@ fn bench_planned_64(b: &mut Bencher, len: usize) { fn criterion_benchmark(c: &mut Criterion) { for len in 2..200 { - c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| bench_planned_32(b, len)); - c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| bench_planned_64(b, len)); + c.bench_function(&format!("bench_from2to1024_f32_{len}"), |b| { + bench_planned_32(b, len) + }); + c.bench_function(&format!("bench_from2to1024_f64_{len}"), |b| { + bench_planned_64(b, len) + }); } } diff --git a/benches/bench_compare_scalar_sse_avx.rs b/benches/bench_compare_scalar_sse_avx.rs index 2251b1ba..5ca600d5 100644 --- a/benches/bench_compare_scalar_sse_avx.rs +++ b/benches/bench_compare_scalar_sse_avx.rs @@ -85,12 +85,24 @@ fn criterion_benchmark(c: &mut Criterion) { ]; for &len in LENGTHS { - c.bench_function(&format!("comparison_{len}_f32_scalar"), |b| bench_scalar_32(b, len)); - c.bench_function(&format!("comparison_{len}_f64_scalar"), |b| bench_scalar_64(b, len)); - c.bench_function(&format!("comparison_{len}_f32_sse"), |b| bench_sse_32(b, len)); - c.bench_function(&format!("comparison_{len}_f64_sse"), |b| bench_sse_64(b, len)); - c.bench_function(&format!("comparison_{len}_f32_avx"), |b| bench_avx_32(b, len)); - c.bench_function(&format!("comparison_{len}_f64_avx"), |b| bench_avx_64(b, len)); + c.bench_function(&format!("comparison_{len}_f32_scalar"), |b| { + bench_scalar_32(b, len) + }); + c.bench_function(&format!("comparison_{len}_f64_scalar"), |b| { + bench_scalar_64(b, len) + }); + c.bench_function(&format!("comparison_{len}_f32_sse"), |b| { + bench_sse_32(b, len) + }); + c.bench_function(&format!("comparison_{len}_f64_sse"), |b| { + bench_sse_64(b, len) + }); + c.bench_function(&format!("comparison_{len}_f32_avx"), |b| { + bench_avx_32(b, len) + }); + c.bench_function(&format!("comparison_{len}_f64_avx"), |b| { + bench_avx_64(b, len) + }); } } diff --git a/benches/bench_compare_scalar_wasm_simd.rs b/benches/bench_compare_scalar_wasm_simd.rs index 18da065a..f25eba8f 100644 --- a/benches/bench_compare_scalar_wasm_simd.rs +++ b/benches/bench_compare_scalar_wasm_simd.rs @@ -91,10 +91,18 @@ fn criterion_benchmark(c: &mut Criterion) { ]; for &len in LENGTHS { - c.bench_function(&format!("wasmsimdcomparison_{len}_f32_scalar"), |b| bench_scalar_32(b, len)); - c.bench_function(&format!("wasmsimdcomparison_{len}_f64_scalar"), |b| bench_scalar_64(b, len)); - c.bench_function(&format!("wasmsimdcomparison_{len}_f32_wasmsimd"), |b| bench_wasmsimd_32(b, len)); - c.bench_function(&format!("wasmsimdcomparison_{len}_f64_wasmsimd"),|b| bench_wasmsimd_64(b, len)); + c.bench_function(&format!("wasmsimdcomparison_{len}_f32_scalar"), |b| { + bench_scalar_32(b, len) + }); + c.bench_function(&format!("wasmsimdcomparison_{len}_f64_scalar"), |b| { + bench_scalar_64(b, len) + }); + c.bench_function(&format!("wasmsimdcomparison_{len}_f32_wasmsimd"), |b| { + bench_wasmsimd_32(b, len) + }); + c.bench_function(&format!("wasmsimdcomparison_{len}_f64_wasmsimd"), |b| { + bench_wasmsimd_64(b, len) + }); } } From a878bcf668e5d0ca2935b01475436d2d715f5d9d Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sun, 13 Sep 2026 15:19:04 -0400 Subject: [PATCH 10/17] Removing pins from Cargo.toml after committing Cargo.lock --- Cargo.lock | 2 -- Cargo.toml | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dccded4e..d0e78c83 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -450,10 +450,8 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" name = "rustfft" version = "6.4.1" dependencies = [ - "clap", "criterion", "getrandom", - "half", "num-complex", "num-integer", "num-traits", diff --git a/Cargo.toml b/Cargo.toml index baa632c3..9c5ddf6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,13 +45,9 @@ primal-check = "0.3.3" criterion = { version = "0.5", default-features = false } rand = "0.9" -getrandom = {version = "=0.3.1", features = ["wasm_js"]} +getrandom = {version = "0.3", features = ["wasm_js"]} wasm-bindgen-test = "^0.3.36" -# These are in the dependency tree of criterion. These need to be pinned for the MSRV tests -clap = { version = "=4.5.32", default-features = false, features = ["std"] } -half = { version = "=2.4.1", default-features = false } - [[bench]] name = "bench_check_neon_2to1024" harness = false From 20dfb4e882a1a4346acf7e336de3812b88eecbc9 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sun, 13 Sep 2026 15:24:25 -0400 Subject: [PATCH 11/17] Re-ordering Cargo.toml --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9c5ddf6e..82c40191 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,12 +42,12 @@ transpose = "0.2" primal-check = "0.3.3" [dev-dependencies] -criterion = { version = "0.5", default-features = false } - rand = "0.9" getrandom = {version = "0.3", features = ["wasm_js"]} wasm-bindgen-test = "^0.3.36" +criterion = { version = "0.5", default-features = false } + [[bench]] name = "bench_check_neon_2to1024" harness = false From bcbfe34569153aa921efd3f0c1d7173e7ab73b94 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Sun, 13 Sep 2026 15:40:33 -0400 Subject: [PATCH 12/17] Consolidating rand and getrandom --- .github/workflows/run_test.yml | 2 -- Cargo.lock | 3 --- Cargo.toml | 3 +-- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/run_test.yml b/.github/workflows/run_test.yml index 2fb83c99..3a6c8ae9 100644 --- a/.github/workflows/run_test.yml +++ b/.github/workflows/run_test.yml @@ -161,6 +161,4 @@ jobs: with: version: "latest" - name: Run test suites with wasm-pack - env: - RUSTFLAGS: '--cfg getrandom_backend="wasm_js"' run: wasm-pack test --node --features wasm_simd --locked diff --git a/Cargo.lock b/Cargo.lock index d0e78c83..1dd07d2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,10 +209,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", "windows-targets", ] @@ -451,7 +449,6 @@ name = "rustfft" version = "6.4.1" dependencies = [ "criterion", - "getrandom", "num-complex", "num-integer", "num-traits", diff --git a/Cargo.toml b/Cargo.toml index 82c40191..335b2f3c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,8 +42,7 @@ transpose = "0.2" primal-check = "0.3.3" [dev-dependencies] -rand = "0.9" -getrandom = {version = "0.3", features = ["wasm_js"]} +rand = { version = "0.9", default-features = false, features = ["std", "std_rng"] } wasm-bindgen-test = "^0.3.36" criterion = { version = "0.5", default-features = false } From 9b2bb9733592457f40272ba2e401b75b2257db61 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Thu, 17 Sep 2026 16:53:26 -0400 Subject: [PATCH 13/17] Bumping msrv to 1.80 --- .github/workflows/run_test.yml | 10 +- .gitignore | 1 + Cargo.lock | 820 --------------------------------- Cargo.toml | 4 +- README.md | 4 +- 5 files changed, 10 insertions(+), 829 deletions(-) delete mode 100644 Cargo.lock diff --git a/.github/workflows/run_test.yml b/.github/workflows/run_test.yml index 3a6c8ae9..909bccd3 100644 --- a/.github/workflows/run_test.yml +++ b/.github/workflows/run_test.yml @@ -12,7 +12,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.80 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -72,7 +72,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.80 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -97,7 +97,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.80 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -147,7 +147,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.80 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -161,4 +161,4 @@ jobs: with: version: "latest" - name: Run test suites with wasm-pack - run: wasm-pack test --node --features wasm_simd --locked + run: wasm-pack test --node --features wasm_simd diff --git a/.gitignore b/.gitignore index f918e681..99ad09d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /target +Cargo.lock Tools/gen_simd_butterflies/target *.swp .vscode/ diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 1dd07d2a..00000000 --- a/Cargo.lock +++ /dev/null @@ -1,820 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" -dependencies = [ - "memchr", -] - -[[package]] -name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstyle" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" - -[[package]] -name = "async-trait" -version = "0.1.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.5", -] - -[[package]] -name = "autocfg" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" - -[[package]] -name = "bitflags" -version = "2.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" - -[[package]] -name = "bumpalo" -version = "3.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - -[[package]] -name = "cc" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005ec2760ca554fae18df7a11195552ec576cd665632a881bc011d5bb2fd4d80" -dependencies = [ - "find-msvc-tools", - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "ciborium" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" -dependencies = [ - "ciborium-io", - "ciborium-ll", - "serde", -] - -[[package]] -name = "ciborium-io" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" - -[[package]] -name = "ciborium-ll" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" -dependencies = [ - "ciborium-io", - "half", -] - -[[package]] -name = "clap" -version = "4.5.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" -dependencies = [ - "clap_builder", -] - -[[package]] -name = "clap_builder" -version = "4.5.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" -dependencies = [ - "anstyle", - "clap_lex", -] - -[[package]] -name = "clap_lex" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" - -[[package]] -name = "criterion" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "criterion-plot", - "is-terminal", - "itertools", - "num-traits", - "once_cell", - "oorandom", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" -dependencies = [ - "cast", - "itertools", -] - -[[package]] -name = "crunchy" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" - -[[package]] -name = "either" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" - -[[package]] -name = "find-msvc-tools" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" - -[[package]] -name = "futures-core" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" - -[[package]] -name = "futures-task" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" - -[[package]] -name = "futures-util" -version = "0.3.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "slab", -] - -[[package]] -name = "getrandom" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" -dependencies = [ - "cfg-if", - "libc", - "wasi", - "windows-targets", -] - -[[package]] -name = "half" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" -dependencies = [ - "cfg-if", - "crunchy", -] - -[[package]] -name = "hermit-abi" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" - -[[package]] -name = "is-terminal" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "js-sys" -version = "0.3.105" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" -dependencies = [ - "cfg-if", - "futures-util", - "wasm-bindgen", -] - -[[package]] -name = "libc" -version = "0.2.189" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" - -[[package]] -name = "libm" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" - -[[package]] -name = "memchr" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" - -[[package]] -name = "minicov" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d" -dependencies = [ - "cc", - "walkdir", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "once_cell" -version = "1.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" - -[[package]] -name = "oorandom" -version = "11.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" - -[[package]] -name = "pin-project-lite" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "primal-check" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08" -dependencies = [ - "num-integer", -] - -[[package]] -name = "proc-macro2" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" -dependencies = [ - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom", -] - -[[package]] -name = "regex" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" - -[[package]] -name = "rustfft" -version = "6.4.1" -dependencies = [ - "criterion", - "num-complex", - "num-integer", - "num-traits", - "primal-check", - "rand", - "strength_reduce", - "transpose", - "wasm-bindgen-test", -] - -[[package]] -name = "rustversion" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "serde" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.5", -] - -[[package]] -name = "serde_json" -version = "1.0.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "shlex" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" - -[[package]] -name = "slab" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" - -[[package]] -name = "strength_reduce" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" - -[[package]] -name = "syn" -version = "2.0.119" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "3.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "transpose" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" -dependencies = [ - "num-integer", - "strength_reduce", -] - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.13.3+wasi-0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" -dependencies = [ - "wit-bindgen-rt", -] - -[[package]] -name = "wasm-bindgen" -version = "0.2.128" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.128" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.128" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" -dependencies = [ - "bumpalo", - "proc-macro2", - "quote", - "syn 3.0.5", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.128" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wasm-bindgen-test" -version = "0.3.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45863ef0bef521c12124eb39d9a38513c47db75f22e503c06beacd40afeb35db" -dependencies = [ - "async-trait", - "cast", - "js-sys", - "libm", - "minicov", - "nu-ansi-term", - "num-traits", - "oorandom", - "serde", - "serde_json", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-bindgen-test-macro", - "wasm-bindgen-test-shared", -] - -[[package]] -name = "wasm-bindgen-test-macro" -version = "0.3.78" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c89dcab8b516b6b603baca9d550b7282d68fcc7f367e3956cff7ebf406a3f12" -dependencies = [ - "proc-macro2", - "quote", - "syn 3.0.5", -] - -[[package]] -name = "wasm-bindgen-test-shared" -version = "0.2.128" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37b4f992cebe528ef34964ae69681ac0fe7080071e7298e46008f9d380302af" - -[[package]] -name = "winapi-util" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "wit-bindgen-rt" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" -dependencies = [ - "bitflags", -] - -[[package]] -name = "zerocopy" -version = "0.8.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - -[[package]] -name = "zmij" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 335b2f3c..7bb438f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ name = "rustfft" version = "6.4.1" authors = ["Allen Welkie ", "Elliott Mahler "] edition = "2021" -rust-version = "1.77" +rust-version = "1.80" description = "High-performance FFT library written in pure Rust." documentation = "https://docs.rs/rustfft/" @@ -45,7 +45,7 @@ primal-check = "0.3.3" rand = { version = "0.9", default-features = false, features = ["std", "std_rng"] } wasm-bindgen-test = "^0.3.36" -criterion = { version = "0.5", default-features = false } +criterion = { version = "0.3", default-features = false } [[bench]] name = "bench_check_neon_2to1024" diff --git a/README.md b/README.md index ef283a0f..1d4e8cd6 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![](https://img.shields.io/crates/v/rustfft.svg)](https://crates.io/crates/rustfft) [![](https://img.shields.io/crates/l/rustfft.svg)](https://crates.io/crates/rustfft) [![](https://docs.rs/rustfft/badge.svg)](https://docs.rs/rustfft/) -![minimum rustc 1.61](https://img.shields.io/badge/rustc-1.61+-red.svg) +![minimum rustc 1.80](https://img.shields.io/badge/rustc-1.80+-red.svg) RustFFT is a high-performance, SIMD-accelerated FFT library written in pure Rust. It can compute FFTs of any size, including prime-number sizes, in O(nlogn) time. @@ -75,7 +75,7 @@ This policy has one exception: We currently re-export pre-1.0 versions of the [n ### Supported Rust Version -RustFFT requires rustc 1.61 or newer. Minor releases of RustFFT may upgrade the MSRV(minimum supported Rust version) to a newer version of rustc. +RustFFT requires rustc 1.80 or newer. Minor releases of RustFFT may upgrade the MSRV(minimum supported Rust version) to a newer version of rustc. However, if we need to increase the MSRV, the new Rust version must have been released at least six months ago. ## License From 5e807135cb6f1f1065101f16c7e43f0876804686 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Thu, 17 Sep 2026 16:56:58 -0400 Subject: [PATCH 14/17] Changing duration --- benches/config.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benches/config.rs b/benches/config.rs index 148e0b0d..278ca68b 100644 --- a/benches/config.rs +++ b/benches/config.rs @@ -4,8 +4,8 @@ use std::time::Duration; /// Config (warm up time, measurement time) for all the benches pub fn fast() -> Criterion { Criterion::default() - .warm_up_time(Duration::from_millis(100)) - .measurement_time(Duration::from_millis(100)) + .warm_up_time(Duration::from_millis(300)) + .measurement_time(Duration::from_secs(1)) .sample_size(10) .without_plots() } From 2b951b9dbcb738e4bee264c455fcba17e88c5752 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Thu, 17 Sep 2026 17:06:50 -0400 Subject: [PATCH 15/17] Trying something else for wasi --- Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 7bb438f2..fcd61856 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,6 +47,9 @@ wasm-bindgen-test = "^0.3.36" criterion = { version = "0.3", default-features = false } +[target.'cfg(all(target_arch = "wasm32", target_os = "wasi", target_env = "p2"))'.dev-dependencies] +getrandom = "=0.3.1" + [[bench]] name = "bench_check_neon_2to1024" harness = false From 3935220c1a8958e8f171230c2d30ccaf8e01d77f Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Tue, 22 Sep 2026 09:18:15 -0400 Subject: [PATCH 16/17] Renaming benches that have sizes in name --- benches/{bench_check_neon_2to1024.rs => bench_check_neon.rs} | 0 benches/{bench_check_scalar_2to1024.rs => bench_check_scalar.rs} | 0 benches/{bench_check_sse_2to1024.rs => bench_check_sse.rs} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename benches/{bench_check_neon_2to1024.rs => bench_check_neon.rs} (100%) rename benches/{bench_check_scalar_2to1024.rs => bench_check_scalar.rs} (100%) rename benches/{bench_check_sse_2to1024.rs => bench_check_sse.rs} (100%) diff --git a/benches/bench_check_neon_2to1024.rs b/benches/bench_check_neon.rs similarity index 100% rename from benches/bench_check_neon_2to1024.rs rename to benches/bench_check_neon.rs diff --git a/benches/bench_check_scalar_2to1024.rs b/benches/bench_check_scalar.rs similarity index 100% rename from benches/bench_check_scalar_2to1024.rs rename to benches/bench_check_scalar.rs diff --git a/benches/bench_check_sse_2to1024.rs b/benches/bench_check_sse.rs similarity index 100% rename from benches/bench_check_sse_2to1024.rs rename to benches/bench_check_sse.rs From 8783895759c8403cceebb4ae9e924901b79227e1 Mon Sep 17 00:00:00 2001 From: Michael Ciraci Date: Fri, 25 Sep 2026 09:16:38 -0400 Subject: [PATCH 17/17] Bumping criterion to 0.8 --- .github/workflows/run_test.yml | 8 ++++---- Cargo.toml | 4 ++-- README.md | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/run_test.yml b/.github/workflows/run_test.yml index 49e52c3a..cd8aa344 100644 --- a/.github/workflows/run_test.yml +++ b/.github/workflows/run_test.yml @@ -12,7 +12,7 @@ jobs: - stable - beta - nightly - - 1.80 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -74,7 +74,7 @@ jobs: - stable - beta - nightly - - 1.80 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -99,7 +99,7 @@ jobs: - stable - beta - nightly - - 1.80 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -189,7 +189,7 @@ jobs: - stable - beta - nightly - - 1.80 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 diff --git a/Cargo.toml b/Cargo.toml index 7b6267b1..9a68db9e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ name = "rustfft" version = "6.4.1" authors = ["Allen Welkie ", "Elliott Mahler "] edition = "2021" -rust-version = "1.80" +rust-version = "1.86" description = "High-performance FFT library written in pure Rust." documentation = "https://docs.rs/rustfft/" @@ -49,7 +49,7 @@ primal-check = "0.3.3" rand = { version = "0.9", default-features = false, features = ["std", "std_rng"] } wasm-bindgen-test = "^0.3.36" -criterion = { version = "0.3", default-features = false } +criterion = { version = "0.8", default-features = false } [target.'cfg(all(target_arch = "wasm32", target_os = "wasi", target_env = "p2"))'.dev-dependencies] getrandom = "=0.3.1" diff --git a/README.md b/README.md index 1d4e8cd6..d8d18e97 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![](https://img.shields.io/crates/v/rustfft.svg)](https://crates.io/crates/rustfft) [![](https://img.shields.io/crates/l/rustfft.svg)](https://crates.io/crates/rustfft) [![](https://docs.rs/rustfft/badge.svg)](https://docs.rs/rustfft/) -![minimum rustc 1.80](https://img.shields.io/badge/rustc-1.80+-red.svg) +![minimum rustc 1.86](https://img.shields.io/badge/rustc-1.86+-red.svg) RustFFT is a high-performance, SIMD-accelerated FFT library written in pure Rust. It can compute FFTs of any size, including prime-number sizes, in O(nlogn) time. @@ -75,7 +75,7 @@ This policy has one exception: We currently re-export pre-1.0 versions of the [n ### Supported Rust Version -RustFFT requires rustc 1.80 or newer. Minor releases of RustFFT may upgrade the MSRV(minimum supported Rust version) to a newer version of rustc. +RustFFT requires rustc 1.86 or newer. Minor releases of RustFFT may upgrade the MSRV(minimum supported Rust version) to a newer version of rustc. However, if we need to increase the MSRV, the new Rust version must have been released at least six months ago. ## License