Sobrecarga de comunicação na supercomputação

10

Estou procurando referências credíveis informando quanto recursos os supercomputadores gastam em coordenar versus realizar um trabalho real relacionado a tarefas. Os recursos podem estar disponíveis para processamento, mas até Watts parece uma unidade válida.

Acredito que um dos meus professores ou livros didáticos disse uma vez que, em sistemas massivamente paralelos, até metade do poder de processamento disponível é gasto na coordenação da tarefa e na passagem de mensagens. Infelizmente, não consigo encontrar essa referência ou qualquer outro material sobre essa proporção.

Sei que isso será muito diferente, dependendo da arquitetura do supercomputador e as implementações modernas provavelmente são mais eficientes nesse sentido, portanto, uma visão geral dessa métrica em várias arquiteturas ou evoluções (antes e depois do hardware dedicado para transmissão de mensagens) seria ainda melhor.

Tomas Creemers
fonte
2
Você pode facilmente obter o número que desejar, escolhendo um computador, algoritmo e implementação adequados.
David Ketcheson

Respostas:

10

Um benchmark favorito de longa data na computação de alto desempenho tem sido o HPLinpack, que mede a velocidade de um sistema de computador em operações de ponto flutuante por segundo enquanto soluciona um sistema de equações linear muito grande, denso. Supõe-se que a solução operações de ponto flutuante e o testador pode variar para obter o desempenho máximo. 2/3n3+2n2n

As medidas de benchmark incluem o RPEAK (o número máximo teórico de operações de ponto flutuante por segundo para o sistema) e o RMAX (o número máximo alcançado de operações por segundo no benchmark HPLinpack.)

É típico que o RPEAK seja uma fração substancial do RMAX, indicando que nessa tarefa de benchmark, os supercomputadores atuais podem atingir uma fração significativa de seu desempenho teórico máximo. Por exemplo, no ranking de supercomputadores TOP500 de novembro de 2015, a máquina mais rápida, Tianhe-2, possui RPEAK = 54.902 petaflops e RMAX = 33.863 petaflops.

No entanto, o benchmark HPLinpack é amplamente visto como não sendo representativo das cargas de trabalho atuais. Os resultados do HPlinpack geralmente superestimam o desempenho dos supercomputadores em aplicativos reais por um grande fator.

Um novo benchmark, chamado HPCG, está em desenvolvimento. Esse benchmark envolve operações comumente executadas em métodos iterativos para a solução de grandes sistemas esparsos de equações decorrentes de PDEs discretizados. Essa carga de trabalho é muito mais desafiadora para computadores de alto desempenho. Também é muito mais representativo do uso dos supercomputadores na prática.

Alguns resultados iniciais do HPCG estão chegando a menos de 5% do RPEAK. Por exemplo, Tianhe-2 tem RPEAK = 54.902 petaflops e HPCG a 0.58 petaflops (consulte a referência abaixo para uma apresentação sobre HPCG.)

Os benchmarks TOP500 HPLinpack podem ser encontrados em:

http://www.top500.org/

Uma apresentação sobre HPCG pode ser encontrada em:

http://www.hpcg-benchmark.org/downloads/isc15/HPCG-ISC15-FINAL-SLIDES_update1.pdf

O site do HPCG está em

http://www.hpcg-benchmark.org/

Brian Borchers
fonte
11
Fiquei curioso sobre a origem das especificações dos flops e tive que procurá-las. Para qualquer pessoa curiosa, é a contagem de operações para decomposição de LU com pivotamento parcial, ou seja , um método para resolver um sistema denso. 2/3n3+2n2
Aurelius
3
Isso não parece responder à pergunta, pois não diz nada sobre a passagem de mensagens.
David Ketcheson
Responde parcialmente à pergunta no sentido de que esses benchmarks informam com que eficiência as unidades de ponto flutuante estão sendo usadas - você pode subtrair uma delas para descobrir quanto tempo está sendo gasto em todo o resto, o que inclui a passagem de mensagens entre outras coisas.
Brian Borchers
6

A resposta honesta é que não sabemos. A resposta depende muito do que está sendo executado e do código que o usuário escreveu. Como Brian Borchers aponta, há uma grande diferença entre dois benchmarks em que temos todo o código e supostamente sabemos o que esse código está fazendo, mas há muita discordância sobre a representatividade desse código em relação ao que os usuários de supercomputadores estão realmente fazendo. Sem análise detalhada do código fonte e alguma instrumentação pesada de códigos reais em máquinas reais, é quase impossível encontrar essa relação. Existem alguns projetos que estão começando a coletar dados que podem levar a comunidade a responder a essa pergunta, mas isso não está resolvido.

De fato, a questão nem sequer é clara. Se a placa de comunicação de um nó de cluster possui um processador que só pode ser usado para comunicação, como você calcula o tempo que essa placa passa ociosa sem manipular a comunicação (nem qualquer outra coisa)? Ou seja, o que conta como "poder de processamento disponível"? Contamos com programas mal escritos que possuem rotinas de computação e comunicação não otimizadas da mesma forma que otimizadas? E se alguém usa um anti-padrão conhecido em seu código que deliberadamente subutiliza a CPU? E quanto aos programas embaraçosamente paralelos que não se comunicam (estes são executados em supercomputadores, prometo)?

Eu não desperdiçaria seu tempo tentando quantificar uma observação imediata em um livro ou do seu professor. Esses tipos de declarações existem para nos lembrar que a programação paralela é difícil e geralmente é mal realizada. Os supercomputadores também não são projetados perfeitamente para eliminar ou otimizar todo o desperdício.

Bill Barth
fonte