capypad
0 Tage Serie
rust / expert
Snippet

Datenparallelität mit Portable SIMD

Portable SIMD (Single Instruction, Multiple Data) ermöglicht es, Operationen auf mehreren Werten gleichzeitig mittels CPU-Vektorinstruktionen auszuführen. Durch das Packen von vier f32-Werten in ein einzelnes f32x4-Register können Additionen parallel ausgeführt werden, was die Leistung bei numerischen Berechnungen erheblich steigert.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
#![feature(portable_simd)]
use std::simd::f32x4;
 
fn fast_add(a: [f32; 4], b: [f32; 4]) -> [f32; 4] {
let va = f32x4::from_array(a);
let vb = f32x4::from_array(b);
let sum = va + vb; // Executes a single SIMD instruction (e.g., ADDPS)
sum.to_array()
}
Erklärung
1
use std::simd::f32x4;
Importiert einen 128-Bit-Vektortyp, der vier 32-Bit-Floats enthält.
2
va + vb
Der Operator ist überladen, um parallele Hardware-Instruktionen auszulühren.
3
sum.to_array()
Konvertiert den Hardware-Vektor zurück in ein standardmäßiges Rust-Array.