Preskočiť na obsah

Používanie Intel MKL na procesoroch AMD

Intel oneMKL poskytuje optimalizované implementácie BLAS, LAPACK, FFT a ďalších numerických operácií. Na procesoroch AMD však niektoré verzie MKL historicky na základe identifikácie procesora vyberali menej optimalizované implementácie, čo môže výrazne znižovať výkon.

Toto správanie bolo zdokumentované spoločnosťami Intel a AMD, ako aj viacerými HPC centrami. Napríklad optimalizačná príručka AMD pre procesory EPYC opisuje prípady, keď MKL na procesoroch EPYC v predvolenom nastavení nevybrala implementáciu AVX2.

Obchádzanie problému

CPU nody systému Perun používa procesory AMD založené na mikroarchitektúre Zen 5c, preto sa odporúča použiť nasledujúce riešenie, ktoré zabezpečí, že MKL bude používať optimalizované implementácie. K dispozícii je špeciálny modul fakeintel, ktorý je možné načítať, aby MKL získala dojem, že beží na procesore Intel. Tým sa vynúti použitie optimalizovaných implementácií. Je potrebné mať na pamäti, že tento modul obsahuje iba obchádzanie problému a nenahrádza samotnú knižnicu. Preto je potrebné načítať modul fakeintel spolu s požadovaným Intel modulom.

Použitie

Použitie modulu fakeintel je jednoduché:

module load vasp-intel

mpirun -np 4 vasp_std     # VASP je pomalý

module load fakeintel

mpirun -np 4 vasp_std     # VASP je rýchly

module unload fakeintel

mpirun -np 4 vasp_std     # VASP je opäť pomalý

Porovnanie výkonu

Rozdiel vo výkone môže byť výrazný, v konečnom dôsledku však závisí od konkrétnej aplikácie a verzie použitých Intel knižníc. Nasledujúca tabuľka zobrazuje výkon funkcií BLAS/LAPACK na procesore AMD EPYC 9845 (Zen 5c) bez načítaného modulu fakeintel a s jeho načítaním. Testy boli vykonané s použitím Intel MKL vo verzii 2025.2.0.

Funkcia Veľkosť Bez fakeintel
[GFLOP/s]
S fakeintel
[GFLOP/s]
Zrýchlenie [%]
daxpy 256 8.523 12.785 50.01
dgemv 256 23.115 27.536 19.13
dgemm 256 184.617 878.039 375.60
dgetrf 256 6.221 6.453 3.73
dpotrf 256 6.767 0.986 -85.43
dgesv 256 6.179 6.457 4.50
daxpy 512 9.318 20.361 118.51
dgemv 512 18.393 19.197 4.37
dgemm 512 610.988 2101.980 244.03
dgetrf 512 32.146 31.704 -1.37
dpotrf 512 51.615 80.713 56.38
dgesv 512 30.362 31.261 2.96
daxpy 1024 10.780 25.570 137.20
dgemv 1024 18.387 24.084 30.98
dgemm 1024 2228.815 4945.587 121.89
dgetrf 1024 111.525 125.336 12.38
dpotrf 1024 108.575 226.515 108.63
dgesv 1024 105.547 121.019 14.66

Ako vidieť, rozdiel vo výkone môže byť výrazný, najmä pri väčších rozmeroch matíc a pri niektorých funkciách. Napríklad funkcia dgemm dosahuje pri použití modulu fakeintel zrýchlenie viac ako 375 % pre veľkosť 256 a viac ako 244 % pre veľkosť 512. Pri niektorých funkciách však použitie modulu fakeintel vedie k zníženiu výkonu, napríklad pri dpotrf pre veľkosť 256. To ukazuje, že vplyv na výkon sa môže líšiť v závislosti od konkrétnej funkcie a veľkosti matice.

Uvedené merania boli vykonané po zahrievacích behoch na veľkej množine náhodne generovaných matíc, aby sa minimalizoval vplyv inicializácie a nevyužitých vyrovnávacích pamätí. Výsledky preto reprezentujú typické scenáre použitia a sú reprodukovateľné. Rozdiel vo výkone však v konečnom dôsledku závisí od konkrétnej aplikácie a verzie použitých Intel knižníc.

Created by: Marek Štekláč