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 e/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.

De multicore para manycore

A capacidade de escalar é especialmente importante para as aplicações computacionais intensivas e altamente paralelas. Minimize as mudanças e maximize o desempenho quando o alvo de execução muda de um tipo de arquitetura Intel® (processador Intel® Xeon®) para outro (coprocessador Intel® Xeon Phi™).

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 de memória não uniforme (NUMA) e MCDRAM

Você precisa do poder de computação dos processadores Intel Xeon Phi multicore ou manycore para servidores, mas as DIMMs e MCDRAM do sistema não suportam as necessidades das várias unidades de processamento vetorial, 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. Acabe com os atrasos por espera de dados de 400 GB/s ou mais da MCDRAM ou de 90 GB/s ou mais das DIMMs.