Skip to content

SIMD implementation of argmin and argmax

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE_APACHE
MIT
LICENSE_MIT
Notifications You must be signed in to change notification settings

minimalrust/argmm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NOTICE

The preferred package is now argminmax which is actively maintained and far more feature complete. This repo will be purely experimental from now on. A special thanks to jvdd for building on the idea and taking it to the next step 👏.

Argmm

Argmin/max with SIMD support for u8, i16, u16, i32 and f32 arrays and vectors.

Installing

Add the following to your Cargo.toml

argmm = "0.1.2"

Getting started

You can use the extention trait which will take advantage of SIMD if available

use argmm::ArgMinMax;

fn main() {
    let v = vec![1., 3., -20., 50., -82., 9., -53., 60., 0.];
    let min_index = v.argmin();
    let max_index = v.argmax();
    assert_eq!(min_index, Some(4));
    assert_eq!(max_index, Some(7));
}

Alternatively, the generic function can be used if you require non-SIMD support for other types

use argmm::generic::{simple_argmin, simple_argmax};

fn main() {
    let v = vec![1u64, 3, 20, 50, 82, 9, 53, 60, 0];
    let min_index = simple_argmin(&v);
    let max_index = simple_argmax(&v);
    assert_eq!(min_index, 8);
    assert_eq!(max_index, 4);
}

Benchmarks

Using a MacBook Pro (Retina, 13-inch, Early 2015) Processor 2.7 GHz Dual-Core Intel Core i5 with an array size of 512.

See /benches/results.

Warning

NAN values are not supported.

License

Licensed under either of

About

SIMD implementation of argmin and argmax

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE_APACHE
MIT
LICENSE_MIT

Stars

Watchers

Forks

Packages

No packages published

Languages