cpp / expert
Snippet
Hardware-ausgerichtete Strukturen für vektorisierte Verarbeitung
Die Ausrichtung (Alignment) ist entscheidend für die SIMD-Performance. Viele CPU-Befehle erfordern, dass Daten an 16-, 32- oder 64-Byte-Grenzen ausgerichtet sind. Die Verwendung von `alignas` stellt sicher, dass der Compiler die Struktur an einer Speicheradresse platziert, die ein Vielfaches des Wertes ist, um Leistungseinbußen durch nicht ausgerichtete Zugriffe zu vermeiden.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
struct alignas(16) SIMD_Vector {float channels[4];void load_aligned(const float* data) {// Assume hardware-specific intrinsics herefor(int i = 0; i < 4; ++i) channels[i] = data[i];}};static_assert(sizeof(SIMD_Vector) == 16, "Padding detected!");static_assert(alignof(SIMD_Vector) == 16, "Alignment mismatch!");
Erklärung
1
struct alignas(16) SIMD_Vector
Zwingt die Struktur, an einer 16-Byte-Grenze im Speicher zu beginnen.
2
static_assert(alignof(SIMD_Vector) == 16, ...)
Kompilierzeit-Prüfung, ob die Alignment-Beschränkung eingehalten wird.