LLVM-MCA-Leistungsanalyse: Fallstricke der Vektorisierungsoptimierung
Der Autor stieß bei der Vektorisierung von Code mit ARM NEON auf ein Leistungsproblem. Der ursprüngliche Code verwendete fünf Ladeinstruktionen (5L), während die optimierte Version zwei Ladeinstruktionen und drei Erweiterungsinstruktionen (2L3E) verwendete, um Speicherzugriffe zu reduzieren. Überraschenderweise war die 2L3E-Version langsamer. Die Leistungsanalyse mit LLVM-MCA ergab, dass 2L3E Engpässe in den CPU-Ausführungseinheiten, unausgeglichene Ressourcennutzung und stärkere Instruktionenabhängigkeiten verursachte, was zu einer Leistungsregression führte. Die 5L-Version zeigte aufgrund der ausgewogeneren Ressourcennutzung und unabhängiger Ladeinstruktionen eine bessere Leistung. Dieser Fallbericht verdeutlicht, wie scheinbar sinnvolle Optimierungen zu Leistungseinbußen führen können, wenn CPU-Ressourcenkonflikte und Instruktionenabhängigkeiten nicht berücksichtigt werden. LLVM-MCA erweist sich als wertvolles Werkzeug zur Analyse solcher Probleme.