AVX-512 Nutzung an Drittsoftware erkennen

simpsonsfan

Captain
Registriert
Feb. 2008
Beiträge
3.261
Hallo zusammen,

ich war mir mal wieder nicht sicher, in welches Unterforum ich das posten soll, also versuche ich es halt mal hier.

Ich habe auf der Arbeit gerade ein System mit Intel Knights Landing (Xeon Phi 7230) zur Verfügung und würde gerne abschätzen, welche Performance dabei mit einem bestimmten CAE/FEM-Programm möglich ist.

Die Sache ist nun, ich bin mir nicht sicher, ob diese Software bereits Instruktionen von AVX-512 nutzt oder ob dort noch Potential vorhanden wäre.
Daher die Frage: Gibt es eine Möglichkeit, zu erkennen, welche Befehlssatzerweiterungen eine als binary ausgelieferte Anwendung nutzt?

Ich stecke selbst eigentlich nicht in der Materie und bin da eher ein bisschen am rumspielen.
Aus einem Intelartikel zur Performancesteigerung durch die Einführung von AVX2 habe ich entnommen, dass man mit der Conditional Numerical Reproducibility durch Setzen der Umgebungsvariable MKL_CBWR auf SSE, AVX oder AVX2 die Auswirkungen der verschiedenen Extenstions auf die Performance testen könne.

Wenn ich den Intel optimized LINPACK benchmark laufen lasse, sehe ich dann auch deutliche Unterschiede je nachdem, ob ich diese Umgebungsvariable auf AVX, AVX2 oder AVX512 (vzw. AUTO) setze.
Wenn ich die FEM-Software auf dem selben Wege ausführe, dann sehe ich bei AVX eine reduzierte Performance, zwischen AVX2 und AUTO jedoch quasi keine Unterschiede.
Die FEM-Software verwendet die Intel MKL 11.2.3 welche ja wohl bereits AVX-512 unterstützen sollte (wobei linpack die MKL 11.3.3 aufruft.)

Heißt das jetzt, dass die FEM-Software eben noch gar kein AVX-512 nutzt und dass durch spätere Einpflegung dessen noch ein Leistungsgewinn zu erwarten ist? Bzw. kann ich irgendwie sehen, welche Instruktionen die Anwendung bei der Ausführung jeweils aufruft?

Für eure Meinung und Tipps hierzu wäre ich euch sehr dankbar.

Viele Grüße,

simpsonsfan.
 
Hey SimpsonsFan,

das ist so ein spezielles Thema. Hierfür sind 95 % der CB-Forum-User (mich eingeschlossen) einfach zu dumm. Falls du eine Office-GPU brauchst, gibt es hier sicher genug Leute, die dir eine GTX1080 empfehlen oder sagen, dass Macs scheiße und Konsolen zum Gaming ungeeignet sind. ;-)

Ich würde einfach den Hersteller der FEM-Software anschreiben und explizit fragen, ob AVX-512 unterstützt wird.
Falls nein, ob das in Zukunft der Fall sein wird.
Software-Hersteller bieten ja nicht umsonst Support und sollten gerade hier Auskunft geben.
 
Disassembler sollte helfen: Die Anwendung einfach in einem Debugger wie dem vom Visual Studio starten, dann die FEM-Berechnungen starten, danach über den Debugger ein paar mal pausieren und schauen was für Instruktionen um den aktuellen Befehl herum auftreten.

Alternativ könnte man es mit Profilern probieren. Ich weiß aber nicht, ob aktuelle Profiler die Anzahl von verschiedenen Instruktionen in einem Programm zählen können.
 
Zuletzt bearbeitet:
Jep, scheint wohl etwas zu speziell für CB zu sein.
Ich bin mir mittlerweile aber ziemlich sicher, dass die von mir angewandte Methode geeignet ist und zeigt, dass dort eben noch Potential besteht bei einer Optimierung auf AVX-512. Zumal der KNL den Großteil seiner Computing Power in FLOPs aus seinen Vector Processing Units zieht und die eben so quasi nur halb ausgenutzt werden.
Mein Chef hat jährliche Meetings mit dem Softwarehersteller und wird das bei seinem nächsten Besuch dort demnächst auch ansprechen, sein Kontaktmann dort ist momentan gerade im Urlaub. Eigentlich war die Unterstützung vorgesehen, aber in dem Build, den wir haben, scheint sie eben entweder nicht drin zu sein, oder es müssen noch andere Optimierungen getroffen werden, um davon zu profitieren.
Ich dachte halt, ich frag mal hier, schaden konnte es ja nicht.

@Nai, werde ich vielleicht mal testen, danke für den Tipp.
 
@ simpsonsfan
Gern geschehen. Ich bin aber auch kein "Profi" was reverse Engineering von Programmen angeht. Deshalb will ich nicht ausschließen, dass es noch elegantere Möglichkeiten gibt soetwas zu tun. Eventuell meldet sich ja VikingGe hier noch zu Wort, der kennt sich ja mit hardwarenaher CPU Programmierung bestens aus. :)
 
Zuletzt bearbeitet:
Aber nicht mit Xeon Phi im Speziellen. :freak:

Disassembler wäre die erste Möglichkeit, die ich probieren würde, aus der kann man aber nicht unbedingt schließen, dass kein AVX-512 genutzt wird, wenn man keine solchen Befehle findet. Falls dein Programm mit dynamisch generiertem Code arbeitet, müsste man schon wirklich eine Programmausführung beobachten.

Kannst ja mal versuchen, mit dem Intel SDE herumspielen, der kann sowas und bietet zumindest ein Flag, um Knights Landing zu emulieren.
 
@ VikingGe
Deshalb auch mein Vorschlag mit dem Debugger. Wenn man das ein paar mal pausiert, sieht man wahrscheinlich diejenigne stellen im Quelltext die Rechenaufwändig sind. Das klappt dann auch bei dynamisch erstellten Code (zumindest für OpenCL habe ich das schon ein paar mal gemacht).
 
Welche Stellen rechenaufwändig sind, weiß ich schon, die Stellen, an denen nämlich die Intel MKL aufgerufen wird. Und um die Performance dort geht es mir auch hauptsächlich.
Ich bin gerade dabei, die Software im Zusammenspiel mit der aktuellen MKL 11.3.3 zu testen und sehe dort bisher auch eine deutliche Performancesteigerung.

Nun sehe ich auch Unterschiede zwischen AVX2 und AVX512 bei der FEM-Software.
Laut MKL Releasenotes wurden nämlich mit jedem Release einzelne Routinen für die 512bit Instruktionen optimiert, ich weiß leider nicht genau, welche MKL-Routinen die FEM-Software nutzt, aber anscheinend waren die eben in der alten MKL noch nicht angepasst.

Da das Dekompilieren natürlich in der Lizenzvereinbarung ausgeschlossen ist (egal ob das nun in DE greift oder nicht), werde ich davon erst mal absehen. Trotzdem danke für euer Interesse.
Ich frage mich nur, warum der Softwarehersteller dann an dieser Stelle noch die alte MKL mit ausliefert...
 
Zurück
Oben