Partilhar via


Dimensionar aplicações HPC

Aplica-se a: ✔️ VMs ✔️ Linux VMs ✔️ do Windows Conjuntos ✔️ de escala flexíveis Conjuntos de balanças uniformes

O desempenho ideal de expansão e expansão de aplicativos HPC no Azure requer experimentos de ajuste e otimização de desempenho para a carga de trabalho específica. Esta seção e as páginas específicas da série VM oferecem orientação geral para dimensionar seus aplicativos.

Configuração da aplicação

O repositório azurehpc contém muitos exemplos de:

Dimensionamento ideal do IPM

As sugestões a seguir se aplicam para eficiência, desempenho e consistência ideais de dimensionamento de aplicativos:

  • Para trabalhos de menor escala (< 256 mil conexões), utilize: UCX_TLS=rc,sm

  • Para trabalhos de maior escala (> 256 mil conexões), utilize: UCX_TLS=dc,sm

  • Para calcular o número de conexões para seu trabalho 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 EDR e HDR InfiniBand detetem e evitem automaticamente o congestionamento da rede selecionando dinamicamente os caminhos de rede ideais. Como resultado, a RA oferece latência e largura de banda melhoradas na rede InfiniBand, o que, por sua vez, aumenta o desempenho e a eficiência de escala. Para obter mais informações, consulte o artigo TechCommunity.

Fixação de processos

  • Fixe processos em núcleos usando uma abordagem de fixação sequencial (em oposição a uma abordagem de autobalance).
  • A vinculação por Numa/Core/HwThread é melhor do que a vinculação padrão.
  • Para aplicativos paralelos híbridos (OpenMP+MPI), use quatro threads e uma classificação MPI por [CCX] (visão geral de máquinas virtuais da série HB, incluindo informações sobre CCXs) nos tamanhos de VM HB e HBv2.
  • Para aplicações MPI puras, experimente entre uma a quatro fileiras MPI por CCX para obter um desempenho ideal nos tamanhos de VM HB e HBv2.
  • Algumas aplicações com extrema sensibilidade à largura de banda da memória podem beneficiar da utilização de um número reduzido de núcleos por CCX. Para esses aplicativos, o uso de três ou dois núcleos por CCX pode reduzir a contenção de largura de banda da memória e gerar maior desempenho no mundo real ou escalabilidade mais consistente. Em especial, o IPM «Allreduce» pode beneficiar desta abordagem.
  • Para execuções de maior escala, recomenda-se o uso de transportes UD ou híbridos RC+UD. Muitas bibliotecas MPI/bibliotecas de tempo de execução usam esses transportes internamente (como UCX ou MVAPICH2). Verifique as configurações de transporte para executar em grande escala.

Compilando aplicativos


Clique para expandir

Embora não seja necessário, a compilação de aplicativos com sinalizadores de otimização apropriados fornece o melhor desempenho de expansão em VMs das séries HB e HC.

Compilador AMD Optimizing C/C++

O sistema de compilador AMD Optimizing C/C++ Compiler (AOCC) oferece um alto nível de otimizações avançadas, multithreading e suporte a processador, que inclui otimização global, vetorização, análises entre procedimentos, transformações de loop e geração de código. Os binários do compilador AOCC são adequados para sistemas Linux com GNU C Library (glibc) versão 2.17 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

Clang é um compilador C, C++ e Objective-C que manipula pré-processamento, análise, otimização, geração de código, montagem e vinculação. O Clang suporta o sinalizador para permitir a -march=znver1 melhor geração de código e ajuste para a arquitetura x86 baseada em Zen da AMD.

FLANG

O compilador FLANG é uma adição recente ao pacote AOCC (adicionado em abril de 2018) e está atualmente em pré-lançamento para os desenvolvedores baixarem e testarem. Com base no Fortran 2008, a AMD estende a versão GitHub do FLANG. O compilador FLANG suporta todas as opções do compilador Clang e outro número de opções do compilador específico do FLANG.

DragonEgg

DragonEgg é um plugin gcc que substitui os otimizadores e geradores de código do GCC do projeto LLVM. DragonEgg que vem com AOCC funciona com gcc-4.8.x, foi testado para alvos x86-32/x86-64, e tem sido usado com sucesso em várias plataformas Linux.

GFortran é o frontend real para programas Fortran responsáveis pelo pré-processamento, análise e análise semântica gerando a representação intermediária (IR) GCC GIMPLE. DragonEgg é um plugin GNU, conectando-se ao fluxo de compilação do GFortran. Ele implementa a API do plugin GNU. Com a arquitetura do plugin, DragonEgg torna-se o driver do compilador, conduzindo as diferentes fases da compilação. Depois de seguir as instruções de download e instalação, Dragon Egg 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

Compilador IGP

O IGP Community Edition 17 está confirmado para funcionar com o AMD EPYC. Uma versão compilada por IGP do STREAM fornece largura de banda de memória total da plataforma. A nova Community Edition 18.10 (novembro de 2018) também deve funcionar bem. Use este comando da CLI para compilar com o compilador Intel:

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

Compilador Intel

O Compilador Intel 18 está confirmado para funcionar com AMD EPYC. Use este comando da CLI para compilar com o compilador Intel.

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 a 4.8.5 incluída no RHEL 7.4, não são recomendadas. O GCC 7.3, e mais recente, oferece maior desempenho em testes de HPL, HPCG e DGEMM.

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

Próximos passos