O trilema de HPC: escolha entre desempenho, portabilidade e produtividade
As ciências físicas descrevem o mundo com a matemática aplicada. Sismologia, eletromagnetismo e dinâmica de fluidos dependem de técnicas como equações diferenciais parciais e simulações de diferença finita para modelar fenômenos físicos.
O Python e seu ecossistema científico de bibliotecas, como NumPy, SciPy e MatPlotLib, oferecem aos cientistas e pesquisadores estruturas para desenvolver soluções sofisticadas e específicas de domínio usando relativamente poucas linhas de código prontamente acessível. É essa versatilidade e produtividade que tem impulsionado o Python em uma das linguagens líderes em ciência e engenharia atualmente. Em que outra linguagem de programação você pode literalmente importar antigravidade?
Embora o Python puro possa ser mais lento do que linguagens compiladas, seu papel principal na computação de alto desempenho (HPC) é ser uma interface acessível para bibliotecas altamente otimizadas escritas em linguagens compiladas de nível mais baixo, como C, C++, Fortran e até mesmo CUDA, SYCL ou HIP para suporte de GPU. As bibliotecas científicas do Python, como NumPy e SciPy, aproveitam esses backends compilados para oferecer alto desempenho mantendo a facilidade de uso do Python. No entanto, esse modelo ainda depende da disponibilidade de código HPC otimizado para tarefas específicas de domínio, o que geralmente requer experiência e recursos especializados para desenvolver e manter.
A solução Devito: deixe que os cientistas sejam cientistas
A equipe da Devito Codes teve o objetivo de trazer a compilação just-in-time (JIT) de código de diferença finita com grau de HPC para o ecossistema Python. Com o Devito, os cientistas podem trabalhar dentro da estrutura simbólica e matemática (SymPy) do Python, escrevendo resolvedores de equações diferenciais complexas e problemas de otimização orientados por objetivos, e gerar perfeitamente código HPC paralelizado e otimizado por hardware para todas as principais arquiteturas de CPU e GPU.
A Devito Codes vê grandes ganhos com o Intel Xeon 6 (quanto mais alto, melhor)
Um kernel da Devito Codes para um propagador anisotrópico acústico para modelo de isotropia transversal inclinada (TTI) (um modelo sísmico típico do setor de energia) ilustra os ganhos de desempenho dos processadores escaláveis Intel Xeon 6 em relação aos processadores escaláveis Intel Xeon da 5ª Geração.1
"A maioria das pessoas adota o Devito inicialmente para o aumento de produtividade", afirma Gerard Gorman, CEO e cofundador da Devito Codes. "Ele permite uma forma exclusiva de prototipagem rápida, permitindo que seja tratada como um laboratório computacional."
Criar uma estrutura Python que possa produzir kernels de alto desempenho para simulações, inversão e tarefas de otimização em diversos hardwares não é simples. O Devito integra várias tecnologias de HPC, incluindo OpenMP para sistemas de memória compartilhada, OpenACC para aceleradores e MPI para paralelismo e portabilidade. Otimizações avançadas exigem ajuste específico de hardware com linguagens especializadas como CUDA, HIP e SYCL. A Devito Codes aplica quase todas as técnicas de otimização conhecidas para computação estruturada e integra continuamente novo avanços, garantindo que os ganhos de desempenho se acumulem ao longo do tempo — muitas vezes rivalizando ou até superando soluções comerciais ajustadas a mão por especialistas.
Assumindo a complexidade do desenvolvimento de códigos HPC, o a Devito Codes permite que os usuários transfiram projetos entre sistemas sem esforço, aproveitando todos os recursos de computação disponíveis. Os operadores e provedores de serviços de HPC podem manter a infraestrutura atual, expandir com matrizes heterogêneas e atualizar significativamente, ao mesmo tempo em que garantem que as cargas de trabalho permaneçam compatíveis e com bom desempenho.
"Com o DevitoPRO, um geofísico pode pegar um algoritmo de um trabalho de pesquisa e implementá-lo em uma tarde — uma tarefa que normalmente levaria meses de codificação e otimização. Essa mudança rápida permite que as equipes experimentem e inovem em um ritmo sem precedentes, acelerando o teste e a implantação de novos algoritmos." — Mathias Louboutin, arquiteto de soluções sênior, Devito
DevitoPRO
A Devito começou como parte de uma iniciativa do Intel Parallel Computing Centre liderada pelo professor Gerard Gorman no Imperial College London. O projeto inicial criou um software de código aberto e de alto desempenho para imagens sísmicas. À medida que o projeto tornou-se um verdadeiro compilador de otimização para cargas de trabalho de HPC, a equipe lançou o DevitoPRO, uma edição empresarial com recursos próprios, otimizações de desempenho avançadas e suporte comercial.
DevitoPRO serve principalmente à geofísica de exploração no setor de energia. Além de compilar código portátil e altamente otimizado para simulações sísmicas escritos em Python, o DevitoPRO oferece propagadores de alto desempenho e operadores de gradiente para inversão completa de forma de onda (FWI) e migração de tempo reversa (RTM). O DevitoPRO também oferece suporte técnico, treinamento, desenvolvimento de software personalizado e otimização específica de hardware para clientes.
A Devito continua a fornecer tecnologia de software simbólico e compilador de uso geral como softwares de código aberto e livre de patentes para pesquisadores acadêmicos e do setor.
Expandindo a portabilidade de código com SYCL e Intel
Tradicionalmente, a criação de código portátil que possa ser executado em processadores heterogêneos exigia a compilação de kernels exclusivos para cada tipo de hardware — kernels CUDA para GPUs NVIDIA, kernels HIP para GPUs AMD e C/C++ para CPUs x86 e RISC. Nos últimos anos, a SYCL ofereceu aos programadores de HPC uma nova opção multiplataforma para compilar código HPC otimizado.
A fusão de Devito entre computação simbólica e tecnologia de compilador avançada garante geração de código confiável, verificável e otimizada — fundamental para software matemático focado em missões. Embora o código de IA generativa não tenha esse nível de precisão e confiabilidade, a combinação de ambas as tecnologias pode levar a uma produtividade ainda maior no desenvolvimento e teste de novos algoritmos. — Gerard Gorman, CEO e cofundador da Devito Codes
SYCL é uma camada de abstração de C++ paralela entre plataformas com APIs que podem encontrar e gerenciar recursos de dados e execução de código em dispositivos mistos de vários fornecedores, incluindo CPUs, GPUs e FPGAs. SYCL é a base para oneAPI e Data Parallel C++, que a Intel implementou em GPUs de data center Intel®.
A Devito Codes e os engenheiros da Intel trabalharam juntos para trazer a geração de código SYCL para o DevitoPRO, incluindo otimizações específicas para aceleradores Intel® Data Center GPU Max séries 1100 e 1550. Para implantar, os usuários do DevitoPRO simplesmente direcionam as GPUs de data center da Intel para compilações just-in-time que colhem os benefícios de desempenho do SYCL.
Aumentando o desempenho para sismologia de onda elástica com computação de precisão mista
As ondas sísmicas viajam em duas formas: ondas primárias longitudinais (ondas P) e ondas secundárias transversais (ondas S). Modelagem de ondas P — um método que os sismólogos chamam de análise acústica — é relativamente simples matemática e computacionalmente porque a energia da onda e o movimento das partículas viajam na mesma dimensão. Modelagem de ondas P e S juntas, que os sismólogos chamam de análise elástica, complica as coisas geometricamente.
Como as duas formas de onda se movem em três dimensões em ângulos de noventa graus, descrevê-las requer mais equações de onda com mais componentes. A análise elástica também requer uma resolução muito maior para produzir resultados precisos, o que significa reunir muito mais dados.
As ondas sísmicas vêm em duas formas: ondas primárias (P) longitudinais e ondas secundárias (S) transversais.
"Se você estiver rodando de forma elástica, seu consumo de memória será, na melhor das hipóteses, entre quatro e cinco vezes maior do que no caso acústico", afirma Fabio Luporini, CTO e cofundador da Devito Codes. "É simplesmente por causa da física. Você está modelando mais campos de onda simultaneamente em uma equação diferencial parcial acoplada, que é preciso manter na memória.”
A Devito Codes está desenvolvendo algoritmos de precisão mista, uma técnica de computação de ia, para tornar cargas de trabalho de computação elásticas possíveis em hardware de geração atual. Cargas de trabalho que podem ter uma pequena perda de precisão são convertidas de FP-32 (ponto flutuante de 32 bits) para uma combinação cuidadosamente projetada de FP-32 e FP-16 (ponto flutuante de 16 bits), que representam os mesmos valores com metade da memória. No mundo da análise elástica, reduzir pela metade um conjunto de dados de um petabyte para 500 TB produz impulsos de desempenho em cascata em todas as etapas, desde o gerenciamento de memória e E/S até a gravação de instantâneos no disco.
Devito Codes dobra o desempenho com precisão mista (quanto maior, melhor)2
Os testes da Devito Codes mostram que a precisão variável e mista (FP-16/FP-32) aumenta 2 vezes o desempenho e reduz 2 vezes o consumo de memória, resultando em uma taxa de transferência significativamente mais rápida.2
As cargas de trabalho do FP-16 também processam mais rapidamente em CPUs e GPUs que suportam precisão mista, como processadores Intel® Xeon® 6 e Intel Data Center GPUs. Em testes iniciais, a análise de ondas elásticas executada em precisão mista com Devito Codes produziu um aumento de até 2 vezes no desempenho, 1o equivalente a uma mudança no desempenho sem atualizações de hardware.
Conclusão: todo incremento de desempenho conta
A Devito Codes e a Intel continuam refinando e otimizando tecnologias de compilador para extrair mais desempenho de sistemas de HPC heterogêneos para simulações de diferenças finitas. Para os clientes de Devito de código aberto e DevitoPRO, o trabalho é indispensável.
"O processamento de dados sísmicos para imagens de subsuperfície pode custar milhões em despesas de computação por projeto", segundo Gorman. "Por isso, precisamos espremer até o último porcentual do desempenho porque tempo é dinheiro."
Para as atualizações mais recentes, acesse Devito Codes no GitHub ou devitocodes.com.