1 pontos por GN⁺ 2023-12-26 | 1 comentários | Compartilhar no WhatsApp
  • Com base no Cray 1, que era um supercomputador em 1978, o texto compara o quanto Raspberry Pi, dispositivos Android e PCs o superaram nos benchmarks Livermore Loops, Linpack e Whetstone
  • Os valores de referência são o desempenho de hardware do Cray 1 de 80MHz e máximo de 160MFLOPS, mas na comparação real são usados média geométrica de 11,9MFLOPS no Livermore Loops, 27MFLOPS no Linpack e estimativa de 6MFLOPS no Whetstone
  • O Raspberry Pi 1 de 2012 era 4,6 vezes mais rápido que o Cray 1 pela média geométrica do Livermore Loops, e o Raspberry Pi 400 de 2020 chegou a 78,8 vezes, 49,5 vezes e 95,5 vezes nos três benchmarks
  • O CPU Kryo 570 de um telefone Android intermediário de 2021 alcançou 123 vezes, 74 vezes e 151 vezes em núcleo único, enquanto um notebook com Core i5 1135G7 registrou 359 vezes, 337 vezes e 226 vezes com compilação AVX-512
  • Com SIMD e multithreading a diferença aumenta ainda mais, mas as operações fused do AVX-512 podem produzir resultados numéricos diferentes do esperado em alguns benchmarks

Os benchmarks usados como referência e o Cray 1

  • O centro da comparação é o Livermore Loops, isto é, os program kernels do Lawrence Livermore Laboratory usados para verificar o desempenho do primeiro Cray 1
    • Os resultados usam uma versão convertida para código C nos anos 1990
    • O Livermore Loops calcula MFLOPS por loop, além de mínimo, máximo e várias médias, sendo a média oficial a geométrica
  • Como comparação complementar, são usados Linpack 100 e Whetstone
    • O Linpack foi convertido para PC e se baseia no linpack-pc.c incorporado ao Netlib
    • O Whetstone foi expandido em variantes posteriores após Harold Curnow, autor original, transferir a responsabilidade de projeto, e a versão 100% vetorizada tinha como alvo inicial o primeiro sistema Cray 1 instalado no Reino Unido
  • Os principais valores de referência do Cray 1 são os seguintes
    • O desempenho máximo teórico de hardware do Cray 1 de 80MHz é conhecido como 160MFLOPS, produzindo dois resultados por ciclo com linked multiply and add
    • Os resultados do Livermore Loops são máximo de 82,1MFLOPS, média geométrica de 11,9MFLOPS e mínimo de 1,2MFLOPS
    • O Linpack é 27MFLOPS, e o Whetstone é estimado em 6MFLOPS com base em resultados do Cray XMP

O ponto em que o Raspberry Pi superou o Cray 1

  • Em 2013, foi executado no primeiro Raspberry Pi essencialmente o mesmo programa de benchmark usado em PCs com Linux
  • Na época, a frase de comparação dizia que o Cray 1 de 1978 custava 7 milhões de dólares, pesava 10.500 libras e exigia uma fonte de alimentação de 115kW, enquanto o Raspberry Pi custava cerca de 70 dólares, pesava apenas algumas onças, usava uma fonte de 5W e era mais de 4,5 vezes mais rápido que o Cray 1
    • Essa comparação usa a média geométrica oficial do Livermore Loops
  • As três principais medições do Pi 1 são 55MFLOPS no Livermore Loops, 42MFLOPS no Linpack e 94MFLOPS no Whetstone
    • Em MHz de CPU, ele é 8,8 vezes o Cray 1
    • Em MFLOPS em relação ao Cray 1, isso representa 4,6 vezes, 1,6 vez e 15,7 vezes, respectivamente
  • Em 2020, o Raspberry Pi 400 entregou 819MFLOPS no Livermore Loops, 1147MFLOPS no Linpack e 498MFLOPS no Whetstone a 1800MHz em modo 32 bits
  • Os resultados do Pi 400 com compilação SIMD de 64 bits são 78,8 vezes, 49,5 vezes e 95,5 vezes em relação ao Cray 1

Resultados de CPUs ARM no Android

  • Em 2012, o benchmark foi convertido para rodar no Android como código ARM nativo, exigindo um programa frontend em Java
  • Alguns tablets Android iniciais não tinham hardware ou software suficientes para suportar cálculos de ponto flutuante rápidos
  • Os resultados de um ARM Cortex-A9 de 800MHz em 2012 foram 20MFLOPS no Livermore Loops, 11MFLOPS no Linpack e 22MFLOPS no Whetstone
    • A CPU tinha 10 vezes o MHz do Cray 1, mas os multiplicadores em MFLOPS foram apenas 1,7 vez, 0,4 vez e 3,7 vezes
  • Depois, um V7-A9 de 800MHz melhorou para 115MFLOPS, 101MFLOPS e 155MFLOPS
    • Isso equivale a 9,7 vezes, 3,7 vezes e 25,8 vezes o Cray 1
  • Em 2021, o CPU Kryo 570 de um celular intermediário registrou 1468MFLOPS no Livermore Loops, 1986MFLOPS no Linpack e 905MFLOPS no Whetstone a 2000MHz
    • 123 vezes, 74 vezes e 151 vezes em relação ao Cray 1
    • A CPU opera a 25 vezes o MHz do Cray 1

Desempenho de núcleo único em PCs com Windows e Linux

  • Desde os anos 1990, os benchmarks foram desenvolvidos para CPUs Intel em DOS, OS/2, Windows e Linux
  • O primeiro PC a alcançar a pontuação média do Cray 1 no Livermore Loops foi um Pentium de 100MHz em 1994
    • 12MFLOPS no Livermore Loops, 12MFLOPS no Linpack e 16MFLOPS no Whetstone
    • Em relação ao Cray 1, as comparações de MHz da CPU e dos três MFLOPS foram cerca de 1,3 vez, 1,0 vez, 0,44 vez e 2,6 vezes
  • Em 1995, o Pentium Pro 200MHz entregou 34MFLOPS no Livermore Loops, 49MFLOPS no Linpack e 41MFLOPS no Whetstone
    • 2,9 vezes, 1,8 vez e 6,8 vezes o Cray 1
  • Em 2007, um Core 2 de 1820MHz em núcleo único registrou 413MFLOPS, 998MFLOPS e 374MFLOPS
    • 35 vezes, 37 vezes e 62 vezes o Cray 1
  • Em 2021, um notebook com Core i5 1135G7 entregou 1387MFLOPS, 3541MFLOPS e 802MFLOPS a 4150MHz
    • 117 vezes, 131 vezes e 134 vezes em relação ao Cray 1

O impacto da compilação SIMD

  • Também são comparados resultados compilados com opções SIMD SSE, AVX e AVX-512
    • SSE usa registradores vetoriais de 128 bits, AVX usa 256 bits e AVX-512 usa 512 bits
    • Em precisão simples, eles processam 4, 8 e 16 números ao mesmo tempo; em precisão dupla, 2, 4 e 8 números, respectivamente
  • Quando FMA é usado, o desempenho máximo esperado pode dobrar, mas a precisão dos resultados pode mudar ligeiramente
    • O benchmark reporta essas diferenças como erros
  • Nos resultados SIMD em Windows, o Core i5 registrou 238 vezes o Cray 1 no Livermore Loops, 190 vezes no Linpack e 182 vezes no Whetstone
  • Em Linux, os resultados compilados com gcc 9.3.0 em ambiente Ubuntu foram ainda maiores
    • Os resultados com AVX foram 300 vezes, 259 vezes e 179 vezes o Cray 1
    • Os resultados com AVX-512 foram 359 vezes, 337 vezes e 226 vezes
  • Se o executável AVX-512 for executado em uma CPU antiga sem essa opção, o programa falha

Vector Whetstone e comparação com supercomputadores antigos

  • O Vector Whetstone executa a mesma função do Whetstone escalar, mas sobre posições contíguas de memória definidas por um parâmetro de comprimento vetorial
  • O Cray 1 atingia desempenho máximo com comprimento vetorial de 64 palavras ou mais, exibindo um padrão em dente de serra
  • A tabela inclui resultados de Whetstone escalar e vetorial para 13 supercomputadores de 1978 a 1991
    • O Cray Y-MP é apresentado com aproximadamente o dobro do clock e dos MFLOPS escalares do Cray 1, e 4 vezes os MFLOPS vetoriais
    • O Cray Y-MP é um sistema com duas unidades vetoriais
  • Os resultados do Core i5 com AVX-512 no Vector Whetstone são média de 28.303MFLOPS em precisão simples e 20.346MFLOPS em precisão dupla
    • 602 vezes e 433 vezes o Cray 1
    • A velocidade máxima em precisão simples é 75,1GFLOPS
  • O Vector Whetstone do Raspberry Pi 400 alcança média de 2131MFLOPS em precisão simples e 1184MFLOPS em precisão dupla
    • 45 vezes e 25 vezes o Cray 1

Whetstone multithread e MP MFLOPS

  • O MP Whetstone executa várias instâncias do código Whetstone padrão em um único programa com 1, 2, 4 e 8 threads
    • Ele é usado para mostrar a vazão multicore em comparação com um único núcleo de CPU
  • O notebook com Core i5 operou em cerca de 4150MHz com 1 e 2 threads, e em cerca de 3800MHz com 4 e 8 threads, segundo o Performance Monitor
  • Os resultados do MP Whetstone com 8 threads são os seguintes
    • O notebook com Core i5 e AVX-512 alcança 1521 vezes o Cray 1
    • O celular Android com Kryo 570 chega a 757 vezes
    • O Raspberry Pi 400 chega a 400 vezes
  • MP MFLOPS é um benchmark criado para executar combinações de multiplicações e somas em ponto flutuante de modo a se aproximar do desempenho máximo
    • Ele executa 2, 8 e 32 floating point operations por palavra de dados
    • O padrão é 8 threads, mas na execução pode-se especificar até 64 threads por parâmetro
  • Os melhores resultados de MP MFLOPS do notebook com Core i5 são os seguintes
    • Precisão simples: 325.915MFLOPS, 2671 vezes o Cray 1
    • Precisão dupla: 160.641MFLOPS, 1317 vezes o Cray 1
    • Celular Android em precisão simples: 35.686MFLOPS, 293 vezes o Cray 1
    • Raspberry Pi 400 em precisão simples: 30.150MFLOPS, 247 vezes o Cray 1

Precisão numérica e resultados mais rápidos do que o esperado

  • No Livermore Loops com AVX-512, houve casos em que a precisão de alguns checksums caiu das tradicionais 15 a 16 casas para 12 a 13 casas
    • As operações fused parecem arredondar apenas uma vez, em vez de arredondar separadamente a cada instrução
  • Também foram registrados sumcheck fora do padrão ou diferenças de resultado no Linpack com AVX-512 e no Whetstone com SSE no notebook Core i5
  • Alguns resultados com SSE e AVX ficaram acima do máximo esperado em MFLOPS/MHz segundo a documentação
    • No exemplo SSE do Core i5 no Livermore Loops, o valor é 3,56MFLOPS/MHz, um nível considerado impossível sem FMA
    • O exemplo com AVX é 4,86MFLOPS/MHz, 21,5% acima do máximo previsto
  • A verificação do código desmontado mostrou que os exemplos SSE e AVX em questão não continham instruções no formato fused multiply and add
  • O código desmontado do MP MFLOPS com AVX-512 inclui instruções fused multiply/add/subtract
    • Há 21 instruções vetoriais aritméticas, e o número mínimo de instruções em formato FMA completo é 16, então a taxa de desempenho atingível é calculada como 76,19% do FMA completo
    • Com esse ajuste, a estimativa da velocidade máxima do Cray 1 nessa função cai de 160MFLOPS para 122MFLOPS

Diferenças que variam conforme o tipo de trabalho

  • As proporções representativas em relação ao Cray 1 para o Core i5 com AVX-512, o celular Android e o Raspberry Pi 400 variam bastante conforme o tipo de carga
  • Na comparação de classe núcleo único, o Core i5 com AVX-512 marca média de 359 vezes no Livermore Loops, 337 vezes no Linpack e 226 vezes no Whetstone
  • O celular Android registra 123 vezes no Livermore Loops, 74 vezes no Linpack e 151 vezes no Whetstone
  • O Raspberry Pi 400 fica em torno de 79 vezes no Livermore Loops, 50 vezes no Linpack e 96 vezes no Whetstone
  • Em cargas que aproveitam multiprogramação, multithreading e SIMD, a diferença fica muito maior do que na comparação simples de núcleo único, e o desempenho multicore se torna mais difícil de prever por causa da quantidade de núcleos, da redução de clock e de arquiteturas big/LITTLE em CPUs modernas

1 comentários

 
GN⁺ 2023-12-26
Opiniões no Hacker News
  • Quando vejo comparações assim, antes mesmo dos benchmarks fico curioso para saber qual teria sido o cálculo real mais “heroico” que provavelmente rodava em um Cray-1 na época, e como isso poderia ser reproduzido hoje em um equipamento como um Raspberry Pi
    Poderia ser um modelo meteorológico/climático, ou hidrodinâmica de radiação. Comparado a softwares modernos de análise por elementos finitos, a precisão quase certamente seria muito baixa, mas a tentativa em si parece divertida

    • Há uma boa chance de que fossem simulações de armas nucleares
      A primeira máquina foi para Los Alamos
      https://www.theatlantic.com/technology/archive/2014/01/these...
    • Como um dos primeiros clientes foi o European Centre for Medium-Range Weather Forecasts, provavelmente deve ter sido usado para previsão do tempo de médio prazo
    • Não era um Cray-1, mas alguns anos depois a Marinha usou um Cray 90 para fazer cálculos de dinâmica dos fluidos computacional modelando o escoamento ao redor de cascos, e o código foi escrito em Fortran
      Seria ótimo ter acesso de novo ao código escrito naquela época. Algo que levava minutos ou horas no Cray provavelmente rodaria hoje em poucos segundos em um Raspberry Pi
    • Dá para começar rodando o SPEC ‘06. Ele inclui microkernels dessas cargas de trabalho “heroicas”
    • Por volta de 1979, visitei as instalações do NCAR em Boulder e cheguei a sentar no assento do Cray-1 de lá
      Então sim, ele era usado para cálculos de tempo e clima
  • Eu conhecia alguém que trabalhava em um laboratório nacional que tinha seu próprio supercomputador Cray-1, instalado em uma sala de máquinas com uma grande janela de observação para os visitantes apreciarem
    Pouco antes de chegar um grande grupo de visitação VIP que ele conhecia, ele se escondeu dentro do Cray-1 e ficou esperando; quando o grupo chegou, saiu andando de dentro do Cray-1 fechando o zíper da calça jeans, com uma expressão sem graça e aliviada, fingiu surpresa ao ver o grupo o encarando boquiaberto do outro lado da janela e desapareceu às pressas

  • Além de benchmarks, fico imaginando se existe algum software que daria essa sensação de ser tão rápido
    Softwares que usamos hoje, como GUIs, IDEs, compiladores e suítes de escritório, parecem versões mais avançadas do que rodava em um 386. O software usado hoje no Met provavelmente foi projetado partindo do pressuposto de computadores milhões de vezes mais rápidos, mas deve existir em algum lugar software que na época precisava de um Cray

    • Não existe. O Cray-1 rodava trabalhos em lote, em sua maioria simulações científicas que levavam horas ou dias
      Havia uma interface de terminal, e ele não era usado para aplicações interativas em tempo real
    • Códigos antigos de física em Fortran parecem ser a possibilidade mais provável
      Por exemplo, calcular seções de choque de espalhamento a partir de elementos de matriz, ou tarefas com muita álgebra linear vetorizável
    • Muitas tarefas que naquela época levavam horas hoje poderiam levar menos de 1 segundo
      Pensando em engenharia mecânica, talvez na época simulassem como um carro se deforma em uma colisão. Hoje é possível executar em tempo real uma simulação parecida em videogames por diversão. Pelo que sei, em jogos quase não se faz isso porque um modelo fisicamente preciso não é realmente necessário, mas é possível
      O mesmo vale para renderização. Na época, cada quadro de Toy Story levava horas para renderizar, mas hoje, ainda que seja discutível, produzimos gráficos melhores em tempo real
  • Estou esperando o vídeo de continuação do Jeff Geerling colocando um Raspberry Pi dentro de um gabinete de Cray-1

    • Seria muito legal se saísse um gabinete de PC no formato do Cray-1
      Uma versão menor para Raspberry Pi também seria ótima
    • Ou então conectar em rede e colocar o máximo possível lá dentro
  • Faria mais sentido comparar com RISC-V com suporte a Vector 1.0
    Porque o Cray-1 era uma máquina vetorial

    • Alguma CPU RISC-V com suporte a vetores em hardware já saiu como chip real?
    • Ou então poderiam comparar com uma GPU ou TPU
  • Ao contrário do Cray-1, o Raspberry Pi não oferece espaço amplo para sentar

    • Alguém fez um cluster de Pi Zero com tema Cray; se for para um rato, talvez atenda ao requisito: https://www.clustered-pi.com/blog/clustered-pi-zero.html
    • Pelo preço de um Cray, mesmo sem ajustar pela inflação, dá para comprar uma quantidade razoável de cadeiras
      Ainda mais considerando a economia na conta de luz
    • Verdade, os gabinetes de Pi têm sido decepcionantes
      Quase nenhum tem refrigeração adequada. O flirc é bom, e os com ventoinha são simplesmente irritantes
      Eu gostaria que existisse um gabinete de Pi com protoboard embutida
      Ou então um gabinete em que desse para sentar confortavelmente
    • No design minimalista, também não há o mesmo charme de um Cray-1
  • Em 2013, comprei a CPU Intel x86 mais nova e mais cara para montar um PC novo
    Minha esposa entrou no escritório, olhou para os gráficos na tela e disse: “Não parece que você está trabalhando, mas também não sei bem o que está fazendo?”
    Respondi: “Estou calculando em que momento meu PC teria sido o computador mais rápido do planeta. Pelo que parece, em 1992 ele teria calculado melhor do que um supercomputador de última geração do Departamento de Defesa, de 90 milhões de dólares e que ocupava uma sala inteira. Dá para acreditar?”
    Ela respondeu: “Legal. E como isso ajuda a pagar a fatura do nosso cartão?”
    Brincadeiras à parte, há bastante dados para esse tipo de cálculo. Por exemplo, aqui: https://en.wikipedia.org/wiki/TOP500
    Extrapolando para o passado ou encontrando dados antigos, meu cálculo levou a uma conclusão absurda do tipo: se eu levasse este PC para 1981, ele seria mais rápido do que todos os computadores da Terra somados

    • Um dos meus sistemas favoritos no Top500 é o SystemX
      https://www.top500.org/system/173736/
      Quando entrou em operação em 2004, esse conjunto de 1.100 sistemas Apple PowerPC 970 era o 7º computador mais poderoso da lista
      Seu desempenho no Linpack era de 12.250,00 GFlop/s
    • Outra coisa divertida é descobrir o ano mais recente em que meu celular poderia ter entrado na parte de baixo da lista Top500
  • O Cray-1 tem um sofá muito melhor

    • O assento acolchoado do Cray-1 cobre a fonte de alimentação
      Fiquei triste ao ver que o Cray-1 do Computer Museum em Mountain View estava sendo usado como depósito de materiais de catering para eventos no lobby
    • Precisamos trazer de volta os assentos em computadores
  • Em resumo, 10 anos atrás o Raspberry Pi e celulares Android eram algumas vezes mais rápidos, e hoje são cerca de 100 vezes mais rápidos
    Considerando que cabem no bolso, é bem impressionante

    • Ainda bem que temos sistemas operacionais modernos para deixá-los mais lentos /s
  • Alguns anos atrás comparei uma SPARCstation 20 Model 60 com o Raspbian em um Raspberry Pi. Essa SPARCstation é o sistema de referência do BYTE UNIX Benchmark: https://news.ycombinator.com/item?id=10795324
    Pelo benchmark, o Raspberry Pi original tinha de 6 a 7 vezes o desempenho da SPARCstation 20