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

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.

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 Redaktion dankt den Community-Mitgliedern „Ned Flanders“ und „fanatiXalpha“, die als Quelle und Hinweisgeber für diese News mitverantwortlich zeichnen.

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 aufgezeigten.

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 bereits 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.