O que é modernização de código?

 

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 inter-processadores, 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). Aqui você também vai aprender como otimizar as operações escalares e de série, mantendo a precisão adequada, type constants, e usando funções apropriadas e flags de precisão.

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.