ragecom
Bam-bam-bam
- Mensagens
- 1.193
- Reações
- 1.799
- Pontos
- 353
Então, com o anúncio do Stadia do Google, muitas pessoas ficaram impressionadas com o imagem abaixo:
Beleza... O problema é que parece que a maioria das pessoas não entende 1) o que é esse número; 2) como ele foi obtido e; 3) qual a veracidade desse número. Então eu resolvi escrever um pequeno texto da maneira mais superficial que eu pude pra tentar ajudar os demais a entender. Quem manja de computação, por favor, fique à vontade pra contribuir.
P: o que é FLOPS?
R: floating-point operations per second, ou operações de ponto flutuante por segundo.
P: o que é um ponto flutuante?
R: um número real.
P: quanto mais FLOPS melhor, certo?
R: sim, mas primeiro a gente precisa entender como esse número foi obtido pra verificar se ele foi medido de verdade ou meramente estimado.
P: porque só se usa FLOPS pra medir desempenho de supercomputadores?
R: na verdade não se usa só o FLOPS. Usa-se também o MIPS (millions of instructions per second), que é o equivalente ao FLOPS pra números de ponto fixo (inteiros) - isso é particularmente interessante porque uma operação lógica recai numa comparação inteira, o que é feito o tempo todo.
Então vamos do início. Existem duas formas de analisar o FLOPS: a teórica e a prática.
A teórica se chama rpeak. O rpeak é calculado muito facilmente:
rpeak = clock * cores * inst * quant, onde:
clock é o clock do processador em gigahertz;
cores é a quantidade de cores do processador;
inst é a quantidade de instruções do processador por ciclo de hardware e;
quant é o número de processadores do computador. Claro que se o sistema for heterogêneo (sistemas distribuídos, por exemplo), o cálculo do rpeak é a soma de todos os rpeaks de cada tipo de processador.
Beleza, mas como dá pra ver, essa abordagem é totalmente teórica: ela não leva em conta absolutamente mais nada além das variáveis relativas aos processadores, quando na verdade até o meio como os processadores se comunicam possuem latência (um core falando com outro core no mesmo processador é mais rápido que um falando com outro por um barramento, que por sua vez é mais rápido do que se um estiver falando com o outro pela rede). Então na prática esse número é um teto, um limitador máximo, o melhor dos casos. Mas na prática não é o que interessa, porque dependendo da topologia do cluster, do gerenciamento da memória e de tantas outras coisas, a diferença entre o rpeak e o real pode ser imensa.
Agora vamos ver como medir FLOPS da forma prática. O resultado dessa operação dará um número de FLOPS conhecido como rmax.
Para medir o rmax, precisamos submeter o supercomputador a um teste. Geralmente se faz isso aplicando uma série de equações lineares e medindo o desempenho. Mas serve qualquer sistema de equações lineares? Sim e não... Eu explico:
Sim porque, bem, se você mandar um conjunto de equações lineares pra dois computadores resolverem e tirar a diferença, você está medindo alguma coisa pelo menos.
E não porque isso já é estudado desde os anos 60, então hoje já temos bem estabelecidos benchmarks que calculam o rmax de uma forma matematicamente eficiente com o mínimo de bias.
E quais são esses benchmarks? Bem, existem vários. Mas pelo que eu saiba o mais utilizado é o LINPACK. Existem várias implementações do LINPACK, mas em geral elas partem do seguinte pressuposto: resolver um sistema de equações lineares por meio de eliminação de Gauss, ou seja, uma abordagem matricial para o sistema de equações. A quantidade de operações é fixada em 2/3n^3 + 2n^2, então a ordem da matriz que representa o sistema de equações lineares é quem dita o tamanho do problema.
Essa matriz deve ser bem populada (não deve ser esparsa). A primeira versão especificação do LINPACK permite matrizes de ordem 100. Depois foi lançado o benchmark LINPACK 1000, que é basicamente a mesma coisa, mas permitindo o uso de matrizes de ordem 1000. Depois disso, foi criado o HPL, que é a versão do LINPACK pra computação paralela: essa é a que interessa nesse caso. A quantidade de operações é exatamente a mesma de todas as versões anteriores do LINPACK, mas o HPL funciona resolvendo o sistema de equações lineares através de fatoração lower-up da matriz que a representa. A formulação é simples:
A = LU onde,
A é a matriz original, que representa o sistema de equações lineares;
L é a matriz triangular inferior de A e;
U é a matriz triangular superior de A.
Em resumo, alguém provou matematicamente que a solução por fatoração LU é mais adequada pra medir FLOPS do que a eliminação de Gauss. Eu não entendo muito dessas coisas, então eu acredito nos caras.
Vale lembrar que o HPL não usa floats comuns, e sim doubles (pontos flutuantes de 64 bits, o dobro do float normal).
Então... Rodando o HPL, o que a gente tem? Depende... Pode ter várias coisas:
. O rmax, que é o que a gente queria;
. O nmax, que é o tamanho do maior problema submetido ao supercomputador;
. O consumo de memória pra resolução do problema no rmax;
. O nmeio, que é o tamanho do problema quando a execução do rmax chegou na metade.
. O rpeak - rmax, que pode ser usado como resíduo (estatisticamente falando), como se fosse o módulo da diferença do real pro predito, ou seja, uma medida de qualidade nesse caso;
. A temperatura dos processadores no rmax;
. Todo tipo de estatística do supercomputador.
P: e a diferença entre o rpeak e o rmax costuma ser grande?
R: Sim. Vejam a tabelinha abaixo, com o rpeak e rmax dos 10 maiores supercomputadores do mundo:
Ou seja... Diante disso tudo ai que eu escrevi, algumas dúvidas vem em mente quando a gente vê esse número do Stadia:
Os 10.7 TeraFLOPS são o rpeak ou o rmax? Porque se for o rpeak não vale nada. Supondo que seja o rmax... Como foi medido isso pra começo de conversa? Com HPL? Qual implementação e configuração do sistema de equações? Qual é o desempenho dessa mesma configuração em outro supercomputador similar pra gente poder comparar?
Vejam como essa questão do FLOPS é o novo "bit". Quanto mais FLOPS melhor, mas peraí... Esse FLOPS foi obtido como? Como comparar o que um vendedor diz com outro, se os dois podem estar medindo diferente ou simplesmente jogando um rpeak no slide? FLOPS é legal, mas não é um número fechado: ele pode ser obtido de muitas formas diferentes.
Espero ter ajudado. Quem quiser contribuir, mete bala ai. Quem quiser me corrigir, idem: às vezes eu falo m****.
Beleza... O problema é que parece que a maioria das pessoas não entende 1) o que é esse número; 2) como ele foi obtido e; 3) qual a veracidade desse número. Então eu resolvi escrever um pequeno texto da maneira mais superficial que eu pude pra tentar ajudar os demais a entender. Quem manja de computação, por favor, fique à vontade pra contribuir.
P: o que é FLOPS?
R: floating-point operations per second, ou operações de ponto flutuante por segundo.
P: o que é um ponto flutuante?
R: um número real.
P: quanto mais FLOPS melhor, certo?
R: sim, mas primeiro a gente precisa entender como esse número foi obtido pra verificar se ele foi medido de verdade ou meramente estimado.
P: porque só se usa FLOPS pra medir desempenho de supercomputadores?
R: na verdade não se usa só o FLOPS. Usa-se também o MIPS (millions of instructions per second), que é o equivalente ao FLOPS pra números de ponto fixo (inteiros) - isso é particularmente interessante porque uma operação lógica recai numa comparação inteira, o que é feito o tempo todo.
Então vamos do início. Existem duas formas de analisar o FLOPS: a teórica e a prática.
A teórica se chama rpeak. O rpeak é calculado muito facilmente:
rpeak = clock * cores * inst * quant, onde:
clock é o clock do processador em gigahertz;
cores é a quantidade de cores do processador;
inst é a quantidade de instruções do processador por ciclo de hardware e;
quant é o número de processadores do computador. Claro que se o sistema for heterogêneo (sistemas distribuídos, por exemplo), o cálculo do rpeak é a soma de todos os rpeaks de cada tipo de processador.
Beleza, mas como dá pra ver, essa abordagem é totalmente teórica: ela não leva em conta absolutamente mais nada além das variáveis relativas aos processadores, quando na verdade até o meio como os processadores se comunicam possuem latência (um core falando com outro core no mesmo processador é mais rápido que um falando com outro por um barramento, que por sua vez é mais rápido do que se um estiver falando com o outro pela rede). Então na prática esse número é um teto, um limitador máximo, o melhor dos casos. Mas na prática não é o que interessa, porque dependendo da topologia do cluster, do gerenciamento da memória e de tantas outras coisas, a diferença entre o rpeak e o real pode ser imensa.
Agora vamos ver como medir FLOPS da forma prática. O resultado dessa operação dará um número de FLOPS conhecido como rmax.
Para medir o rmax, precisamos submeter o supercomputador a um teste. Geralmente se faz isso aplicando uma série de equações lineares e medindo o desempenho. Mas serve qualquer sistema de equações lineares? Sim e não... Eu explico:
Sim porque, bem, se você mandar um conjunto de equações lineares pra dois computadores resolverem e tirar a diferença, você está medindo alguma coisa pelo menos.
E não porque isso já é estudado desde os anos 60, então hoje já temos bem estabelecidos benchmarks que calculam o rmax de uma forma matematicamente eficiente com o mínimo de bias.
E quais são esses benchmarks? Bem, existem vários. Mas pelo que eu saiba o mais utilizado é o LINPACK. Existem várias implementações do LINPACK, mas em geral elas partem do seguinte pressuposto: resolver um sistema de equações lineares por meio de eliminação de Gauss, ou seja, uma abordagem matricial para o sistema de equações. A quantidade de operações é fixada em 2/3n^3 + 2n^2, então a ordem da matriz que representa o sistema de equações lineares é quem dita o tamanho do problema.
Essa matriz deve ser bem populada (não deve ser esparsa). A primeira versão especificação do LINPACK permite matrizes de ordem 100. Depois foi lançado o benchmark LINPACK 1000, que é basicamente a mesma coisa, mas permitindo o uso de matrizes de ordem 1000. Depois disso, foi criado o HPL, que é a versão do LINPACK pra computação paralela: essa é a que interessa nesse caso. A quantidade de operações é exatamente a mesma de todas as versões anteriores do LINPACK, mas o HPL funciona resolvendo o sistema de equações lineares através de fatoração lower-up da matriz que a representa. A formulação é simples:
A = LU onde,
A é a matriz original, que representa o sistema de equações lineares;
L é a matriz triangular inferior de A e;
U é a matriz triangular superior de A.
Em resumo, alguém provou matematicamente que a solução por fatoração LU é mais adequada pra medir FLOPS do que a eliminação de Gauss. Eu não entendo muito dessas coisas, então eu acredito nos caras.
Vale lembrar que o HPL não usa floats comuns, e sim doubles (pontos flutuantes de 64 bits, o dobro do float normal).
Então... Rodando o HPL, o que a gente tem? Depende... Pode ter várias coisas:
. O rmax, que é o que a gente queria;
. O nmax, que é o tamanho do maior problema submetido ao supercomputador;
. O consumo de memória pra resolução do problema no rmax;
. O nmeio, que é o tamanho do problema quando a execução do rmax chegou na metade.
. O rpeak - rmax, que pode ser usado como resíduo (estatisticamente falando), como se fosse o módulo da diferença do real pro predito, ou seja, uma medida de qualidade nesse caso;
. A temperatura dos processadores no rmax;
. Todo tipo de estatística do supercomputador.
P: e a diferença entre o rpeak e o rmax costuma ser grande?
R: Sim. Vejam a tabelinha abaixo, com o rpeak e rmax dos 10 maiores supercomputadores do mundo:
Ou seja... Diante disso tudo ai que eu escrevi, algumas dúvidas vem em mente quando a gente vê esse número do Stadia:
Os 10.7 TeraFLOPS são o rpeak ou o rmax? Porque se for o rpeak não vale nada. Supondo que seja o rmax... Como foi medido isso pra começo de conversa? Com HPL? Qual implementação e configuração do sistema de equações? Qual é o desempenho dessa mesma configuração em outro supercomputador similar pra gente poder comparar?
Vejam como essa questão do FLOPS é o novo "bit". Quanto mais FLOPS melhor, mas peraí... Esse FLOPS foi obtido como? Como comparar o que um vendedor diz com outro, se os dois podem estar medindo diferente ou simplesmente jogando um rpeak no slide? FLOPS é legal, mas não é um número fechado: ele pode ser obtido de muitas formas diferentes.
Espero ter ajudado. Quem quiser contribuir, mete bala ai. Quem quiser me corrigir, idem: às vezes eu falo m****.