Lektionen beim Optimieren von Faltungen mit SIMD: Verzweigungsvorhersage und Compiler-Probleme
Der Autor versuchte, Faltungsoperationen mit SIMD-Instruktionen zu optimieren, stieß aber auf eine Performance-Verschlechterung. Die anfängliche Implementierung verwendete SIMD-Loads, FMA-Instruktionen und Schleifenoptimierungstechniken, war aber mehr als doppelt so langsam wie die nicht-vektorisierte Version. Nach dem Debugging wurde das Problem in übermäßigen Verzweigungsinstruktionen gefunden, die zu Fehlern bei der Verzweigungsvorhersage der CPU führten, und in Größenbeschränkungen für Inline-Funktionen des Compilers, die die ordnungsgemäße Verwendung des AVX-Instruction-Sets verhinderten. Schließlich gelang es dem Autor, durch Reduzierung der Verzweigungen, Aufteilung der Schleifen und korrekte Verwendung von Inline-Attributen des Compilers die Leistung auf das erwartete Niveau zu verbessern. Diese Fallstudie veranschaulicht die Komplexität moderner CPU-Architekturen und die Details, die bei der Leistungsoptimierung zu beachten sind.