HPC-toepassingen schalen

Let op

In dit artikel wordt verwezen naar CentOS, een Linux-distributie die de status End Of Life (EOL) nadert. Houd rekening met uw gebruik en plan dienovereenkomstig. Zie de Richtlijnen voor het einde van de levensduur van CentOS voor meer informatie.

Van toepassing op: ✔️ Virtuele Linux-machines voor Windows-VM's ✔️ ✔️ Flexibele schaalsets Uniform-schaalsets ✔️

Voor optimale omhoog- en uitschaalprestaties van HPC-toepassingen in Azure zijn prestatie-afstemmings- en optimalisatieexperimenten vereist voor de specifieke workload. Deze sectie en de pagina's van de VM-serie bieden algemene richtlijnen voor het schalen van uw toepassingen.

Installatie van toepassing

De azurehpc-opslagplaats bevat veel voorbeelden van:

MPI optimaal schalen

De volgende suggesties zijn van toepassing op optimale efficiëntie, prestaties en consistentie van toepassingen:

  • Gebruik voor kleinere taken (< 256K-verbindingen): UCX_TLS=rc,sm

  • Gebruik voor grotere schaaltaken (> 256K-verbindingen): UCX_TLS=dc,sm

  • Als u het aantal verbindingen voor uw MPI-taak wilt berekenen, gebruikt u: Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)

Adaptieve routering

Met adaptieve routering (AR) kunnen virtuele Azure-machines (VM's) met EDR en HDR InfiniBand automatisch netwerkcongestie detecteren en voorkomen door dynamisch optimale netwerkpaden te selecteren. Als gevolg hiervan biedt AR verbeterde latentie en bandbreedte op het InfiniBand-netwerk, wat op zijn beurt hogere prestaties en schaalefficiëntie aanstuurt. Zie het TechCommunity-artikel voor meer informatie.

Procespinning

  • Maak processen vast aan kernen met behulp van een sequentiële pinningbenadering (in plaats van een benadering voor automatisch verdelen).
  • Binding door Numa/Core/HwThread is beter dan standaardbinding.
  • Voor hybride parallelle toepassingen (OpenMP+MPI) gebruikt u vier threads en één MPI-rang per [CCX](overzicht van virtuele machines uit de HB-serie, inclusief informatie over CCX's) op HB- en HBv2-VM-grootten.
  • Voor pure MPI-toepassingen experimenteert u met één tot vier MPI-classificaties per CCX voor optimale prestaties op HB- en HBv2-VM-grootten.
  • Sommige toepassingen met extreme gevoeligheid voor geheugenbandbreedte kunnen profiteren van het gebruik van een verminderd aantal kernen per CCX. Voor deze toepassingen kan het gebruik van drie of twee kernen per CCX het conflict tussen geheugenbandbreedte verminderen en hogere werkelijke prestaties of consistentere schaalbaarheid opleveren. Met name MPI 'Allreduce' kan van deze aanpak profiteren.
  • Voor grotere uitvoeringen is het raadzaam om UD- of hybride RC+UD-transporten te gebruiken. Veel MPI-bibliotheken/runtimebibliotheken gebruiken deze transporten intern (zoals UCX of MVAPICH2). Controleer uw transportconfiguraties voor grootschalige uitvoeringen.

Toepassingen compileren


Klik om uit te vouwen

Hoewel dit niet nodig is, biedt het compileren van toepassingen met de juiste optimalisatievlagmen de beste schaalprestaties op VM's uit de HB- en HC-serie.

AMD C/C++-compiler optimaliseren

Het AOCC-compilersysteem (AMD Optimizeing C/C++ Compiler) biedt een hoog niveau van geavanceerde optimalisaties, multithreading en processorondersteuning die wereldwijde optimalisatie, vectorisatie, inter-procedurele analyses, lustransformaties en codegeneratie omvat. Binaire AOCC-compilerbestanden zijn geschikt voor Linux-systemen met GNU C Library (glibc) versie 2.17 en hoger. De compilersuite bestaat uit een C/C++-compiler (clang), een Fortran-compiler (FLANG) en een Fortran-front-end naar Clang (Dragon Egg).

Clang

Clang is een C-, C++- en Objective-C-compiler voorverwerking, parsering, optimalisatie, codegeneratie, assembly en koppelen. Clang ondersteunt de -march=znver1 vlag om het genereren en afstemmen van de beste code voor amd's Zen-architectuur op basis van x86 mogelijk te maken.

LANG

De FLANG-compiler is een recente toevoeging aan de AOCC-suite (toegevoegd april 2018) en is momenteel in voorlopige versie voor ontwikkelaars om te downloaden en te testen. Op basis van Fortran 2008 breidt AMD de GitHub-versie van FLANG uit. De FLANG-compiler ondersteunt alle Clang-compileropties en andere FLANG-specifieke compileropties.

DragonEgg

DragonEgg is een gCC-invoegtoepassing die de optimalisaties en codegeneratoren van GCC vervangt door het LLVM-project. DragonEgg dat wordt geleverd met AOCC werkt met gCC-4.8.x, is getest op x86-32/x86-64 doelen en is met succes gebruikt op verschillende Linux-platforms.

GFortran is de werkelijke front-end voor Fortran-programma's die verantwoordelijk zijn voor preprocessing, parsering en semantische analyse die de GCC GIMPLE tussenrepresentatie (IR) genereert. DragonEgg is een GNU-invoegtoepassing, plugging in GFortran compilatiestroom. Het implementeert de GNU-plugin-API. Met de invoegtoepassingsarchitectuur wordt DragonEgg het compilerstuurprogramma, wat de verschillende fasen van compilatie aansturen. Nadat u de download- en installatie-instructies hebt gevolgd, kan Dragon Egg worden aangeroepen met behulp van:

gfortran [gFortran flags]
   -fplugin=/path/AOCC-1.2-Compiler/AOCC-1.2-
   FortranPlugin/dragonegg.so [plugin optimization flags]
   -c xyz.f90 $ clang -O3 -lgfortran -o xyz xyz.o $./xyz

PGI-compiler

PGI Community Edition 17 wordt bevestigd om te werken met AMD EPYC. Een door PGI gecompileerde versie van STREAM levert volledige geheugenbandbreedte van het platform. De nieuwere Community Edition 18.10 (november 2018) zou eveneens goed moeten werken. Gebruik deze CLI-opdracht om te compileren met de Intel Compiler:

pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi

Intel Compiler

Intel Compiler 18 is bevestigd om te werken met AMD EPYC. Gebruik deze CLI-opdracht om te compileren met de Intel Compiler.

icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp

GCC-compiler

Voor HPC-workloads raadt AMD GCC-compiler 7.3 of hoger aan. Oudere versies, zoals 4.8.5 die zijn opgenomen in RHEL/CentOS 7.4, worden niet aanbevolen. GCC 7.3 en hoger levert hogere prestaties op HPL-, HPCG- en DGEMM-tests.

gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc

Volgende stappen