Partager via


Mise à l’échelle d’applications HPC

S’applique aux : ✔️ Machines virtuelles Linux ✔️ Machines virtuelles Windows ✔️ Groupes identiques flexibles ✔️ Groupes identiques uniformes

Pour bénéficier de performances de scale-out et de montée en puissance optimales pour les applications HPC sur Azure, vous devez régler les performances et effectuer différentes tentatives d’optimisation en fonction d’une charge de travail spécifique. Cette section et les pages spécifiques à la série de machines virtuelles offrent des conseils généraux pour la mise à l’échelle de vos applications.

Configuration des applications

Le référentiel azurehpc contient de nombreux exemples de :

Mise à l’échelle optimale de MPI

Les suggestions suivantes s’appliquent pour une mise à l’échelle optimale de l’efficacité, des performances et de la cohérence :

  • Pour les travaux à plus petite échelle (< 256 000 connexions), utilisez : UCX_TLS=rc,sm

  • Pour les travaux à plus grande échelle (> 256 000 connexions), utilisez : UCX_TLS=dc,sm

  • Pour calculer le nombre de connexions pour votre travail MPI, utilisez : Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)

Routage adaptatif

Le routage adaptatif (AR) permet aux machines virtuelles Azure exécutant EDR et HDR InfiniBand de détecter automatiquement et d’éviter la congestion du réseau en sélectionnant de façon dynamique des chemins d’accès réseau optimaux. Par conséquent, le routage adaptatif permet une latence et une bande passante améliorées sur le réseau InfiniBand, qui à son tour améliore les performances et la mise à l’échelle. Pour plus d’informations, consultez l’article TechCommunity.

Épinglage de processus

  • Le code confidentiel effectue un traitement sur les cœurs à l’aide d’une approche d’épinglage (soit l’inverse d’une approche d’auto-équilibrage).
  • Il est préférable d’opter pour une liaison via Numa/Core/HwThread que pour la liaison par défaut.
  • Pour les applications parallèles hybrides (OpenMP+MPI), utilisez quatre threads et un classement MPI par [CCX](vue d’ensemble des machines virtuelles de la série HB, y compris des informations sur les CCX) sur les tailles de machines virtuelles HB et HBv2.
  • Pour les applications entièrement MPI, essayez d’utiliser entre un et quatre rangs MPI par CCX, pour des performances optimales sur les tailles de machine virtuelle HB et HBv2.
  • Certaines applications extrêmement sensibles à la bande passante peuvent tirer parti de l’utilisation d’un nombre réduit de cœurs par CCX. Pour ces applications, l’utilisation de trois ou deux cœurs par CCI peut permettre de réduire les contentions au niveau de la bande passante de la mémoire et générer dans le monde réel des performances plus élevées ou une évolutivité plus importante. En particulier, MPI Allreduce peut tirer parti de cette approche.
  • Pour des exécutions à plus grande échelle, nous vous recommandons d’utiliser des transports UD, ou des transports hybrides RC+UD. De nombreuses bibliothèques/bibliothèques de runtime MPI utilisent ces transports en interne (comme UCX ou MVAPICH2). Vérifier vos configurations de transport pour les exécutions à grande échelle.

Compilation d’applications


Cliquez pour développer

Bien qu’elle ne soit pas nécessaire, la compilation des applications avec les indicateurs d’optimisation appropriés fournit les meilleures performances de montée en puissance sur des machines virtuelles HB et HC.

Compilateur AOCC (AMD Optimizing C/C++ Compiler)

Le compilateur AOCC (AMD Optimizing C/C++ Compiler) est un système de compilation offrant des optimisations avancées de haut niveau, ainsi que le multithreading et une prise en charge des processeurs incluant l’optimisation globale, la vectorisation, diverses analyses interprocédurales, des transformations de boucle et la génération de code. Les fichiers binaires du compilateur AOCC conviennent pour les systèmes Linux disposant de la bibliothèque C de GNU (glibc) versions 2.17 et plus. La suite du compilateur se compose d’un compilateur C /C++ (clang), d’un compilateur Fortran (FLANG) et d’un serveur frontal Fortran pour Clang (Dragon Egg).

Clang

Clang est un compilateur C, C++ et Objective-C qui gère le prétraitement, l’analyse, l’optimisation, la génération de code, les assemblys et la liaison. Clang prend en charge l’indicateur -march=znver1 pour activer la meilleure génération et le meilleur réglage de code pour l’architecture AMD x86 basée sur Zen.

FLANG

Le compilateur FLANG est un ajout récent à la suite AOCC (au mois d’avril 2018). Il est actuellement en préversion, afin que les développeurs puissent le télécharger et le tester. Basée sur Fortran 2008, l’architecture AMD étend la version GitHub de FLANG. Le compilateur FLANG prend en charge toutes les options de compilateur Clang, ainsi qu’un nombre supplémentaire d’options de compilateur FLANG spécifiques.

DragonEgg

DragonEgg est un plug-in de GCC qui remplace les générateurs de code et optimiseurs GCC du projet LLVM. DragonEgg, fourni avec AOCC, fonctionne avec gcc-4.8.x, et a été testé avec des cibles x86-32/x86-64. Il a été testé avec succès sur différentes plateformes Linux.

GFortran est le serveur frontal réel pour les programmes Fortran responsables du prétraitement, de l’analyse et de l’analyse sémantique générant la représentation intermédiaire GCC SIMPLE. DragonEgg est un plug-in GNU, qui se connecte au flux de compilation GFortran. Il implémente l’API de plug-in GNU. Avec l’architecture du plug-in, DragonEgg devient le pilote du compilateur, qui dirige les différentes phases de compilation. Après avoir suivi les instructions de téléchargement et d’installation, vous pouvez appeler DragonEgg à l’aide des éléments suivants :

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

Compilateur PGI

Il a été confirmé que PGI Community Edition 17 fonctionne avec AMD EPYC. Une version compilée par PGI de STREAM permet de proposer la bande passante de mémoire complète de la plateforme. Community Edition 18.10 (plus récent, car datant de novembre 2018) devrait également fonctionner avec ce logiciel. Utilisez cette commande CLI pour compiler avec le compilateur Intel :

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

Intel Compiler

Il a été confirmé qu’Intel Compiler 18 fonctionne avec AMD EPYC. Utilisez cette commande CLI pour compiler avec le compilateur Intel.

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

Compilateur GCC

Pour les charges de travail HPC, AMD recommande le compilateur GCC 7.3 ou une version ultérieure. Les versions antérieures, telles que la version 4.8.5 incluse avec RHEL 7.4, ne sont pas recommandées. GCC 7.3 et les versions ultérieures offrent des performances supérieures lors de tests avec HPL, HPCG et DGEMM.

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

Étapes suivantes