Abstract (deu)
Heutige Mikroprozessoren bestehen aus mehreren Kernen, von denen jeder mehr\-ere Additionen, Multiplikationen oder andere Operationen gleichzeitig in einem Taktzyklus ausführen kann. In Shared Memory Architekturen müssen zumindest zwei Arten von Parallelität angewendet werden, um die maximale Leistung des Algorithmus auszunutzen: MIMD (Multiple Instruction Multiple Data), bei dem jeder Kern gleichzeitig verschiedene Operationen an verschiedenen Typen von Eingangsdatenströmen ausführt, und SIMD (Single Instruction Multiple Data), bei dem innerhalb eines Kerns dieselbe Operation an verschiedenen Daten gleichzeitig ausgeführt wird. Zusätzlich bieten moderne Mikroprozessoren eine reichhaltige Speicherhierarchie mit verschiedenen Ebenen der Caches für jedes der Register. Einige dieser Speicher (wie Hauptspeicher, L3-Cache) sind groß, aber langsam und werden von allen Kernen gemeinsam genutzt. Andere (Register, Cache-Zeilen, L1-Cache) sind schnell und ausschließlich einem einzigen, aber kleinen Kern zugeordnet. Nur wenn die Datenzugriffe eine hohe Lokalität haben, können übermäßige Datentransfer zwischen den Elementen der Speicherhierarchie vermieden werden. Algorithmen in der linearen Algebra werden oft durch drei oder mehreren verschachtelte Schleifen definiert. In dieser Arbeit schlagen wir vor, solche Schleifen in einer Reihenfolge zu durchlaufen, die durch eine raumfüllende Kurve, wie z.B. die Hilbert- oder die Morton-Ordnung definiert ist. Die in dieser Arbeit verwendeten Low-Level-Kernel basieren auf Advanced Vector Extensions (AVX), die die Ausnutzung auf mehreren Ebenen der Parallelität in gemeinsam genutzten Speicherumgebungen ermöglichen. Wir wenden unsere raumfüllenden Kurven in verschiedenen Algorithmen an, die von linearer Algebra (Matrix-Multiplikation, Cholesky-Zerlegung, LU-Faktorisierung) oder Clustering (K-means) bis hin zu Datenbankabfragen (d.h. Similarity Join) reichen.