Dela via


Skala HPC-program

Varning

Den här artikeln refererar till CentOS, en Linux-distribution som närmar sig EOL-status (End Of Life). Överväg att använda och planera i enlighet med detta. Mer information finns i CentOS End Of Life-vägledningen.

Gäller för: ✔️ Virtuella Linux-datorer ✔️ med virtuella Windows-datorer ✔️ – flexibla skalningsuppsättningar ✔️ Enhetliga skalningsuppsättningar

Optimala uppskalnings- och utskalningsprestanda för HPC-program i Azure kräver prestandajustering och optimeringsexperiment för den specifika arbetsbelastningen. Det här avsnittet och de vm-seriespecifika sidorna ger allmän vägledning för skalning av dina program.

Programkonfiguration

Azurehpc-lagringsplatsen innehåller många exempel på:

Optimal skalning av MPI

Följande förslag gäller för optimal programskalningseffektivitet, prestanda och konsekvens:

  • För mindre skalningsjobb (< 256 000 anslutningar) använder du: UCX_TLS=rc,sm

  • För större skalningsjobb (> 256 000 anslutningar) använder du: UCX_TLS=dc,sm

  • Om du vill beräkna antalet anslutningar för ditt MPI-jobb använder du: Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)

Anpassningsbar routning

Med anpassningsbar routning (AR) kan virtuella Azure-datorer köra Identifiering och åtgärd på slutpunkt och HDR InfiniBand automatiskt för att identifiera och undvika nätverksbelastning genom att dynamiskt välja optimala nätverkssökvägar. Därför erbjuder AR förbättrad svarstid och bandbredd i InfiniBand-nätverket, vilket i sin tur ger högre prestanda och skalningseffektivitet. Mer information finns i techcommunity-artikeln.

Processpinning

  • Fäst processer på kärnor med en sekventiell fästmetod (i stället för en autobalanseringsmetod).
  • Bindning av Numa/Core/HwThread är bättre än standardbindning.
  • För parallella hybridprogram (OpenMP+MPI) använder du fyra trådar och en MPI-rangordning per [CCX](översikt över virtuella HB-datorer i HB-serien, inklusive information om CCX)-storlekar på virtuella HB- och HBv2-datorer.
  • För rena MPI-program experimenterar du med mellan en och fyra MPI-rangordningar per CCX för optimal prestanda på HB- och HBv2 VM-storlekar.
  • Vissa program med extrem känslighet för minnesbandbredd kan ha nytta av att använda ett minskat antal kärnor per CCX. För dessa program kan användning av tre eller två kärnor per CCX minska konkurrensen om minnesbandbredd och ge högre verkliga prestanda eller mer konsekvent skalbarhet. I synnerhet kan MPI "Allreduce" dra nytta av den här metoden.
  • För större skalningskörningar rekommenderar vi att du använder UD- eller hybrid-RC+UD-transporter. Många MPI-bibliotek/körningsbibliotek använder dessa transporter internt (till exempel UCX eller MVAPICH2). Kontrollera dina transportkonfigurationer för storskaliga körningar.

Kompilera program


Klicka för att expandera

Kompilering av program med lämpliga optimeringsflaggor ger dock bästa möjliga uppskalningsprestanda på virtuella datorer i HB- och HC-serien.

AMD-optimering av C/C++-kompilator

AOCC-kompilatorsystemet (AMD Optimizeing C/C++ Compiler) erbjuder en hög nivå av avancerade optimeringar, stöd för flera trådar och processorer som omfattar global optimering, vektorisering, interprocedurmässiga analyser, looptransformeringar och kodgenerering. Binärfiler för AOCC-kompilatorer är lämpliga för Linux-system med GNU C-bibliotek (glibc) version 2.17 och senare. Kompilatorsviten består av en C/C++-kompilator (clang), en Fortran-kompilator (FLANG) och en Fortran-klientdel till Clang (Dragon Egg).

Klang

Clang är en C-, C++- och Objective-C-kompilator som hanterar förbearbetning, parsning, optimering, kodgenerering, sammansättning och länkning. Clang stöder -march=znver1 flaggan för att möjliggöra bästa kodgenerering och justering för AMD:s Zen-baserade x86-arkitektur.

FLANG

FLANG-kompilatorn är ett nytt tillägg till AOCC-sviten (tillagd april 2018) och är för närvarande i förhandsversion för utvecklare att ladda ned och testa. Baserat på Fortran 2008 utökar AMD GitHub-versionen av FLANG. FLANG-kompilatorn stöder alla Clang-kompilatoralternativ och andra FLANG-specifika kompilatoralternativ.

DragonEgg

DragonEgg är ett gcc-plugin-program som ersätter GCC:s optimerare och kodgeneratorer från LLVM-projektet. DragonEgg som levereras med AOCC fungerar med gcc-4.8.x, har testats för x86-32/x86-64-mål och har använts på olika Linux-plattformar.

GFortran är den faktiska klientdelen för Fortran-program som ansvarar för förbearbetning, parsning och semantisk analys som genererar GCC GIMPLE intermediate representation (IR). DragonEgg är ett GNU-plugin-program som ansluter till GFortran-kompileringsflödet. Den implementerar GNU-plugin-API:et. Med plugin-arkitekturen blir DragonEgg kompilatordrivrutinen, vilket driver de olika faserna i kompilering. När du har följt instruktionerna för nedladdning och installation kan Dragon Egg anropas med hjälp av:

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-kompilator

PGI Community Edition 17 bekräftas arbeta med AMD EPYC. En PGI-kompilerad version av STREAM ger plattformens fullständiga minnesbandbredd. Den nyare Community Edition 18.10 (nov 2018) bör också fungera bra. Använd det här CLI-kommandot för att kompilera med Intel Compiler:

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

Intel-kompilator

Intel Compiler 18 bekräftas arbeta med AMD EPYC. Använd det här CLI-kommandot för att kompilera med Intel Compiler.

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

GCC-kompilator

För HPC-arbetsbelastningar rekommenderar AMD GCC-kompilatorn 7.3 eller senare. Äldre versioner, till exempel 4.8.5 som ingår i RHEL/CentOS 7.4, rekommenderas inte. GCC 7.3 och senare ger högre prestanda vid HPL-, HPCG- och DGEMM-tester.

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

Nästa steg