Automatische SIMD-Vektorisierung mit LLVM Andreas Bolka Automatische Vektorisierung ist ein Optimierungspass in einem Übersetzer der darauf abzielt die in heutigen CPUs weitverbreiteten SIMD Erweiterungen ohne spezielle Anpassungen im Quellcode eines Programmes nutzbar zu machen. Die Verwendung von SIMD Instruktionen erlaubt potentiell hohe Reduktion der Ausführungsgeschwindigkeit, manuelle Vektorisierung von Code ist jedoch zeitaufwändig und erfordert zumeist intime Kenntnisse der Zielarchitektur. Automatische Vektorisierung sucht diese Hindernisse zu überwinden und bietet die Möglichkeit aus weitgehend plattformunabhängigem Code automatisch plattformspezifische Vektorkapazitäten zu nutzen. Die vorgestellte Arbeit implementiert einen automatischen SIMD-Vektorisierungspass für LLVM, eine Open-Source Übersetzerinfrastruktur. Die Transformation operiert auf Zwischenrepräsentationsebene und nutzt die (plattformunabhängigen) Vektorinstruktionen von LLVM. Als Vektorisierungsmethode wird ein abrollendes Verfahren eingesetzt (Krall & Lelait, 2000; Larsen & Amarasinghe, 2000). Messungen anhand synthetischer Programme bestätigen das Potential dieser Transformation bei einfachen, rechenintensiven Schleifen. Die dynamische Intruktionszahl wird auf bis zu 54%, die Ausführungszeit auf bis zu 58% der jeweiligen Werte der unvektorisierten Version reduziert.