Expand description
Simba is a crate defining a set of trait for writing code that can be generic with regard to the
number of lanes of the numeric input value. Those traits are implemented by f32
, u32
, i16
,
bool
as well as SIMD types like f32x4, u32x8, i16x2
, etc.
One example of use-case applied by the nalgebra crate is to define generic methods
like vector normalization that will work for Vector3<f32>
as well as Vector3<f32x4>
.
This makes it easier leverage the power of SIMD Array-of-Struct-of-Array (AoSoA) with less code duplication.
§Cargo features
Two cargo features can be optionally enabled:
- With the
portable_simd
feature enabled, thesimba::simd
module will export several SIMD types likef32x2
,f64x4
,i32i8
,u16i16
, etc. There types are wrappers around the SIMD types from the experimental std::simd implementation. This requires a nightly compiler and might break after updating the compiler nightly version. - With the
wide
feature enabled, thesimba::simd
module will export theWideF32x4
andWideBoolF32x4
types. The types are wrappers around thewide::f32x4
type from the wide crate. This will work with both a stable or nightly compiler.
If none of those features are enabled, simba will still define all the scalar and SIMD traits. However, the SIMD traits won’t be implemented for any SIMD types. Therefore it is recommended to:
- Use the
portable_simd
feature if you want more features, and can afford to use a nightly compiler. - Use the
wide
feature if you only need 4-lanes 32-bits floats, and can’t afford to use a nightly compiler.
Modules§
- Traits implemented by scalar, non-SIMD, types.
- Traits implemented by SIMD types and non-SIMD types.