diff --git a/.github/workflows/run_test.yml b/.github/workflows/run_test.yml index 779491fd..cd8aa344 100644 --- a/.github/workflows/run_test.yml +++ b/.github/workflows/run_test.yml @@ -12,7 +12,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -74,7 +74,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -99,7 +99,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 @@ -189,7 +189,7 @@ jobs: - stable - beta - nightly - - 1.77 + - 1.86 steps: - name: Checkout sources uses: actions/checkout@v3 diff --git a/.gitignore b/.gitignore index 449a4d20..99ad09d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ /target -/Cargo.lock +Cargo.lock Tools/gen_simd_butterflies/target *.swp .vscode/ diff --git a/Cargo.toml b/Cargo.toml index 1c050513..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.77" +rust-version = "1.86" description = "High-performance FFT library written in pure Rust." documentation = "https://docs.rs/rustfft/" @@ -46,14 +46,66 @@ transpose = "0.2" primal-check = "0.3.3" [dev-dependencies] -rand = "0.8" -pastey = "0.2" -getrandom = {version = "^0.2", features = ["js"]} +rand = { version = "0.9", default-features = false, features = ["std", "std_rng"] } wasm-bindgen-test = "^0.3.36" +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" + +[[bench]] +name = "bench_check_neon" +harness = false + +[[bench]] +name = "bench_check_scalar" +harness = false + +[[bench]] +name = "bench_check_sse" +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 + # Compares the Neon and FCMA backends against each other. Needs the nightly-only "fcma" feature, # and a CPU implementing ARMv8.3-A: # cargo +nightly bench --features fcma --bench bench_compare_neon_fcma [[bench]] name = "bench_compare_neon_fcma" required-features = ["fcma"] +harness = false diff --git a/README.md b/README.md index ef283a0f..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.61](https://img.shields.io/badge/rustc-1.61+-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.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.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 diff --git a/benches/bench_check_neon.rs b/benches/bench_check_neon.rs new file mode 100644 index 00000000..369f2405 --- /dev/null +++ b/benches/bench_check_neon.rs @@ -0,0 +1,49 @@ +use rustfft::num_complex::Complex; +use rustfft::num_traits::Zero; +use rustfft::Fft; +use std::sync::Arc; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; + +// Make fft using planner +fn bench_planned_32(b: &mut Bencher, len: usize) { + let mut planner = rustfft::FftPlannerNeon::new().unwrap(); + let fft: Arc> = planner.plan_fft_forward(len); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} + +// Make fft using planner +fn bench_planned_64(b: &mut Bencher, len: usize) { + let mut planner = rustfft::FftPlannerNeon::new().unwrap(); + let fft: Arc> = planner.plan_fft_forward(len); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} + +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) + }); + } +} + +criterion_group! { + name = benches; + config = config::fast(); + targets = criterion_benchmark +} +criterion_main!(benches); diff --git a/benches/bench_check_neon_2to1024.rs b/benches/bench_check_neon_2to1024.rs deleted file mode 100644 index bf561050..00000000 --- a/benches/bench_check_neon_2to1024.rs +++ /dev/null @@ -1,168 +0,0 @@ -#![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; - -// Make fft using planner -fn bench_planned_32(b: &mut Bencher, len: usize) { - let mut planner = rustfft::FftPlannerNeon::new().unwrap(); - let fft: Arc> = planner.plan_fft_forward(len); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} - -// Make fft using planner -fn bench_planned_64(b: &mut Bencher, len: usize) { - let mut planner = rustfft::FftPlannerNeon::new().unwrap(); - let fft: Arc> = planner.plan_fft_forward(len); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} - -// 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 }); -*/ diff --git a/benches/bench_check_scalar.rs b/benches/bench_check_scalar.rs new file mode 100644 index 00000000..a7a8b1f5 --- /dev/null +++ b/benches/bench_check_scalar.rs @@ -0,0 +1,88 @@ +use rustfft::num_complex::Complex; +use rustfft::num_traits::Zero; +use rustfft::{Fft, FftDirection}; +use std::sync::Arc; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; + +// Make fft using planner +fn bench_planned_32(b: &mut Bencher, len: usize) { + let mut planner = rustfft::FftPlannerScalar::new(); + let fft: Arc> = planner.plan_fft_forward(len); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} + +// Make fft using planner +fn bench_planned_64(b: &mut Bencher, len: usize) { + let mut planner = rustfft::FftPlannerScalar::new(); + let fft: Arc> = planner.plan_fft_forward(len); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} + +fn bench_radix3_32(b: &mut Bencher, len: usize) { + let fft: Arc> = + Arc::new(rustfft::algorithm::Radix3::new(len, FftDirection::Forward)); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} +fn bench_radix3_64(b: &mut Bencher, len: usize) { + let fft: Arc> = + Arc::new(rustfft::algorithm::Radix3::new(len, FftDirection::Forward)); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} + +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) + }); + } + + 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) + }); + } +} + +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 deleted file mode 100644 index d96f5a7d..00000000 --- a/benches/bench_check_scalar_2to1024.rs +++ /dev/null @@ -1,193 +0,0 @@ -#![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; - -// Make fft using planner -fn bench_planned_32(b: &mut Bencher, len: usize) { - let mut planner = rustfft::FftPlannerScalar::new(); - let fft: Arc> = planner.plan_fft_forward(len); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} - -// Make fft using planner -fn bench_planned_64(b: &mut Bencher, len: usize) { - let mut planner = rustfft::FftPlannerScalar::new(); - let fft: Arc> = planner.plan_fft_forward(len); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} - -// 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)); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} -fn bench_radix3_64(b: &mut Bencher, len: usize) { - let fft: Arc> = - Arc::new(rustfft::algorithm::Radix3::new(len, FftDirection::Forward)); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} - -make_benches!(power3_radix3_scalar, radix3, {0000003, 0000009, 0000027, 0000081, 0000243, 0000729, 0002187, 0006561, 0019683, 0059049, 0177147, 0531441, 1594323, 4782969 }); diff --git a/benches/bench_check_sse.rs b/benches/bench_check_sse.rs new file mode 100644 index 00000000..a4d5df32 --- /dev/null +++ b/benches/bench_check_sse.rs @@ -0,0 +1,49 @@ +use rustfft::num_complex::Complex; +use rustfft::num_traits::Zero; +use rustfft::Fft; +use std::sync::Arc; +mod config; + +use criterion::{criterion_group, criterion_main, Bencher, Criterion}; + +// Make fft using planner +fn bench_planned_32(b: &mut Bencher, len: usize) { + let mut planner = rustfft::FftPlannerSse::new().unwrap(); + let fft: Arc> = planner.plan_fft_forward(len); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} + +// Make fft using planner +fn bench_planned_64(b: &mut Bencher, len: usize) { + let mut planner = rustfft::FftPlannerSse::new().unwrap(); + let fft: Arc> = planner.plan_fft_forward(len); + + let mut buffer: Vec> = vec![Complex::zero(); len]; + let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; + b.iter(|| { + fft.process_with_scratch(&mut buffer, &mut scratch); + }); +} + +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) + }); + } +} + +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 deleted file mode 100644 index 409db16d..00000000 --- a/benches/bench_check_sse_2to1024.rs +++ /dev/null @@ -1,168 +0,0 @@ -#![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; - -// Make fft using planner -fn bench_planned_32(b: &mut Bencher, len: usize) { - let mut planner = rustfft::FftPlannerSse::new().unwrap(); - let fft: Arc> = planner.plan_fft_forward(len); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} - -// Make fft using planner -fn bench_planned_64(b: &mut Bencher, len: usize) { - let mut planner = rustfft::FftPlannerSse::new().unwrap(); - let fft: Arc> = planner.plan_fft_forward(len); - - let mut buffer: Vec> = vec![Complex::zero(); len]; - let mut scratch: Vec> = vec![Complex::zero(); fft.get_inplace_scratch_len()]; - b.iter(|| { - fft.process_with_scratch(&mut buffer, &mut scratch); - }); -} - -// 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 }); -*/ diff --git a/benches/bench_compare_neon_fcma.rs b/benches/bench_compare_neon_fcma.rs index d9a97eba..d428828e 100644 --- a/benches/bench_compare_neon_fcma.rs +++ b/benches/bench_compare_neon_fcma.rs @@ -1,13 +1,10 @@ -#![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 the Neon planner fn bench_neon_32(b: &mut Bencher, len: usize) { @@ -57,41 +54,46 @@ fn bench_fcma_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_neon>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f32_fcma>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_neon>](b: &mut Bencher) { - [](b, $len); - } - - #[bench] - fn [<$name _ $len _f64_fcma>](b: &mut Bencher) { - [](b, $len); - } - )* - } +fn criterion_benchmark(c: &mut Criterion) { + // Powers of two, which go through radix4 and the hand written butterflies + const POWERS_OF_TWO: &[usize] = &[ + 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, + ]; + + // The prime butterfly lengths, some composites built from them, and larger primes that end up + // in Rader's or Bluestein's with a prime butterfly somewhere inside + const PRIME_LENGTHS: &[usize] = &[ + 7, 11, 13, 17, 19, 23, 29, 31, 49, 121, 289, 961, 1000, 1009, 5000, 5003, + ]; + + // Lengths built from the small hand written butterflies other than the powers of two + const OTHER_LENGTHS: &[usize] = &[ + 3, 5, 6, 9, 10, 12, 15, 24, 27, 81, 243, 729, 2187, 6561, 1536, 12288, + ]; + + for &len in POWERS_OF_TWO + .iter() + .chain(PRIME_LENGTHS) + .chain(OTHER_LENGTHS) + { + c.bench_function(&format!("fcmacomparison_{len}_f32_neon"), |b| { + bench_neon_32(b, len) + }); + c.bench_function(&format!("fcmacomparison_{len}_f32_fcma"), |b| { + bench_fcma_32(b, len) + }); + c.bench_function(&format!("fcmacomparison_{len}_f64_neon"), |b| { + bench_neon_64(b, len) + }); + c.bench_function(&format!("fcmacomparison_{len}_f64_fcma"), |b| { + bench_fcma_64(b, len) + }); } } -// Powers of two, which go through radix4 and the hand written butterflies -make_benches!(fcmacomparison, {4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072}); - -// The prime butterfly lengths, some composites built from them, and larger primes that end up in -// Rader's or Bluestein's with a prime butterfly somewhere inside -make_benches!(fcmacomparison, {7, 11, 13, 17, 19, 23, 29, 31, 49, 121, 289, 961, 1000, 1009, 5000, 5003}); - -// Lengths built from the small hand written butterflies other than the powers of two -make_benches!(fcmacomparison, {3, 5, 6, 9, 10, 12, 15, 24, 27, 81, 243, 729, 2187, 6561, 1536, 12288}); +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..626537bc 100644 --- a/benches/bench_compare_scalar_neon.rs +++ b/benches/bench_compare_scalar_neon.rs @@ -1,13 +1,10 @@ -#![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 +54,23 @@ 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"), |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)); } } -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..5ca600d5 100644 --- a/benches/bench_compare_scalar_sse_avx.rs +++ b/benches/bench_compare_scalar_sse_avx.rs @@ -1,13 +1,10 @@ -#![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 +78,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"), |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) + }); } } -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..f25eba8f 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. /// @@ -29,15 +28,13 @@ /// /// 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 +84,31 @@ 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"), |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) + }); } } -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..9a85d0a1 100644 --- a/benches/bench_rustfft.rs +++ b/benches/bench_rustfft.rs @@ -1,11 +1,10 @@ #![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 +54,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 +133,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 +209,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 +228,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 +251,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 +274,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 +300,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 +338,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 +357,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 +377,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 +405,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 +432,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 +466,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 +501,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 +520,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 +555,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..3df7733c 100644 --- a/benches/bench_rustfft_neon.rs +++ b/benches/bench_rustfft_neon.rs @@ -1,12 +1,10 @@ -#![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 +57,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..8cdd76d4 100644 --- a/benches/bench_rustfft_scalar.rs +++ b/benches/bench_rustfft_scalar.rs @@ -1,8 +1,5 @@ #![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 +8,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 +71,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 +170,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 +267,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 +298,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 +355,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 +410,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 +444,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 +549,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 +584,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 +626,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 +668,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 +696,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 +754,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 +802,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..88bfb875 100644 --- a/benches/bench_rustfft_sse.rs +++ b/benches/bench_rustfft_sse.rs @@ -1,12 +1,10 @@ -#![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 +57,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..c5b4749f 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. /// @@ -29,14 +28,13 @@ /// /// 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 +86,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..3777d683 100644 --- a/benches/compare_3n2m_strategies.rs +++ b/benches/compare_3n2m_strategies.rs @@ -1,10 +1,9 @@ -#![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 +163,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 +221,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 +279,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 +319,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 +469,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 +552,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..278ca68b --- /dev/null +++ b/benches/config.rs @@ -0,0 +1,23 @@ +use criterion::Criterion; +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(300)) + .measurement_time(Duration::from_secs(1)) + .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; 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 { diff --git a/tests/fcma_matches_neon.rs b/tests/fcma_matches_neon.rs index d7174114..69d2d410 100644 --- a/tests/fcma_matches_neon.rs +++ b/tests/fcma_matches_neon.rs @@ -8,7 +8,7 @@ #![cfg(all(target_arch = "aarch64", feature = "fcma"))] use num_traits::Float; -use rand::distributions::{uniform::SampleUniform, Distribution, Uniform}; +use rand::distr::{uniform::SampleUniform, Distribution, Uniform}; use rand::{rngs::StdRng, SeedableRng}; use rustfft::num_complex::Complex; use rustfft::num_traits::Zero; @@ -20,7 +20,7 @@ const RNG_SEED: [u8; 32] = [ fn random_signal(length: usize) -> Vec> { let mut sig = Vec::with_capacity(length); - let normal_dist: Uniform = Uniform::new(T::zero(), T::one()); + let normal_dist: Uniform = Uniform::new(T::zero(), T::one()).unwrap(); let mut rng: StdRng = SeedableRng::from_seed(RNG_SEED); for _ in 0..length { sig.push(Complex {