cpp / expert
Snippet
N-dimensionale Index-Linearisierung für Hochleistungs-Arrays
Experten-Muster für die Verarbeitung mehrdimensionaler Daten in einem einzigen flachen Speicherblock. Die Linearisierung verbessert die Cache-Lokalität und Performance im Vergleich zu verschachtelten Pointern, die Pointer-Chasing verursachen.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
template <typename T, size_t W, size_t H, size_t D>class Tensor {T data[W * H * D];public:T& operator()(size_t x, size_t y, size_t z) {// Index linearization formula: z * (Width * Height) + y * Width + xreturn data[z * (W * H) + y * W + x];}constexpr size_t size() const { return W * H * D; }};
Erklärung
1
T data[W * H * D];
Allokiert einen einzigen zusammenhängenden Speicherblock für alle Dimensionen.
2
data[z * (W * H) + y * W + x]
Berechnet den exakten 1D-Offset aus 3D-Koordinaten (x, y, z).