Dimensionamento dos aplicativos de HPC
Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjuntos de dimensionamento uniformes
O desempenho otimizado para expandir e escalar verticalmente aplicativos HPC no Azure requer ajustes de desempenho e experimentos de otimização quanto à carga de trabalho específica. Esta seção e as páginas específicas da série de VMs oferecem diretrizes gerais para dimensionar seus aplicativos.
Instalação do aplicativo
O repositório azurehpc contém muitos exemplos relativos ao seguinte:
- Configurar e executar aplicativos de maneira ideal.
- Configurar sistemas de arquivos e clusters.
- Tutoriais sobre como começar a usar facilmente alguns fluxos de trabalho de aplicativo comuns.
Dimensionamento otimizado de MPI
As sugestões a seguir se aplicam à eficiência, ao desempenho e à consistência ideais do dimensionamento do aplicativo:
Para trabalhos de escala menor (< conexões de 256K), use a opção:
UCX_TLS=rc,sm
Para trabalhos de escala maior (> conexões de 256K), use a opção:
UCX_TLS=dc,sm
Para calcular o número de conexões para seu trabalho de MPI, use:
Max Connections = (processes per node) x (number of nodes per job) x (number of nodes per job)
Roteamento adaptável
O roteamento adaptável (AR) permite que as Máquinas Virtuais (VMs) do Azure que executam InfiniBand EDR e HDR detectem e evitem automaticamente o congestionamento da rede selecionando dinamicamente caminhos de rede ideais. Como resultado, o AR oferece maior latência e largura de banda na rede InfiniBand, o que impulsiona maior desempenho e eficiência de dimensionamento. Para obter mais informações, confira o artigo da TechCommunity.
Fixação de processo
- Fixe os processos em núcleos usando uma abordagem de fixação sequencial (em vez de uma abordagem de balanceamento automático).
- A associação por Numa/Core/HwThread é melhor que a associação padrão.
- Para aplicativos paralelos híbridos (OpenMP+MPI), use quatro threads e uma classificação de MPI por [CCX](visão geral das máquinas virtuais da série HB, incluindo informações sobre CCXs) em tamanhos de VM HB e HBv2.
- Para aplicativos MPI puros, experimente entre uma a quatro classificações de MPI por CCX para obter desempenho ideal em tamanhos de VM de HB e HBv2.
- Alguns aplicativos com extrema sensibilidade à largura de banda da memória podem se beneficiar do uso de um número reduzido de núcleos por CCX. Para esses aplicativos, usar três ou dois núcleos por CCX pode reduzir a contenção de largura de banda de memória e gerar um desempenho real maior ou uma escalabilidade mais consistente. Em particular, o "Allreduce" da MPI pode se beneficiar desta abordagem.
- Para execuções em escala maior, é recomendável usar transportes UD ou RC+UD híbridos. Muitas bibliotecas de MPI/bibliotecas de runtime usam esses transportes internamente (como UCX ou MVAPICH2). Verifique suas configurações de transporte para execuções em grande escala.
Compilando aplicativos
Clique para expandir
Embora não seja necessário, compilar aplicativos com sinalizadores de otimização apropriados fornece melhor desempenho de dimensionamento em VMs das séries HB e HC.
AMD Optimizing C/C++ Compiler
O sistema de compilador AMD Optimizing C/C++ Compiler (AOCC) oferece um alto nível de otimizações avançadas, diversos threads e suporte a processador que inclui otimização global, vetorização, análises entre procedimentos, transformações de loop e geração de códigos. Os binários do compilador AOCC são adequados para sistemas Linux com a versão 2.17 da GNU C Library (glibc) e superior. O conjunto de compiladores consiste em um compilador C/C++ (Clang), um compilador Fortran (FLANG) e um front-end Fortran para Clang (Dragon Egg).
Clang
O Clang é um compilador C, C++ e Objective-C que lida com o pré-processamento, a análise, a otimização, a geração de código, a ação de assembly e a vinculação.
Ele dá suporte ao sinalizador -march=znver1
para permitir uma geração de código melhor e o ajuste para a arquitetura x86 baseada em Zen da AMD.
FLANG
O compilador FLANG é uma adição recente ao conjunto do AOCC (adicionado em abril de 2018) e está atualmente em pré-lançamento para o download e o teste dos desenvolvedores. Com base no Fortran 2008, a AMD estende a versão do GitHub do FLANG. O compilador FLANG dá suporte a todas as opções do compilador Clang e outras opções do compilador específicas do FLANG.
DragonEgg
O DragonEgg é um plug-in gcc que substitui os otimizadores e geradores de código do GCC do projeto LLVM. O DragonEgg que vem com o AOCC funciona com gcc-4.8. x, foi testado para destinos x86-32/x86-64 e foi usado com sucesso em diversas plataformas Linux.
O GFortran é o front-end real para programas Fortran, sendo responsável pelo pré-processamento, pela análise e pela análise semântica, gerando a representação intermediária (IR) do GCC GIMPLE. O DragonEgg é um plug-in GNU, conectando-se ao fluxo de compilação do GFortran. Ele implementa a API do plug-in GNU. Com a arquitetura do plug-in, o DragonEgg se torna o driver do compilador, orientando as diferentes fases da compilação. Depois de seguir as instruções de download e instalação, o DragonEgg pode ser invocado 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
O compilador PGI
O PGI Community Edition 17 foi confirmado para funcionar com o AMD EPYC. Uma versão compilada do STREAM para PGI fornece a largura de banda de memória completa da plataforma. A mais recente Community Edition 18.10 (Nov 2018) deve funcionar de forma adequada. Use este comando da CLI para compilar com o Intel Compiler:
pgcc $(OPTIMIZATIONS_PGI) $(STACK) -DSTREAM_ARRAY_SIZE=800000000 stream.c -o stream.pgi
Intel Compiler
O Intel Compiler 18 foi confirmado para funcionar com o AMD EPYC. Use este comando da CLI para compilar com o Intel Compiler.
icc -o stream.intel stream.c -DSTATIC -DSTREAM_ARRAY_SIZE=800000000 -mcmodel=large -shared-intel -Ofast –qopenmp
Compilador GCC
Para cargas de trabalho HPC, a AMD recomenda o compilador GCC 7.3 ou mais recente. Versões mais antigas, como 4.8.5 incluídas no RHEL/CentOS 7.4, não são recomendadas. O GCC 7.3 e mais recente oferece maior desempenho em testes HPL, HPCG e DGEMM.
gcc $(OPTIMIZATIONS) $(OMP) $(STACK) $(STREAM_PARAMETERS) stream.c -o stream.gcc
Próximas etapas
- Teste seus conhecimentos com um módulo de aprendizagem sobre como otimizar aplicativos HPC no Azure.
- Confira a visão geral da série HBv3 e a visão geral da série HC.
- Leia informações sobre comunicados mais recentes, exemplos de cargas de trabalho de HPC e resultados de desempenho nos Blogs do programa Tech Groups da Computação do Azure.
- Saiba mais sobre HPC no Azure.