Crate simba

source ·
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, the simba::simd module will export several SIMD types like f32x2, 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, the simba::simd module will export the WideF32x4 and WideBoolF32x4 types. The types are wrappers around the wide::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.