Computadores de alto desempenho modernos são construídos com uma combinação de recursos, incluindo processadores multicore e manycore, grandes caches, memória rápida, malha de comunicações de alta largura de banda interprocessadores, e amplo suporte para recursos de entrada e saída. O software de alto desempenho precisa ser projetado para tirar plena vantagem dessa riqueza de recursos.

Quer esteja refazendo a arquitetura ou ajustando os aplicativos existentes para o desempenho máximo ou criando novos aplicativos para máquinas existentes e futuras, é fundamental ter em conta a interação entre modelos de programação e o uso eficiente desses recursos.

Considere este um ponto de partida para a informação sobre a modernização de código.

Vetorização

Um ingrediente fundamental para um bom desempenho paralelo em hardware moderno é aproveitar ao máximo das instruções vetoriais, também conhecidas como conjuntos de instrução Single Instruction Multiple Data (SIMD, Instrução Única Dados Múltiplos). Aprenda a otimizar as operações escalares e seriais mantendo a precisão adequada, tipos constantes e usando funções apropriadas e flags de precisão.

Multithreading

Faça mais aumentando o número de threads ativas em seu software e tire vantagem de todos os núcleos disponíveis no hardware moderno.

Múltiplos nós (Cluster)

A arquitetura de cluster pode alcançar altos níveis de desempenho paralelo que pode escalar com o algoritmo. Aprenda como utilizar a interface de passagem de mensagens (MPI) e o modelo de memória distribuída para elaborar seus aplicativos.

Otimização de memória

Em todos os sistemas – desde laptops até supercomputadores – os núcleos só podem funcionar à plena capacidade de computação se eles forem supridos com dados à taxa máxima em que eles podem processá-los. Deste modo, para aplicações regulares e de HPC, o desempenho será maior se a maior parte das solicitações à memória for atendida pelos caches próximos. Se isso não acontecer, vetorizar ou tornar o código paralelo pode ser ineficiente. Saiba como reconhecer e corrigir essa situação.

Acesso não uniforme (NUMA) a memória

Você precisa do poder computacional dos processadores Intel® Xeon® multicore, mas os DIMMs do sistema não são páreo para as necessidades das unidades de processamento de muitos vetores. Portanto, seu programa trava. Saiba como mudar as características de acesso aos dados de sua aplicação de modo que os caches L1 e L2 atendam às necessidades de 10000 GB/s ou mais. Termine com os atrasos à espera de dados dos DIMMs de 90 GB / s.