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.