terça-feira, 8 de novembro de 2011

Entendendo os supercomputadores

Texto de autoria do grande Carlos Morimoto

Embora muito grandes e caros, os supercomputadores oferecem um poder de processamento milhares de vezes superior ao de qualquer desktop doméstico. As aplicações são muitas, englobando principalmente pesquisas científicas, aplicações militares e diversos tipos de aplicativos financeiros, meteorológicos e simulações complexas; tarefas que envolvem um volume absurdo de cálculos e são necessárias para governos e instituições que podem pagar vários milhões por um computador o mais rápido possível.
O termo "supercomputador" começou a ser usado na década de 1960 para distinguir os sistemas de alto desempenho dos computadores de pequeno e médio porte, destinados a tarefas secundárias. Antes disso, o termo não faria muito sentido, já que todos os computadores eram "super" no sentido de serem muito grandes e caros.


Na época existiam também os "minicomputadores", que eram sistemas do tamanho de um armário, capazes de executar tarefas especializadas. Como pode imaginar, o termo "microcomputador" foi cunhado com o surgimento dos computadores pessoais, que eram muito menores. Hoje em dia esses termos não fazem muito sentido (afinal, hoje em dia um notebook de 3 kg é considerado "grande"), mas não deixam de ser uma curiosidade interessante.
Voltando ao tema central, o primeiro supercomputador de sucesso comercial foi o CDC 6600, lançado em 1964. Ele oferecia um poder de processamento de cerca de 3 megaflops (similar ao desempenho de um 486), um valor impressionante para a época, considerando que ele ainda era baseado em placas de circuito com transistores individuais e não em microchips.
Para atingir esse nível de desempenho, foi adotado o uso de um conjunto de instruções bastante simples, que permitia que os circuitos de processamento operassem a uma frequência de 10 MHz, compensando a falta de flexibilidade com simplicidade e potência bruta. Esta filosofia levou ao aparecimento dos processadores RISC, cujo legado pode ser encontrado mesmo nos processadores atuais da Intel e AMD, que combinam unidades de execução simplificadas com circuitos de apoio destinados a manter a compatibilidade com as instruções x86.
Assim como outros supercomputadores da época, o CDC 6600 já rodava um sistema operacional primitivo e era usado através de terminais burros, que incluíam o teclado e monitor. Isso permitia que ele fosse acessado por vários usuários simultaneamente, ajudando a justificar o custo. Também eram usadas unidades de armazenamento em fita, impressoras, leitores de cartões (cartões perfurados, não cartões de memória… :) e diversos outros periféricos.


Na década de 1970 surgiu o microchip, que além de possibilitar o surgimento dos computadores pessoais, fez com que o desempenho dos supercomputadores crescesse assustadoramente. Um bom exemplo é o Cray-1, lançado em 1976.
Ele utilizava uma unidade de processamento composta por cerca de 200 mil transistores, que processava instruções de 64 bits, operava a 80 MHz e utilizava um total de 8 MB de memória RAM. Ele oferecia um desempenho estimado em 160 megaflops, o que é similar ao oferecido por um Pentium III de 600 MHz, porém atingido 23 anos antes.
Como pode imaginar, usar um clock de 80 MHz em um supercomputador composto por várias placas de circuito separadas não era uma tarefa simples. A temporização dos ciclos de clock era tão curta que se aproximava do tempo que o sinal elétrico demorava para percorrer o circuito. Isso levou ao uso de um formato de semi-círculo (para permitir que os circuitos ficassem mais próximos) combinado com um sistema de refrigeração baseado em um sistema de gás freon pressurizado. Apesar de tudo, ele era relativamente compacto para um supercomputador, pesando apenas 5.5 toneladas:

O Cray-1 marcou época e deu origem à uma família bem-sucedida de supercomputadores comerciais, incluindo o Cray XMP/4 de 1983 (que era capaz de quebrar a barreira de 1 gigaflop rodando aplicativos bem otimizados) e o Cray2/8 de 1985, que atingiu a impressionante marca de 2.4 gigaflops.
Durante a década de 1990, os supercomputadores migraram para arquiteturas de processamento distribuído (basicamente, eles se tornaram clusters de grande escala), onde em vez de um único sistema (como no caso do Cray-1) são usados vários pequenos servidores, baseados em processadores da Intel, AMD ou (no caso dos supercomputadores da IBM) em processadores PowerPC ou PowerXCell:



Via de regra, cada nó utiliza de um a quatro processadores e uma quantidade suficiente de memória RAM. Em geral, são utilizadas unidades especializadas de armazenamento (cada uma com vários HDs em RAID e grandes caches de dados) em vez de HDs em cada nó, mas isso não é uma regra.
Um nó sozinho possui poder de processamento similar ao de um servidor (ou mesmo de um PC doméstico) high-end. O grande segredo é a forma como eles são interligados (usando interfaces de rede ou alguma interface proprietária), o que os torna partes do mesmo sistema de processamento, assim como neurônios interligados para formar um cérebro. Com isso, o grande limite passa a ser o capital disponível, já que é possível obter mais processamento adicionando mais nós.
Essa abordagem permitiu simplificar o desenvolvimento e reduzir drasticamente os custos por unidade de processamento. Embora supercomputadores como o Roadrunner e o Jaguar custem dezenas de milhões de dólares, o custo por teraflop de processamento é muitas vezes inferior ao de um PC doméstico. Basicamente, os supercomputadores se tornaram uma opção de processamento no atacado. :)
Outro efeito colateral é que com o processamento distribuído o poder de processamento dos supercomputadores passou a avançar muito mais rápido, com a diferença entre eles e os PCs domésticos aumentando rapidamente em vez de diminuir.
Um bom lugar para se manter informado sobre os avanços na área é a lista do Top500, que duas vezes por ano publica um ranking atualizado dos 500 supercomputadores mais poderosos do mundo: http://www.top500.org/
A performance é estimada através do HPL, uma versão especializada do Linpack destinada a sistemas de processamento distribuído, que mede o desempenho bruto em cálculos de ponto flutuante. Embora não seja perfeito, o teste oferece uma boa estimativa do desempenho em situações reais, já que (diferente do que temos nos PCs domésticos), os software usados são quase sempre bem otimizados para cada arquitetura, extraindo o máximo de desempenho do equipamento.
Entre novembro de 2004 e junho de 2008, o computador mais rápido do planeta foi o IBM Blue Gene/L, um descendente do Deep Blue (que derrotou Garry Kasparov no xadrez em 1997). Ele era originalmente composto por de 65.532 processadores Dual PowerPC 440 (131.072 núcleos no total), com 32 terabytes de memória RAM, 1.01 petabytes de armazenamento e um poder de processamento bruto de 280.6 teraflops.
Em vez de utilizar chips x86 e placas-mãe para servidores, a IBM optou por utilizar um layout especializado, privilegiando a densidade. O componente básico são placas (batizadas de "compute cards") contendo dois processadores PowerPC 440 dual-core (4 núcleos por placa no total) com 1 GB de memória DDR (512 MB por chip) e uma interface de comunicação. Os chips operam a apenas 700 MHz, o que foi uma decisão deliberada para reduzir o consumo e permitir agrupar um maior número de chips por gabinete.

As placas com os processadores são espetadas em placas de interface (batizadas de "node boards"), cada uma contendo 16 compute cards (ou seja, 32 chips) e mais dois nós de interface, destinados a coordenar a comunicação e executar funções de gerenciamento:


As node boards são então montadas em racks, cada um contendo 32 placas (1024 chips no total), com a comunicação entre as placas e entre os racks sendo feita através de interfaces de rede.
A versão inicial do Blue Gene/L era composta por 64 destes racks, organizados em filas de oito, o que formava um conjunto relativamente pequeno, que ocupava cerca de 230 metros quadrados. Esta foto de divulgação da IBM mostra parte das instalações:


O Blue Gene/L foi atualizado em 2007, o que elevou os totais para 106.496 processadores, 69 TB de memória e 1.9 PB de armazenamento, com um desempenho bruto de 478.2 teraflops. Isso aumentou bastante a sobrevida do sistema, permitindo que ele continuasse por mais um ano no topo da lista.
Em 2008 o Blue Gene/L perdeu o posto de mais rápido para o Roadrunner, outro sistema da IBM, dessa vez baseado em uma combinação de processadores AMD Opteron 2210 e processadores PowerXCell, fabricados pela própria IBM.
O Roadrunner inclui um total de 19.440 processadores, sendo 6480 Opterons dual-core e 12960 PowerXCells, acompanhados por 103.6 TB de memória RAM e processadores adicionais para gerenciamento de dados e comunicação. Isso resultou em um desempenho bruto de 1.1 petaflops (1105 teraflops), mais de duas vezes mais do que a versão atualizada do Blue Gene/L.
Apesar disso, o Roadrunner não ficou muito tempo no topo da lista. Em 2009 ele foi superado pelo Cray XT5-HE (Jaguar), que oferece um desempenho bruto de 1.76 petaflops.
O XT5-HE é também baseado em processadores da AMD, desta vez com o Opteron de 6 núcleos, baseado no core Istambul. Ele inclui um total de nada menos que 37.376 processadores, ou seja, 224.256 núcleos (um quarto de milhão!).
Diferente do Blue Gene/L e do Roadrunner que utilizam uma arquitetura própria, ele utiliza a arquitetura padrão para processadores AMD, com links HyperTransport e chipsets regulares, com dois processadores e 16 GB de memória RAM por nó. A única grande diferença em relação à arquitetura de um servidor típico é que ele utiliza placas especiais, que agrupam 4 nós em cada gabinete, aumentando a densidade:


O Jaguar inclui nada menos que 4.672 gabinetes como este, ligados através de uma topologia proprietária de rede, com um total de 300 TB de memória e 10 PB de armazenamento centralizado. Não é à toa que ele roubou o posto de supercomputador mais rápido.

Referencia

Nenhum comentário: