0 Tage Serie
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 + x
return 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).