Sobre o serviço
TraduzidoEu desenvolvo código de alto desempenho em Chapel, uma linguagem projetada especificamente para computação científica produtiva em grande escala. Se seu modelo, solucionador ou pipeline de processamento de dados estiver preso em um núcleo, eu moverei o cálculo para todos os núcleos disponíveis e, em seguida, para todo um cluster. Minha principal tarefa é transformar código numérico comum em um programa que mantém milhares de threads ocupadas sem forçá-lo a reescrever tudo à mão. Eu uso loops paralelos forall, domínios distribuídos e o modelo de localidade para espalhar arrays entre nós, e onde o algoritmo precisa de controle mais fino, aplico paralelismo de tarefas através de begin, cobegin e variáveis de sincronização. Trabalhos típicos que realizo: portar núcleo sequencial de C ou Fortran para Chapel, paralelizar operações de template e matriz, construir tabelas hash distribuídas e travessias de grafos, e perfilar por que o cálculo fica ocioso em movimento de dados em vez de aritmética. Eu meço tudo. Antes de considerar o trabalho concluído, mostro curvas de escalabilidade forte e fraca para que você veja como o código se comporta à medida que os núcleos e o tamanho do problema crescem, e explico de onde vêm os limites. Os resultados incluem código-fonte limpo e comentado, uma receita para compilar sob seu compilador e lançador, um breve relatório de escalabilidade e memória, e instruções para executar em seu hardware ou agendador. Eu escrevi código Chapel para métodos de Monte Carlo, tarefas de N-corpos, etapas de hidrodinâmica computacional e álgebra linear esparsa grande. Correção em primeiro lugar, depois velocidade: eu adiciono testes reproduzíveis e verifico os resultados contra uma base confiável antes de ajustar. Nomeie a contagem de nós, tipo de conexão e núcleo que causa o gargalo, e eu darei estimativas honestas de aceleração e esforço.