Softwarekonferenz für parallele, nebenläufige
und asynchrone Programmierung und HPC
Heidelberg, Print Media Academy, 6.-8. März 2018

// SIMD-Programmierung für x86 CPUs

Die effiziente Nutzung aktueller x86 CPUs umfasst neben Multitasking und Multithreading spätestens seit der AVX-Befehlssatzerweiterung auch SIMD-Parallelität. Bedeutete SIMD-Programmierung vor Jahren noch Low-level-Intrinsic- bzw. Assembler-Programmierung, stehen gegenwärtig mit OpenMP 4 vereinheitlichte Compiler-Direktiven zur Verfügung, um als Programmierer von den Neuerungen vektorisierender Compiler zu profitieren, ohne plattformspezifischen Code zu schreiben. Für C++ existieren darüber hinaus Bibliotheken, die abstrakte SIMD-Datentypen bereitstellen.

Der Vortrag gibt eine Einführung in das SIMD-Ausführungsmodell und einen vergleichenden Überblick zu aktuellen Programmieransätzen mit Codebeispielen (C/C++ und Fortran) sowie einen Ausblick auf Standardisierungsvorschläge für zukünftige C++-Versionen.

Vorkenntnisse
Keine besonderen Vorkenntnisse nötig.

Lernziele
Es werden Grundkonzepte der SIMD-Programmierung vermittelt. Teilnehmer erhalten einen Überblick über verschiedene Techniken zur Nutzung der SIMD-Ausführungseinheiten aktueller x86-Prozessoren: SIMD Instrinsics, OpenMP-4-SIMD- und C++-Vektorklassen.


// Florian Wende Florian Wende

ist Teil der Arbeitsgruppe "Algorithms for Innovative Architectures" am Zuse-Institut Berlin. Seine Tätigkeiten umfassen hardwarenahe Code-Optimierung sowie Anpassung von Algorithmen zur effizienten Nutzung moderner Parallelprozessoren. Besonderes Augenmerk und seinen individuellen Forschungsschwerpunkt legt er dabei auf Optimierung im Bereich Thread- und SIMD-Parallelität.


// Matthias Noack Matthias Noack

ist in der Gruppe "Algorithms for Innovative Architectures" am Zuse-Institut Berlin tätig. Seine Arbeiten liegen in der Entwicklung wissenschaftlicher Anwendungen für Supercomputer und den dafür benötigten Methoden. Ein thematischer Schwerpunkt dabei ist die Realisierung von Portabilität mittels moderner Programmieransätze über verschiedene Architekturen bei dennoch hoher Effizienz.