Welche Software profitiert von AVX-Unterstützung durch die CPU?

1 Antwort

Jede Software profitiert davon, sofern dem Compiler mitgeteilt wurde, dass er den AVX-Support einer CPU nutzen soll.

Standardmäßig kompilieren aber die meisten Entwickler ihre Software portabel für eine kleinere Schnittmenge an Features älterer CPUs, aber die meisten Bibliotheken machen zur Laufzeit einen Check und führen dann sowieso bei vorhandenen Features speziell optimierte Code-Teile durch. Das gilt vor allem für Spiele-Engines, Verschlüsselungs-Bibliotheken, Video-Encoding, usw. :)

Bei modernen CPUs mit AVX-512 kannst du bei 3.0 GHz locker 20 GFlops heraus holen, und zwar PRO Kern! Die Anzahl der Integeroperationen dürfte noch mal um 50% höher liegen.

In der Programmierung ist Parallelisierung in mehreren Threads auf unterschiedlichen Kernen immer ein Problem, da die Synchronisierung ein extremer Flaschenhals ist, und gerade bei kurzlebigen Codeblöcken wirklich viel vom Performance-Gewinn auffrisst.

Bei AVX gibt es keine Parallelen Programmzweige im herkömmlichen Sinne, sodass eine Synchronisierung unnötig wird und wegfallen kann.

Allerdings gilt Multithreading, bzw. Multiprocessing, generell als "schwierig" und fehleranfällig. Das bringt viele subtile Fehlerquellen mit und erfordert besondere Aufmerksamkeit.

Bei der Entwicklung von Software, die SIMD-Instruktionen (wie z. B. AVX) nutzt, ist das ganze ein ähnliches Problem, nur auf einer etwas anderen Ebene. Deshalb wird AVX fast nie direkt (!) eingesetzt, es sei denn, es handelt sich um sehr rechenintensive Hochleistungsbibliotheken.

Fazit: Bei so ziemlich jeder Software, die irgendetwas mit Grafik, Multimedia, Spielen, Verschlüsselung, Encoding, usw. zu tun hat, kannst du davon ausgehen, dass Teile für AVX optimiert sind, oder zumindest in naher Zukunft für aktuelle CPUs mit AVX-512 angepasst werden. Es lässt sich nämlich nicht jeder Algorithmus optimal auf der GPU der Grafikkarte abbilden.

PS: Neben AVX haben moderne CPUs noch unzählige andere aktuelle Erweiterungen, die jeweils - vernünftig ausgenutzt - locker mal für eine Ver10fachung der Ausführungsgeschwindigkeit bestimmter Algorithmen sorgen. (z. B. AES, usw.)


Rumzajs 
Beitragsersteller
 15.12.2017, 15:37

Super Antwort, vielen Dank.

Das dekt sich zwar nicht mit einer Passage in der neuen c't. Dort steht in dem Artikel "Der optimal PC" auf Seite 67 in der mittleren Spalte: "... Doch auf Desktop-PCs läuft sehr selten Software mit AVX-Code; ..."

Gibt es eine Möglichkeit herauszufinden, ob eine Software AVX nutzt?

1
TeeTier  15.12.2017, 18:13
@Rumzajs

Ja, die gibt es, erfordert aber ein wenig Fachwissen: Du könntest eine ausführbare Datei disassemblieren und dann einfach nach gängigen AVX-Instruktionen greppen. Das ist zwar nur eine einzige Zeile auf der Kommandozeile, aber - wie gesagt - für Einsteiger vermutlich kaum nachvollziehbar. Eine einfachere Möglichkeit fällt mir jetzt spontan nicht ein, sorry!

0