Intel MKL: Workaround erhöht Leistung auf AMD Ryzen signifikant

Sven Bauduin 581 Kommentare
Intel MKL: Workaround erhöht Leistung auf AMD Ryzen signifikant
Bild: Intel

Die Programmbibliothek Math Kernel Library von Intel gilt für AMD Ryzen schlecht optimiert und notorisch langsam. Dies untermauert ein Workaround des Community-Mitglieds Ned Flanders für das Programm Matlab, das in der Wissenschaft für numerische Berechnungen genutzt wird. Mit dem „Trick“ rechnet AMD Ryzen erheblich schneller.

Workaround erzwingt AVX2 auf AMD Ryzen

Unter dem Titel „How-To force Matlab to use a fast codepath on AMD Ryzen/TR CPUs]How-To force Matlab to use a fast codepath on AMD Ryzen/TR CPUs“ veröffentlichte er im Reddit-Forum als Nedflanders1976 einen Workaround, der die Unterstützung der Befehlssatzerweiterung AVX2 durch die MKL in Matlab, eine Software des Unternehmens MathWorks, erzwingt. Dadurch ergeben sich teils signifikante Leistungssteigerungen unter Verwendung von Zen-, Zen+- und Zen2-CPUs von AMD.

Bis 400 Prozent mehr Leistung in Matlab

Standardmäßig fragt die Intel Math Kernel Library die Vendor-ID-Zeichenfolge des genutzten Prozessors ab. Wenn eine andere Zeichenfolge als „GenuineIntel“, wie beispielsweise „AuthenticAMD“, ausgelesen wird, greift die Bibliothek in einer Art Fallback-Modus auf gewöhnliches SSE zurück, ohne die von der CPU real unterstützten Befehlssatzerweiterungen zu beachten, was einen erheblichen Leistungsnachteil für Prozessoren vom Typ AMD Ryzen mit ihrer vollen SSE4-, AVX- sowie AVX2-Implementierung mit sich bringt.

Der Workaround zwingt Intels Programmbibliothek dazu, unabhängig vom Ergebnis der CPU-Vendor-ID-Abfrage, AVX2 zu verwenden. Mit dem auf diese Art erzwungenem AVX2 erreicht beispielsweise ein AMD Ryzen 5 2600X bis zu 258 Prozent mehr Leistung in Matlab. Ein Reddit User, der den Workaround auf einem Ryzen 7 3700X mit der neueren Zen-2-Architektur testete, berichtet gar von teilweise mehr als 400 Prozent Leistungssteigerung. Breitgefächerte Tests statt Stichproben dürften ein genaueres Bild liefern.

Die Ergebnisse des MKL-Workarounds in Matlab unter Windows und Linux
Die Ergebnisse des MKL-Workarounds in Matlab unter Windows und Linux (Bild: Ned Flanders)

Mehr Leistung per Batchdatei

Die Lösung ist ein simpler vierzeiliger Code in einer Batch-Datei den der Autor ebenfalls im Reddit-Forum veröffentlicht hat. Zudem stellt er ein Benchmark-Skript zur Verfügung, welches die Auswirkungen von AVX2 auf die Leistung von AMD Ryzen hervorhebt.

Die Batchdatei erzwingt AVX2 in Matlab ...
Die Batchdatei erzwingt AVX2 in Matlab ... (Bild: Ned Flanders)
... der Benchmark-Script zeigt die Ergebnisse
... der Benchmark-Script zeigt die Ergebnisse (Bild: Ned Flanders)

Die Redaktion dankt den Community-Mitgliedern „Ned Flanders“ und „fanatiXalpha“, die als Quelle und Hinweisgeber für diese News mitverantwortlich zeichnen.

Update 18.11.2019 20:55 Uhr

Auch NumPy für Python betroffen

Wie sich mittlerweile herausgestellt hat, ist auch NumPy, eine Programmbibliothek für die Programmiersprache Python, von der eingangs geschilderten Problematik betroffen. Intern verwenden sowohl Matlab als auch NumPy die beiden Programmbibliotheken BLAS und LAPACK, die ihrerseits Bestandteil der Math Kernel Library sind, für eine effiziente Berechnung linearer Algebra.

Ein Test von Puget Systems zeigte bereits im August dieses Jahres ähnliche Auffälligkeiten wie die von Ned Flanders in Matlab nachgewiesenen.

Apparently this trick does also some magic to pythons numpy on windows (std conda install that brings the mkl lib in and no way to change to openblas easily). The code shown in the article below took 64s on my Ryzen 3600 with the workaround and 266s without it!

Sammelthread im ComputerBase Forum

Da in Kürze mit Benchmarks und Ergebnissen zu weiteren betroffenen Programmen zu rechnen ist, haben die Forenmitglieder ZeroStrat und erneut Ned Flanders einen Sammelthread dazu ins Leben gerufen. ZeroStrat selbst hat mittlerweile Ergebnisse für einen AMD Ryzen 9 3900X vorlegen können, welche die bisherigen Ergebnisse von Ned Flanders bestätigen. Die beiden rufen die Community dazu auf sich zu beteiligen.

Update 19.11.2019 14:00 Uhr

Workaround liefert Lösung nach 10 Jahren

Wie dem offiziellen englischen Wikipedia-Eintrag der Math Kernel Library zu entnehmen ist, existieren die Leistungseinbußen der Programmbibliothek im Zusammenhang mit einer ganzen Reihe mathematischer Anwendungen wie NumPy, SymPy und eben Matlab bereits seit gut 10 Jahren. Was der Routine unter anderem zu einem wenig schmeichelhaften Spitznamen („verkrüppel AMD“) verholfen hat.

However, as long as the master function detects a non-Intel CPU, it almost always chooses the most basic (and slowest) function to use, regardless of what instruction sets the CPU claims to support. This has netted the system a nickname of "cripple AMD" routine since 2009. As of 2019, MKL, which remains the choice of many pre-compiled Mathematical applications on Windows (such as NumPy, SymPy, and MATLAB), still significantly underperforms on AMD CPUs with equivalent instruction sets.

Wikipedia

Mittlerweile haben auch andere Tech-Magazine wie beispielsweise @LegitReviews den Sachverhalt aufgegriffen, von dem jetzt auch Robert Hallock, Senior Technical Marketing Manager bei AMD, Kenntnis genommen hat. Eine offizielle Stellungnahme eines der Unternehmen steht indes noch aus.