SIMD Acceleration
ad_trait provides first-class support for Single Instruction, Multiple Data (SIMD) acceleration through the f64xn<N> type.
What is SIMD?
SIMD allows a single CPU instruction to operate on multiple pieces of data (usually vectors) at once. This can lead to 4x-8x speedups for arithmetic operations on modern processors.
Using f64xn
The f64xn<N> type implements the AD trait (in SIMDNum mode). It stores $N$ floats and performs element-wise operations using SIMD intrinsics (where available).
Requirements
Currently, f64xn requires the nightly version of Rust to access the portable_simd feature.
Example
#![allow(unused)]
fn main() {
// Requires nightly and #![feature(portable_simd)]
use ad_trait::simd::f64xn;
let a = f64xn::<4>::new([1.0, 2.0, 3.0, 4.0]);
let b = f64xn::<4>::new([5.0, 6.0, 7.0, 8.0]);
let c = a + b; // Computed using a single CPU instruction if possible
}