simdnoise 3.1.6

SIMD accelerate noise library with runtime feature detection
Documentation
#[macro_use]
extern crate criterion;
extern crate simdeez;
extern crate simdnoise;
use criterion::Fun;
use criterion::*;
use simdnoise::*;
use std::time::Duration;

fn d4(c: &mut Criterion) {
    let setting = NoiseBuilder::fbm_4d(8, 8, 8, 8).wrap();

    c.bench(
        "fbm4d",
        Benchmark::new("scalar 4d", move |b| {
            b.iter(|| unsafe { scalar::get_4d_noise(&setting) })
        })
        .with_function("sse2 4d", move |b| {
            b.iter(|| unsafe { sse2::get_4d_noise(&setting) })
        })
        .with_function("sse41 4d", move |b| {
            b.iter(|| unsafe { sse41::get_4d_noise(&setting) })
        })
        .with_function("avx2 4d", move |b| {
            b.iter(|| unsafe { avx2::get_4d_noise(&setting) })
        })
        .sample_size(10)
        .warm_up_time(Duration::from_millis(1))
        .measurement_time(Duration::from_secs(5)),
    );
}
fn d3(c: &mut Criterion) {
    let setting = NoiseBuilder::fbm_3d(64, 64, 64).wrap();
    c.bench(
        "fbm3d",
        Benchmark::new("scalar 3d", move |b| {
            b.iter(|| unsafe { scalar::get_3d_noise(&setting) })
        })
        .with_function("sse2 3d", move |b| {
            b.iter(|| unsafe { sse2::get_3d_noise(&setting) })
        })
        .with_function("sse41 3d", move |b| {
            b.iter(|| unsafe { sse41::get_3d_noise(&setting) })
        })
        .with_function("avx2 3d", move |b| {
            b.iter(|| unsafe { avx2::get_3d_noise(&setting) })
        })
        .sample_size(10)
        .warm_up_time(Duration::from_millis(1))
        .measurement_time(Duration::from_secs(5)),
    );
}

fn d2(c: &mut Criterion) {
    let setting = NoiseBuilder::fbm_2d(3840, 2160).wrap();
    c.bench(
        "fbm2d",
        Benchmark::new("scalar 2d", move |b| {
            b.iter(|| unsafe { scalar::get_2d_noise(&setting) })
        })
        .with_function("sse2 2d", move |b| {
            b.iter(|| unsafe { sse2::get_2d_noise(&setting) })
        })
        .with_function("sse41 2d", move |b| {
            b.iter(|| unsafe { sse41::get_2d_noise(&setting) })
        })
        .with_function("avx2 2d", move |b| {
            b.iter(|| unsafe { avx2::get_2d_noise(&setting) })
        })
        .sample_size(10)
        .warm_up_time(Duration::from_millis(1))
        .measurement_time(Duration::from_secs(5)),
    );
}

fn d1(c: &mut Criterion) {
    let setting = NoiseBuilder::fbm_1d(1024).wrap();
    c.bench(
        "fbm1d",
        Benchmark::new("scalar 1d", move |b| {
            b.iter(|| unsafe { scalar::get_1d_noise(&setting) })
        })
        .with_function("sse2 1d", move |b| {
            b.iter(|| unsafe { sse2::get_1d_noise(&setting) })
        })
        .with_function("sse41 1d", move |b| {
            b.iter(|| unsafe { sse41::get_1d_noise(&setting) })
        })
        .with_function("avx2 1d", move |b| {
            b.iter(|| unsafe { avx2::get_1d_noise(&setting) })
        })
        .sample_size(10)
        .warm_up_time(Duration::from_millis(1))
        .measurement_time(Duration::from_secs(5)),
    );
}
fn d2_cell(c: &mut Criterion) {
    let setting = NoiseBuilder::cellular_2d(1024, 1024)
        .with_return_type(CellReturnType::CellValue)
        .wrap();
    c.bench(
        "cellular2d",
        Benchmark::new("scalar 2d", move |b| {
            b.iter(|| unsafe { scalar::get_2d_noise(&setting) })
        })
        .with_function("sse2 2d", move |b| {
            b.iter(|| unsafe { sse2::get_2d_noise(&setting) })
        })
        .with_function("sse41 2d", move |b| {
            b.iter(|| unsafe { sse41::get_2d_noise(&setting) })
        })
        .with_function("avx2 2d", move |b| {
            b.iter(|| unsafe { avx2::get_2d_noise(&setting) })
        })
        .sample_size(10)
        .warm_up_time(Duration::from_millis(1))
        .measurement_time(Duration::from_secs(5)),
    );
}
fn d3_cell(c: &mut Criterion) {
    let setting = NoiseBuilder::cellular_3d(128, 128, 128).wrap();
    c.bench(
        "cellular3d",
        Benchmark::new("scalar 3d", move |b| {
            b.iter(|| unsafe { scalar::get_3d_noise(&setting) })
        })
        .with_function("sse2 3d", move |b| {
            b.iter(|| unsafe { sse2::get_3d_noise(&setting) })
        })
        .with_function("sse41 3d", move |b| {
            b.iter(|| unsafe { sse41::get_3d_noise(&setting) })
        })
        .with_function("avx2 3d", move |b| {
            b.iter(|| unsafe { avx2::get_3d_noise(&setting) })
        })
        .sample_size(10)
        .warm_up_time(Duration::from_millis(1))
        .measurement_time(Duration::from_secs(5)),
    );
}
criterion_group!(benches, d4, d3, d2, d1, d2_cell, d3_cell);
criterion_main!(benches);