Ridimensionamento delle applicazioni HPC
Si applica a: ✔️ macchine virtuali Linux ✔️ macchine virtuali Windows ✔️ set di scalabilità flessibili ✔️ set di scalabilità uniformi
Le prestazioni ottimali di ridimensionamento orizzontale verticale delle applicazioni HPC in Azure richiedono esperimenti di messa a punto e ottimizzazione delle prestazioni per il carico di lavoro specifico. Questa sezione e le pagine specifiche per le varie serie di VM offrono indicazioni generali per il ridimensionamento delle applicazioni.
Configurazione dell'applicazione
Il repository azurehpc contiene molti esempi di:
- Configurazione ed esecuzione ottimali delle applicazioni.
- Configurazione di file system e cluster.
- Esercitazioni su come iniziare facilmente con alcuni flussi di lavoro comuni delle applicazioni.
Ridimensionamento ottimale di MPI
I suggerimenti seguenti si applicano per ottimizzare l'efficienza, le prestazioni e la coerenza del ridimensionamento delle applicazioni:
Per i processi di ridimensionamento più piccoli (< 256.000 connessioni) usare:
UCX_TLS=rc,sm
Per i processi di ridimensionamento più grandi (> 256.000 connessioni) usare:
UCX_TLS=dc,sm
Per calcolare il numero di connessioni per il processo MPI, usare:
Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)
Routing adattivo
Il routing adattivo consente alle VM di Azure che eseguono EDR e HDR InfiniBand di rilevare ed evitare automaticamente la congestione della rete selezionando in modo dinamico percorsi di rete ottimali. Di conseguenza, il routing adattivo offre una migliore latenza e larghezza di banda nella rete InfiniBand, che a sua volta determina prestazioni e scalabilità più elevate. Per altre informazioni, vedere questo articolo della TechCommunity.
Aggiunta di processi
- Aggiungere processi ai core usando un approccio sequenziale di aggiunta (anziché un approccio di bilanciamento automatico).
- L'associazione da Numa/Core/HwThread è migliore dell'associazione predefinita.
- Per le applicazioni parallele ibride (OpenMP+MPI), usare quattro thread e un rango MPI per [CCX](panoramica delle VM serie HB, incluse le informazioni su CCX) nelle dimensioni di VM HB e HBv2.
- Per le applicazioni MPI pure, sperimentare tra uno e quattro ranghi MPI per CCX per ottenere prestazioni ottimali nelle dimensioni delle VM HB e HBv2.
- Alcune applicazioni con estrema sensibilità alla larghezza di banda della memoria possono trarre vantaggio dall'uso di un numero ridotto di core per CCX. Per queste applicazioni, l'uso di tre o due core per CCX può ridurre la contesa della larghezza di banda della memoria e produrre prestazioni reali più elevate o una scalabilità più coerente. In particolare, MPI 'Allreduce' può trarre vantaggio da questo approccio.
- Per le esecuzioni su larga scala, è consigliabile usare trasporti UD o RC+UD ibridi. Molte librerie MPI/librerie di runtime usano questi trasporti internamente (ad esempio UCX o MVAPICH2). Controllare le configurazioni del trasporto per le esecuzioni su larga scala.
Compilazione di applicazioni
Fai clic per espandere
Anche se non è necessario, la compilazione di applicazioni con flag di ottimizzazione appropriati offre le migliori prestazioni di aumento delle prestazioni nelle VM serie HB e HC.
AMD Optimizing C/C++ Compiler
Il sistema del compilatore AOCC (AMD Optimizeing C/C++ Compiler) offre un elevato livello di ottimizzazioni avanzate, multithreading e supporto del processore che include ottimizzazione globale, vettorizzazione, analisi inter procedurali, trasformazioni di cicli e generazione di codice. I file binari del compilatore AOCC sono adatti per i sistemi Linux con GNU C Library (glibc) versione 2.17 e successive. La suite di compilatori è costituita da un compilatore C/C++ (clang), un compilatore Fortran (FLANG) e un front-end Fortran per Clang (Dragon Egg).
Clang
Clang è un compilatore C, C++e Objective-C che gestisce la pre-elaborazione, l'analisi, l'ottimizzazione, la generazione del codice, l'assembly e il link.
Clang supporta il flag -march=znver1
per abilitare la generazione e l'ottimizzazione del codice migliori per l'architettura x86 basata su ZEN di AMD.
FLANG
Il compilatore FLANG è una recente aggiunta alla suite AOCC (aggiunta ad aprile 2018) ed è attualmente in versione preliminare disponibile per download e test per gli sviluppatori. Sulla base di Fortran 2008, AMD estende la versione di GitHub di FLANG. Il compilatore FLANG supporta tutte le opzioni del compilatore Clang e varie altre opzioni del compilatore specifiche di FLANG.
DragonEgg
DragonEgg è un plug-in gcc che sostituisce gli ottimizzatori e i generatori di codice di GCC dal progetto LLVM. DragonEgg fornito con AOCC funziona con gcc-4.8.x, è stato testato per destinazioni x86-32/x86-64 ed è stato usato correttamente in varie piattaforme Linux.
GFortran è il front-end effettivo per i programmi Fortran responsabile della pre-elaborazione, dell'analisi e dell'analisi semantica che generano la rappresentazione intermedia GCC GIMPLE. DragonEgg è un plug-in GNU, che si collega al flusso di compilazione GFortran. Implementa l'API del plug-in GNU. Con l'architettura del plug-in, DragonEgg diventa il driver del compilatore, guidando le differenti fasi di compilazione. Dopo aver seguito le istruzioni di download e installazione, Dragon Egg può essere richiamato usando:
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
Compilatore PGI
È confermato il supporto dell'uso di PGI Community Edition 17 con AMD EPYC. Una versione compilata con PGI di STREAM offre una larghezza di banda di memoria completa della piattaforma. Anche la versione più recente Community Edition 18.10 (novembre 2018) dovrebbe funzionare correttamente. Usare questo comando dell'interfaccia della riga di comando per la compilazione con il compilatore Intel:
pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi
Compilatore Intel
È confermato il supporto dell'uso di Intel Compiler 18 con AMD EPYC. Usare questo comando dell'interfaccia della riga di comando per la compilazione con il compilatore Intel.
icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp
Compilatore GCC
Per i carichi di lavoro HPC, AMD consiglia il compilatore GCC 7.3 o versione successiva. Le versioni precedenti, ad esempio 4.8.5 incluse in RHEL 7.4, non sono consigliate. GCC 7.3 e versioni successive offre prestazioni più elevate nei test HPL, HPCG e DGEMM.
gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc
Passaggi successivi
- Testare le conoscenze con un modulo di apprendimento sull'ottimizzazione delle applicazioni HPC in Azure.
- Esaminare la panoramica della serie HBv3 e la panoramica della serie HC.
- Per informazioni sugli annunci più recenti, sugli esempi di carico di lavoro HPC e sui risultati delle prestazioni, vedere i Blog della community tecnica di Calcolo di Azure.
- Altre informazioni su HPC in Azure.