1 Punkte von GN⁺ 2023-07-07 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Artikel, der Optimierungsmöglichkeiten für in Clang erzeugte C-Code-Schleifen untersucht.
  • Die Schleife erhöht oder verringert Zahlen auf Grundlage der Zeichen in einer Zeichenkette.
  • Der Autor ordnet die Schleife neu an und optimiert auf die Zeichen p und s statt auf den Null-Terminator.
  • Der Autor entfernt bedingte Verzweigungen mithilfe von Arithmetik und bedingten Verschiebungen.
  • Der optimierte Code erzielt im Vergleich zum ursprünglichen Code eine deutliche Beschleunigung um das 6,73-Fache.
  • Der Autor probiert außerdem andere Optimierungstechniken aus, stellt jedoch fest, dass sie den Code verlangsamen.
  • Zum Benchmark-Setup gehören eine AMD Ryzen 5 5625U CPU sowie aktuelle Versionen von Clang und GCC.
  • Das Fazit lautet, dass Handarbeit und Optimierung in Assembler in bestimmten Fällen erhebliche Geschwindigkeitsgewinne bringen können.

1 Kommentare

 
GN⁺ 2023-07-07
Hacker-News-Kommentar
  • Der ursprüngliche Code könnte durch die Verwendung von if-Anweisungen statt einer switch-Anweisung optimiert werden.
  • Eine andere optimierte Version des Codes verwendet branchless sete/cmov-Instruktionen und kann dieselbe Geschwindigkeit wie der optimierte Assemblercode erreichen.
  • Eine vektorisierte Version des Codes könnte unter Verwendung von AVX-512-Instruktionen, falls möglich, noch schneller sein.
  • Andere Prozessoren können je nach Branching unterschiedliche Leistungsmerkmale aufweisen.
  • Die Sprache C wurde ursprünglich dafür entworfen, systemnahe Software leicht plattformübergreifend zu übertragen, und hat dafür einige Funktionen geopfert.