# data[].attributes.attachment_link.readable_text
Nos primórdios da computação os sistemas eram todos centralizados. Todo o processamento era feito no mainframe. Os terminais eram usados apenas para entrada/saída de dados. Com o tempo, surgiram novas arquiteturas de computação que buscavam descentralizar o processamento. Foi quando surgiram os primeiros sistemas distribuídos. A ideia, como o próprio termo sugere, era de distribuir o processamento ao invés de adotar uma arquitetura centralizada no mainframe.
Conceito de Sistema Distribuído
O conceito de sistema distribuído é de um sistema que possui componentes localizados em computadores interligados em rede e que se comunicam e coordenam suas ações através da troca de mensagens entre os componentes. É comum pensarmos em componentes como sendo apenas servidores e máquinas conectadas em rede, mas quando falamos de componentes podem ser componentes de hardware ( servidores ) ou de software ( aplicações e serviços ).

Os componentes interligados em rede podem estar separados por qualquer distância. No mesmo edifício de uma empresa, na mesma cidade, mesmo estado, no mesmo país ou até em continentes diferentes.
Exemplos de Sistemas Distribuídos
Em nossos dias todas as aplicações são baseadas em redes de computadores. Nenhuma aplicação ou serviço funciona de forma isolada. As redes são projetadas de forma a suportar uma ampla gama de serviços e aplicações.

São alguns exemplos de sistemas distribuídos:

A internet é o maior exemplo de sistema distribuído

Qualquer aplicação intranet

Qualquer aplicação mobile

Aplicações e serviços baseados na Computação em Nuvem

A Internet em particular é um sistema distribuído muito grande. Ela conecta usuários através de sites e serviços, e-mail, transferência de arquivos, chat, etc. Os serviços estão localizados em máquinas dispersas que são interligadas por algum tipo de rede. Diferentes aplicações e serviços se comunicam através da rede, ele trocam mensagens através de um meio de comunicação comum. Estes meios de comunicação permitem que aplicações e serviços em plataformas diferentes consigam se comunicar e cooperar. Eles são chamados de protocolos.

A Intranet é uma parte da Internet administrada separadamente por uma empresa. Uma intranet é composta de várias redes locais ( LANs ) interligadas por conexões de backbone. A configuração de rede de uma Intranet pode variar desde uma LAN em um único site até um conjunto de LANs interconectadas pertencentes às filiais de uma grande empresa, localizadas inclusive em países diferentes.

Uma Intranet pode ser conectada à Internet através de um roteador que permite aos usuários da Intranet terem acesso a serviços da Internet, serviços que são providos de fora da empresa. Também é possível que os usuários de outras Intranets tenham acesso aos serviços que a Intranet oferece. A segurança é crucial pois não deve ser permitido que um usuário de uma empresa concorrente tenha acesso aos projetos e clientes de uma empresa, da mesma forma que um hospital pode não querer que informações dos seus pacientes sejam acessadas por empresas farmacêuticas.

Desta forma vemos que os sistemas distribuídos já são uma realidade, sendo importante conhecer os conceitos e arquiteturas de sistemas distribuídos.

A Computação móvel também é um tipo de sistema distribuído que conecta diversos dispositivos tais como notebooks, PDA, smartphone, Tablet além de outros dispositivos que são incorporados em carros, geladeiras, máquinas de lavar, smartwatch, etc. Estes dispositivos acessam serviços através da Internet. Com o avanço das redes sem fio e da miniaturização do hardware temos componentes interligados por redes sem fio com alta portabilidade e capacidade de se conectar com redes em lugares diferentes.

A computação móvel também é chamada computação nômade e permite a execução de tarefas de computação com alta mobilidade. Os recursos são acessados através da internet de qualquer lugar.

Daqui pra frente vamos nos referir aos sistemas distribuídos como SD.
Por que Sistemas Distribuídos?
O compartilhamento de recursos é um bom motivo para os SD. Recursos podem ser compartilhados por diferentes servidores e consumidos por clientes. Serviços podem ser compartilhados através da internet, sendo encapsulados em objetos que podem ser acessados por outros objetos ou por aplicações cliente.

O compartilhamento de recursos é a principal motivação para se construir sistemas distribuídos. O recurso pode ser um componente de hardware, um disco ou impressora, um software, um serviço, um arquivo e objetos de dados de todos os tipos, áudio, vídeo, etc.
Os Desafios dos Sistemas Distribuídos.

Os componentes de um sistema distribuídos são um grande desafio. Em sistemas centralizados isso não existe pois há um único componente que é o próprio sistema centralizado. Em SD é um pouco diferente pois temos diversos componentes espalhados, ou distribuídos por diferentes servidores, que podem ser heterogêneos, com diferentes sistemas operacionais, de diferentes fabricantes, com diferentes capacidades de processamento.

Daí surgem diversos desafios na computação distribuída, entre os quais podemos citar:

Segurança

Escalabilidade

Desempenho

Comunicação entre os componentes

Tolerância a falhas

Todos estes aspectos devem ser considerados quando trabalhamos com sistemas distribuídos. Em outras palavras:

Como podemos nos assegurar que somente os clientes válidos podem ter acesso aos serviços/componentes do sistema? ( Segurança )

Como podemos garantir que o sistema distribuído suportará aumento no número de usuários ou requisições? ( Escalabilidade )

Como podemos garantir um desempenho aceitável em um sistema distribuído, onde os componentes estão interligados por redes que nem sempre possuem a mesma velocidade e onde os componentes nem sempre tem a mesma capacidade de processamento, sem que surjam gargalos que comprometam o desempenho. ( Desempenho )

Como podemos garantir que todos os componentes possam se comunicar, considerando ambientes heterogêneos de rede, servidores, diferentes padrões de arquitetura e protocolos de comunicação? ( CORBA, .net, RMI, SOAP, REST, etc. )

Como podemos garantir a tolerância a falhas em um sistema com componentes distribuídos em servidores conectados a redes e ambientes? ( Tolerância a falhas )
A solução envolve não apenas projeto e arquitetura do software mas também infraestrutura na qual o software será executado.

Consequencias do uso de Sistemas Distribuidos
Como em um SD os componentes estão dispersos geograficamente surgem consequências a respeito dessa característica:

Concorrência - Como os processos são distribuídos pela rede a execução concorrente de programas é a norma. Um servidor executa um processo enquanto outro processo é executado em outra máquina sendo que ambos compartilham recursos como banco de dados, largura de banda de rede, discos, etc. A disputa por estes recursos compartilhados pelos processos que são executados concorrentemente é uma consequência dos SD e também um desafio a ser superado. A coordenação de processos em execução concorrente é uma das formas de tratar a concorrência.

Inexistência de relógio global - Em um SD, os processos precisam cooperar de forma coordenada através da troca de mensagens. A coordenação considera compartilhamento do tempo em que os processos são executados. O problema é que existem limites para a precisão com a qual os servidores sincronizam os relógios em uma rede. O fuso horário é um fator complicador na sincronização dos processos.

Falhas independentes - Em qualquer sistema existem falhas e nos SD não é diferente. Os projetistas devem considerar as consequencias de cada falha. Falhas de rede, falhas de banco de dados, falhas de comunicação, falhas de todos os tipos acontecem.

As falhas na rede são problemáticas pois elas resultam no isolamento dos componentes do SD que não podem mais se comunicar e trabalhar juntos. Lentidão na rede também pode afetar os processos em execução.

A falha de um componente ou termino de um processo em um componente nem sempre é percebida imediatamente pelos demais componentes.

# data[].attributes.attachment_link.title
1 - Caracterização de Sistemas Distribuidos - Prof. Fernando De Siqueira - Sistemas Distribuidos

# data[].attributes.attachment_link.description
Nos primórdios da computação os sistemas eram todos centralizados. Todo o processamento era feito no mainframe. Os terminais eram usados apenas para entrada/saída de dados. Com o tempo, surgiram novas arquiteturas de computação que buscavam descentralizar o processamento. Foi quando surgiram os primeiros sistemas distribuídos.

# data[].attributes.attachment_link.title
O que é um sistema distribuído? | Atlassian

# data[].attributes.attachment_link.description
Um sistema distribuído é uma coleção de componentes em diferentes computadores em rede que trabalham juntos para atingir um objetivo comum.

# data[].attributes.attachment_link.authors[].name
Danilo Aparecido - Torne-se um programador

# data[].attributes.attachment_link.readable_text
Introdução

Quando o assunto é computação de alto desempenho, não é difícil pensarmos em servidores sofisticados e caros respondendo por este trabalho. No entanto, é possível obter resultados tão bons quanto ou superiores a partir de alguma solução de cluster - uma tecnologia capaz de fazer computadores mais simples trabalharem em conjunto, como se formassem uma máquina só.

Neste texto, você saberá o que é computação em cluster, verá quais são as principais características do conceito e conhecerá algumas de suas aplicações, assim como soluções do tipo.

O que é cluster?

Cluster (ou clustering) é, em poucas palavras, o nome dado a um sistema que relaciona dois ou mais computadores para que estes trabalhem de maneira conjunta no intuito de processar uma tarefa. Estas máquinas dividem entre si as atividades de processamento e executam este trabalho de maneira simultânea.

Cada computador que faz parte do cluster recebe o nome de nó (ou node). Teoricamente, não há limite máximo de nós, mas independentemente da quantidade de máquinas que o compõe, o cluster deve ser "transparente", ou seja, ser visto pelo usuário ou por outro sistema que necessita deste processamento como um único computador.

Os nós do cluster devem ser interconectados, preferencialmente, por uma tecnologia de rede conhecida, para fins de manutenção e controle de custos, como a Ethernet. É extremamente importante que o padrão adotado permita a inclusão ou a retirada de nós com o cluster em funcionamento, do contrário, o trabalho de remoção e substituição de um computador que apresenta problemas, por exemplo, faria a aplicação como um todo parar.

A computação em cluster se mostra muitas vezes como uma solução viável porque os nós podem até mesmo ser compostos por computadores simples, como PCs de desempenho mediano. Juntos, eles configuram um sistema de processamento com capacidade suficiente para dar conta de determinadas aplicações que, se fossem atendidas por supercomputadores ou servidores sofisticados, exigiriam investimentos muito maiores.

Um antigo cluster montado com desktops - Imagem por Wikipedia

Não é necessário haver um conjunto de hardware exatamente igual em cada nó. Por outro lado, é importante que todas as máquinas utilizem o mesmo sistema operacional, de forma a garantir que o software que controla o cluster consiga gerenciar todos os computadores que o integram.

Tipos de clusters

Há uma enormidade de aplicações que só podem ser atendidas satisfatoriamente com computação de alto desempenho: sistemas meteorológicos, ferramentas de mapeamento genético, simuladores geotérmicos, programas de renderização de imagens tridimencionais, entre tantos outros. Com o advento da computação em nuvens, este cenário se torna ainda mais amplo: pode-se ter uma infraestrutura tecnológica respondendo a vários clientes simultaneamente de maneira remota, por exemplo.

Em todos estes casos e em qualquer outro tipo de aplicação crítica - que não pode parar de funcionar ou não pode perder dados (os sistemas bancários, por exemplo) -, o cluster pode se mostrar como uma solução viável, desde que o tipo mais adequado seja escolhido.

Há vários tipos de cluster, mas os principais são: cluster de alto desempenho, cluster de ata disponibilidade e dluster de balanceamento de carga.

Cluster de Alto Desempenho (High Performance Computing Cluster)

Clusters de alto desempenho são direcionados a aplicações bastante exigentes no que diz respeito ao processamento. Sistemas utilizados em pesquisas científicas, por exemplo, podem se beneficiar deste tipo de cluster por necessitarem analisar uma grande variedade de dados rapidamente e realizar cálculos bastante complexos.

O foco deste tipo é o de permitir que o processamento direcionado à aplicação forneça resultados satisfatórios em tempo hábil, mesmo que haja centenas de milhares de gigaflops envolvidos com a tarefa (1 gigaflop corresponde a 1 bilhão de instruções de ponto flutuante executadas por segundo).

Cluster de Alta Disponibilidade (High Availability Computing Cluster)

Nos clusters de alta disponibilidade, o foco está em sempre manter a aplicação em pleno funcionamento: não é aceitável que o sistema pare de funcionar, mas se isso acontecer, a paralização deve ser a menor possível, como é o caso de soluções de missão crítica que exigem disponibilidade de, pelo menos, 99,999% do tempo a cada ano, por exemplo.

Para atender a esta exigência, os clusters de alta disponibilidade podem contar com diversos recursos: ferramentas de monitoramento que identificam nós defeituosos ou falhas na conexão, replicação (redundância) de sistemas e computadores para substituição imediata de máquinas com problemas, uso de geradores para garantir o funcionamento em caso de queda de energia, entre outros.

Em determinadas circunstâncias, é tolerável que o sistema apresente algum grau de perda de desempenho, especialmente quando esta situação é consequência de algum esforço para manter a aplicação em atividade.

Cluster para Balanceamento de Carga (Load Balancing)

Em clusters de balanceamento de carga, as tarefas de processamento são distribuídas o mais uniformemente possível entre os nós. O foco aqui é fazer com que cada computador receba e atenda a uma requisição e não, necessariamente, que divida uma tarefa com outras máquinas.

Imagine, por exemplo, que um grande site na internet receba por volta de mil visitas por segundo e que um cluster formado por 20 nós tenha sido desenvolvido para atender a esta demanda. Como se trata de uma solução de balanceamento de carga, estas requisições são distribuídas igualmente entre as 20 máquinas, de forma que cada uma receba e realize, em média, 50 atendimentos a cada segundo.

Não basta ao cluster de balanceamento de carga ter um mecanismo meramente capaz de distribuir as requisições - é necessário que este procedimento seja executado de forma a garantir um "equilíbrio" na aplicação. Para tanto, o mecanismo pode monitorar os nós constantemente para verificar, por exemplo, qual máquina está lidando com a menor quantidade de tarefas e direcionar uma nova requisição para esta.

O balanceamento de carga pode ser utilizado em vários tipos de aplicações, mas o seu uso é bastante comum na internet, já que soluções do tipo têm maior tolerância ao aumento instantâneo do número de requisições, justamente por causa do equilíbrio oriundo da distribuição de tarefas.

Combinação de tipos de clusters

É válido frisar que uma solução de cluster não precisa se "prender" a apenas um tipo. Conforme a necessidade, pode-se combinar características de tipos diferentes no intuito de atender plenamente à aplicação.

Por exemplo, uma loja na internet pode utilizar um cluster de alta disponibilidade para garantir que suas vendas possam ser realizadas 24 horas por dia e, ao mesmo tempo, aplicar balanceamento de carga para suportar um expressivo aumento eventual no número de pedidos causados por uma promoção.

Funcionamento básico dos clusters

Para que um cluster seja constituído, é necessário fazer uso de alguns elementos básicos. O primeiro deles você já conhece: os equipamentos a serem utilizados como nós.

Para isso, pode-se usar máquinas construídas especificamente para funcionar como nós. Neste caso, os computadores teriam apenas dispositivos de hardware imprescindíveis ao cluster.

Cluster avançado construído com equipamentos específicos

Mas, também é possível utilizar computadores "convencionais", como desktops para fins domésticos ou para uso em escritório. Assim, uma universidade ou uma empresa, por exemplo, pode utilizar máquinas que foram substituídas por modelos mais recentes para criar um cluster e, eventualmente, economizar com a aquisição de servidores.

Os nós podem ainda ser não dedicados ou dedicados. No primeiro caso, cada computador que faz parte do cluster não trabalha exclusivamente nele. No segundo, o nó é utilizado somente para este fim, fazendo com que dispositivos como teclados e monitores sejam dispensáveis - se, por algum motivo, for necessário acessar uma máquina em particular, pode-se fazê-lo via terminal, a partir do nó principal, por exemplo.

Outro elemento importante é o sistema operacional. Como já informado, os nós não precisam ser exatamente iguais no que diz respeito ao hardware, mas é essencial que todas os computadores utilizem o mesmo sistema operacional.

Esta homogeneidade é importante para diminuir a complexidade de configuração e manutenção do sistema, e garantir que os procedimentos rotineiros ao cluster, como monitorização, distribuição de tarefas e controle de recursos sejam executados de maneira uniforme. Para reforçar estes aspectos, pode-se até mesmo adotar sistemas operacionais preparados especialmente para clustering.

Do ponto de vista do software, o cluster conta ainda com o elemento que faz o papel de middleware: trata-se de um sistema que permite o controle do cluster em si e, portanto, está intimamente ligado ao sistema operacional. É o middleware que lida, por exemplo, com as bibliotecas que fazem toda a comunicação do cluster - uma delas é o padrão MPI ( Message Passing Interface).

Além de trabalhar com o gerenciamento do cluster, o middleware oferece uma interface para que um administrador possa configurar o cluster, ferramentas para manutenção e otimização, recursos de monitoramento e assim por diante.

Por padrão, o middleware é instalado em uma máquina chamada de nó controlador (ou nó mestre). O nome deixa claro: trata-se do já mencionado nó principal, que efetivamente controla o cluster a partir da distribuição de tarefas, do monitoramento e de procedimentos relacionados.

A comunicação entre os nós - que é onde está a delimitação do que constitui o cluster em si - é feita a partir de uma tecnologia de rede local. Os padrões Ethernet (Gigabit Ethernet, Fast Ethernet, etc) são bastante utilizados justamente por serem mais comuns e, portanto, melhor suportados e menos custosos. Mas há outras opções viáveis, entre elas, o Myrinet e o InfiniBand, ambos com características bastante apropriadas para clustering.

Cluster Beowulf

O Beowulf não é, necessariamente, um middleware, como muitas pensam. Na verdade, este nome faz referência a um padrão de clustering disponibilizado pela NASA ( National Aeronautics and Space ) em 1994 e amplamente adotado desde então.

Originalmente, Beowulf é o nome de um poema extenso e bastante antigo, cujo manuscrito foi encontrado no século XI. A obra descreve os atos de um herói de mesmo nome que se destaca por sua força descomunal e que, portanto, enfrenta um perigoso monstro para salvar um reino. A história serviu de inspiração para que os pesquisadores Thomas Sterling e Donald Becker, da NASA, batizassem o projeto de cluster no qual trabalhavam de Beowulf.

Um cluster Beowulf se define, basicamente, pela ênfase nas seguintes características:

- entre os nós, deve haver pelo menos um que atue como mestre para exercer o controle dos demais. As máquinas mestres são chamadas de front-end; as demais, de back-end. Há a possibilidade de existir mais de um nó no front-end para que cada um realize tarefas específicas, como monitoramento, por exemplo;

Esquema básico de um cluster Beowulf

- a comunicação entre os nós pode ser feita por redes do tipo Ethernet, mais comuns e mais baratas, como você já sabe;

- não é necessário o uso de hardware exigente, nem específico. A ideia é a de se aproveitar componentes que possam ser encontrados facilmente. Até mesmo PCs considerados obsoletos podem ser utilizá-los;

- o sistema operacional deve ser de código aberto, razão pela qual o Linux e outras variações do Unix são bastante utilizados em cluster Beowulf. O MOSIX, a ser abordado no próximo tópico, é uma opção bastante usada para este fim;

- os nós devem se dedicar exclusivamente ao cluster;

- deve-se fazer uso de uma biblioteca de comunicação apropriada, como a PVM ( Parallel Virtual Machine) ou a MPI ( Message Passing Interface). Ambas são direcionadas à troca de mensagens entre os nós, mas o MPI pode ser considerado mais avançado que o PVM, uma vez que consegue trabalhar com comunicação para todos os computadores ou para apenas um determinado grupo.

Perceba que, com estas características, pode-se construir um cluster "poderoso" e, ao mesmo tempo, poupar gastos com equipamentos, licenças de software e manutenção. O cluster montado por Thomas Sterling e Donald Becker para a NASA, por exemplo, era composto por 16 PCs com processador Intel 486 DX4 e sistema operacional Linux conectados por uma rede Ethernet de 10 Mb/s. Como se vê, esta foi uma solução consideravelmente mais barata e, possivelmente, menos complexa que um supercomputador.

É possível saber mais sobre o Beowulf em www.beowulf.org.

Algumas soluções de clusters

Há uma quantidade razoável de soluções para clusters, mas algumas se sobressaem, especialmente aquelas que se relacionam com Linux e outros sistemas baseados em Unix. Vejamos rapidamente opções do tipo que se destacam bastante.

MOSIX

O ( Multicomputer Operating System for Unix) é uma das opções mais tradicionais quando o assunto é clustering. Trata-se, resumidamente, de um conjunto de softwares que permite a implementação de clusters em sistemas baseados no Unix, tendo forte ênfase em balanceamento de carga e alto desempenho.

Entre as suas principais características estão: possibilidade de trabalhar com nós dedicados e não dedicados; suporte não apenas a CPUs, mas também a GPUs (a partir da versão 2); migração dinâmica de processos (um nó mais potente pode assumir determinada tarefa para evitar sobrecarga em outro); e possibilidade de remoção e inclusão de nós sem interromper o cluster.

Como o MOSIX também trabalha com nós não dedicados, é possível inclusive fazer com que as máquinas de um escritório passem a trabalhar no cluster após o horário do expediente, por exemplo. Mas, mesmo se houver usuários utilizando os nós, é possível manter o cluster em funcionamento, já que as atividades do MOSIX são totalmente "transparentes", ou seja, seu trabalho no computador não é perceptível.

O MOSIX não é uma solução gratuita. Houve uma versão sua de código aberto chamada OpenMosix que, infelizmente, foi descontinuada em março de 2008.

OpenSSI

O é uma solução aberta para clusters focada em ambientes Linux. O nome tem como base o conceito de SSI ( Single System Image), ou seja, um sistema que considera vários nós, mas se parece, no ponto de vista do usuário, apenas como um único computador.

A "visão" de apenas uma única máquina também é válida para os softwares: este não precisam ser alterados para "enxergar" cada nó e assim rodar no cluster, facilitando a implementação da solução.

O OpenSSI pode lidar tanto com alto desempenho quanto com alta disponibilidade, além de possuir recursos para balanceamento de carga.

Kerrighed

O é outra opção SSI aberta para clusters que tem como base o Linux. Esta solução se destaca principalmente por fazer uso do conceito de Distributed Shared Memory ( DSM) - algo como "Memória Compartilhada Distribuída" -, onde a memória de cada nó se "soma" a dos demais, como se formassem um volume único à disposição de todo o cluster.

Esta abordagem oferece vários benefícios: parte da memória pode ser disponibilizada para todos os clientes da aplicação; sistemas desenvolvidos para rodar de maneira centralizada podem ser executados de maneira distribuída dentro da solução; o cluster pode se comportar como se fosse uma máquina com múltiplos processadores; entre outros.

Vantagens e desvantagens dos clusters

Neste ponto do texto, você certamente já compreendeu as vantagens de um cluster. Eis as principais:

- pode-se obter resultados tão bons quanto ou até superiores que um servidor sofisticado a partir de máquinas mais simples e mais baratas (ótima relação custo-benefício);

- não é necessário depender de um único fornecedor ou prestador de serviço para reposição de componentes;

Switch Ethernet: tecnologias amplamente disponíveis é comum em clusters

- a configuração de um cluster não costuma ser trivial, mas fazer um supercomputador funcionar poder ser muito mais trabalhoso e exigir pessoal especializado;

- é possível aumentar a capacidade de um cluster com a adição de nós ou remover máquinas para reparos sem interromper a aplicação;

- há opções de softwares para cluster disponíveis livremente, o que facilita o uso de uma solução do tipo em universidades, por exemplo;

- relativa facilidade de customização para o perfeito atendimento da aplicação;

- um cluster pode ser implementado tanto para uma aplicação sofisticada quanto para um sistema doméstico criado para fins de estudos, por exemplo.

Mas, apesar destes benefícios, os clusters não são a solução perfeita para todo e qualquer problema computacional. Há aplicações onde o uso de outra tecnologia se mostra mais adequado. Entre as razões para isso estão:

- a facilidade de expansão do cluster pode ser uma "faca de dois gumes": a quantidade de máquinas pode aumentar tanto que a manutenção se torna mais trabalhosa, o espaço físico pode ficar impróprio, etc; - a tecnologia de comunicação utilizada pode não oferecer a velocidade de transferência de dados ou o tempo de resposta necessário, dependendo da aplicação; - um cluster tem como base uma rede local, logo, não se pode acrescentar máquinas que estejam muito distantes geograficamente.

Por estes aspectos, fica evidente que as necessidades e os requisitos de uma aplicação devem ser bem avaliados para que se possa decidir entre a implementação de um cluster ou outra tecnologia. Se o clustering for a opção escolhida, deve-se seguir com a avaliação, desta vez para se decidir sobre as soluções e recursos disponíveis.

Finalizando

A origem da denominação "cluster" não é clara, mas sabe-se que as primeiras soluções de processamento paralelo remontam à década de 1960, havendo, a partir daí, alguns princípios que hoje formam a base da ideia de clustering.

O fato é que o passar do tempo não torna o conceito ultrapassado. Há um motivo especial para isso: os clusters se relacionam intimamente à otimização de recursos, uma necessidade constante em praticamente qualquer cenário computacional. E este aspecto pode se tornar ainda mais atraente quando a ideia de cluster é associada a conceitos mais recentes, como cloud computing e virtualização.

Escrito por Emerson Alecrim - Publicado em 22_03_2013 - Atualizado em 22_03_2013
Em substituição à matéria sobre o assunto publicada em 2004 nesta página.

# data[].attributes.attachment_link.description
Quando o assunto é computação de alto desempenho, não é difícil pensarmos em servidores sofisticados e caros respondendo por este trabalho. No entanto, é possível obter resultados tão bons quanto ou superiores a partir de alguma solução de cluster - uma tecnologia capaz de fazer computadores mais simples trabalharem em conjunto, como se formassem uma máquina só.

# data[].attributes.attachment_link.readable_text
Processador multinúcleo (múltiplos núcleos, do inglês multicore) é o que tem dois ou mais núcleos de processamento () no interior de um único chip. Estes dois ou mais núcleos são responsáveis por dividir as tarefas entre si, ou seja, permitem trabalhar em um ambiente multitarefa. Em processadores de um só núcleo, as funções de multitarefa podem ultrapassar a capacidade da CPU, o que resulta em queda no desempenho enquanto as operações aguardam para serem processadas. Em processadores de múltiplos núcleos o sistema operacional trata cada um desses núcleos como um processador diferente. Na maioria dos casos, cada unidade possui seu próprio cache e pode processar várias instruções quase simultaneamente. Adicionar novos núcleos de processamento a um processador (único encapsulamento) possibilita que as instruções das aplicações sejam executadas em paralelo, como se fossem 2 ou mais processadores distintos.

Os dois núcleos não somam a capacidade de processamento, mas dividem as tarefas entre si. Por exemplo, um processador de dois núcleos com clock de 1.8 GHz não equivale a um processador de um núcleo funcionando com clock de 3.6 Ghz, e sim dois núcleos 1,8GHZ operando em paralelo. O termo multinúcleo ou multicore (como é popularmente conhecido), são por vezes utilizados para descrever arquiteturas multicore com um número particularmente elevado de núcleos (dezenas ou centenas).

O surgimento dos processadores multicore, tornou-se necessário principalmente devido a missão cada vez mais difícil de resfriar processadores singlecore (processadores de apenas um núcleo) com clocks cada vez mais altos; devido a concentração cada vez maior de transistores cada vez menores em um mesmo circuito integrado. E além dessa e outras limitações dos processadores singlecore, existe a grande diferença entre a velocidade da memória e do processador, aliada à estreita banda de dados, que faz com que aproximadamente 75 por cento do uso do microprocessador seja gasto na espera por resultados dos acessos à memória.

Na maioria dos processadores de mais de um núcleo, cada núcleo pode possuir sua própria cache e alguns casos realizam acesso direto e independente à memória principal; possibilita-se, assim, que as instruções de aplicações sejam executadas em paralelo, ou seja, cada processador realiza os cálculos de que é requisitado concorrentemente com o outro, ganhando desempenho. Este, porém, depende muito dos algoritmos de software utilizados e de suas implementações.

Outra vantagem do processamento em paralelo é a capacidade de cada processador ficar responsável pela execução de um aplicativo, como por exemplo, quando o usuário está executando algum arquivo de som e ao mesmo tempo executando a varredura do antivírus.

A diferença desse processamento paralelo e do até então usado nos processadores singlecore pode ser visto nas figuras abaixo; observe o gargalo (bottleneck) criado pelos aplicativos executados simultaneamente no singlecore, e como ele desaparece na figura com os dois núcleos (cores).

Embora a tecnologia de fabricação tenha melhorado, reduzindo o tamanho de processadores individuais, limites físicos de semicondutores baseados em microeletrônica haviam se tornado uma preocupação principal. Estas limitações físicas poderiam causar dissipação de calor significativa e problemas de sincronização de dados. Vários métodos foram e estão sendo usados ​​para melhorar o desempenho da CPU. Alguns paralelismos por nível de instrução (ILP), métodos como pipelining superescalares são adequados para muitas aplicações, mas são ineficientes para os que são difíceis de prever código. Muitas aplicações são mais adequadas para paralelismo por nível de thread (TLP), métodos e múltiplas CPUs independentes são comumente usados ​​para aumentar a TLP geral de um sistema. Uma combinação de espaço disponível aumentou (devido a processos de fabricação refinados) e a demanda por TLP aumento e levou ao desenvolvimento de CPUs multi-core.

Vários negócios impulsionaram o desenvolvimento da arquitetura multicore. Durante décadas, foi possível melhorar o desempenho de uma CPU, reduzindo a área do circuito integrado, que diminuiu o custo por dispositivo. Como alternativa, mais transistores poderiam ser utilizados no projeto, o que aumentou a funcionalidade, especialmente para as arquiteturas CISC. Eventualmente, estas técnicas atingiram o seu limite e não puderam continuar a melhorar o desempenho da CPU. Múltiplos processadores tiveram que ser empregados para ganhar velocidade no processamento. Vários núcleos foram usados ​​no mesmo chip para melhorar o desempenho, o que poderia então levar a melhores vendas de CPUs que tinham dois ou mais núcleos.

Uma das principais vantagens dos processadores multicore é também um dos principais motivos da sua invenção. Essa vantagem é a sua maior capacidade - comparado aos singlecores - de resfriamento; o que ainda possibilitou e ainda possibilita o aumento do poder de processamento.

Economia no preço de licenciamento de softwares proprietários, passando a ter um maior poder de processamento sem necessitar de uma nova máquina.

Processadores multicore também permitem maior desempenho com menor energia. Isso pode ser um fator importante em dispositivos móveis que funcionam com baterias. Uma vez que cada núcleo em multicore é geralmente mais eficiente em termos energéticos, o chip se torna mais eficiente do que ter um grande núcleo único e monolítico.

As outras vantagens quase que por completo relacionam-se com a capacidade de processamento, principalmente quando se trata da execução de mais de um aplicativo ao mesmo tempo ou mesmo e aplicativos capazes de realizar o seu processamento paralelamente, conseguindo assim trabalhar com dois ou mais núcleos concomitantemente. Nos processadores mais recentemente desenvolvidos existe também uma melhora no acesso a memória e na troca de dados entre os próprios núcleos.

Porém, é importante destacar também que para que a qualidade de processamento paralelo dos multicores seja utilizada na sua totalidade os softwares instalados na máquina devem ser escritos para aproveitar esse recurso; para isso as aplicações devem ser escritas utilizando e armazenando os conceitos de threads, assim uma única aplicação utilizará o poder de processamentos dos dois ou mais processadores.

Processadores multicore possuem um bom desempenho, performance, disponibilidade e segurança a um menor custo. Por outro lado, esta tecnologia possui algumas desvantagens, entre as principais podemos destacar:

O aumento da utilização dos recursos computacionais fornecidos por processadores multicore requerem ajustes, tanto para o sistema operacional de apoio quanto para o software aplicativo já existente.

A capacidade dos processadores multi-core depende da utilização de vários segmentos dentro das aplicações para aumentar o desempenho da aplicação.

Com o surgimento dos multicores tornou-se necessário algumas adaptações a nível de arquitetura para o melhor aproveitamento dos seus núcleos, e as primeiras a serem feitas tem como objetivo melhorar o paralelismo a nível de threads e assim criar uma arquitetura que propicie o chamado paralelismo ao nível do chip.

Algumas vantagens da arquitetura são: a melhor localização dos dados em se comparando com outras arquiteturas de multiprocessamento; a melhor comunicação entre as unidades e o número reduzido de quantidade de espaço e energia necessários.

A arquitetura é geralmente um SMP, ou seja, um multiprocessamento simétrico; implementado em um circuito VLSI - Very Large Scale Integration. Essa é uma arquitetura onde dois ou mais processadores idênticos são ligados a uma única memória principal. Porém ao SMP existem outras alternativas de se criar uma arquitetura com variantes para o tratamento da memória ou até mesmo a comunicação entre os diversos núcleos presentes no processador. Algumas dessas variantes podem ser observadas nos artigos abaixo:

Segue abaixo alguns exemplos de hardware que utilizam a tecnologia multi-core.

AMD

Athlon 64, Athlon 64 FX e Athlon 64 X2, processadores AMD Athlon™ para desktops.

Athlon II, processador AMD Athlon™ II Dual-Core para desktops.

Phenom, processador AMD Phenom™ X4 de quatro núcleos e AMD Phenom™ X3 de três núcleos para desktops.

Phenom II, processador multi-core. Oferece uma melhor experiência visual para entretenimento de alta definição, desempenho avançado em multitarefa e inovações de economia de energia, proporcionando máquinas menores e mais refrigeradas, com uso eficiente da energia.

Sempron, processador AMD Sempron™ para desktops.

Turion 64 X2, processador dual-core para laptop.

Opteron, processador para servidores.

IBM

POWER5, processador dual-core, lançado em 2004.

POWER6, processador dual-core, lançado em 2007.

POWER7, processadores 4,6,8-core, lançados em 2010.

PowerPC 970MP, processador dual-core usado na Apple Power Mac G5.

Xenon, processador triple-core, usado pela Microsoft no Xbox 360.

Intel

Celeron Dual-Core, primeiro processador dual-core comercializado.

Core Duo, processador dual-core.

Core 2 Duo, processador dual-core.

Core 2 Quad, 2 processadores dual-core embutido em um multi-chip.

Core i3, Core i5 e Core i7, família de processadores multi-core. São os sucessores do Core 2 Duo e do Core 2 Quad.

Itanium 2, processador dual-core.

Pentium D, 2 single-core embutido em um multi-chip.

Pentium Extreme Edition, 2 single-core embutido em um multi-chip.

Pentium Dual-Core, processador dual-core.

Xeon processadores dual-, quad-, hexa-, octo- e 12-core.

O MIT, Instituto de Tecnologia de Massachusetts, anunciou um processador com 64 núcleos, cujo design difere drasticamente dos processadores existentes hoje. O novo chip, chamado Tile64, evita o que é hoje o maior gargalo no desempenho dos processadores multicores e ele consome menos energia.

Nos processadores multicores existentes hoje, cada núcleo se comunica com o outro através de um barramento comum. Se pensarmos em dois ou quatro núcleos dividindo um barramento, a performance não é muito afetada. Quando pensamos em 16 ou mais núcleos sendo usados ao mesmo tempo, a historia é completamente diferente. Este é o maior gargalo no desempenho dos processadores multicores.

O Tile64 não possui um barramento central. Ao invés disso, os núcleos estão diretamente conectados. Cada núcleo possui todas as características de um processador e memória. O novo conceito aplicado nesses processadores é a estrutura de malha na conexão entre os núcleos. Essa estrutura é similar à encontrada na Internet, uma rede que possui vários nós descentralizados. Uma razão que faz a Internet capaz de transmitir dado tão rapidamente é que os pacotes de informação são enviados através de uma vasta rede interligada, evitando assim o congestionamento desses pacotes. Essa nova arquitetura abre portas para que novos processadores recebam números cada vez maiores de núcleos. A existência de um número tão grande de cores, começa a requerer a utilização de um esquema de manipulação próximo a grades computacionais.

Veja Também

Referências

# data[].attributes.attachment_link.title
Processador multinúcleo - Wikipédia, a enciclopédia livre

# data[].attributes.attachment_link.description
Processador multinúcleo (múltiplos núcleos, do inglês multicore) é o que tem dois ou mais núcleos de processamento () no interior de um único chip. Estes dois ou mais núcleos são responsáveis por dividir as tarefas entre si, ou seja, permitem trabalhar em um ambiente multitarefa.

# data[].attributes.body
https://www.capterra.com.br/glossary/153/smp-symmetric-multiprocessing#:~:text=Multiprocessamento%20sim%C3%A9trico%20(SMP%20na%20sigla%20em%20ingl%C3%AAs)%20%C3%A9%20um%20tipo,e%20o%20mesmo%20sistema%20operacional.

# data[].attributes.attachment_link.title
Multiprocessamento simétrico (SMP na sigla em inglês)

# data[].attributes.attachment_link.description
Descubra mais de 1000 definições relacionadas ao mundo do software. Clique aqui para saber mais sobre Multiprocessamento simétrico (SMP na sigla em inglês) é um tipo de arquitetura computacional. Refere-se a dois ou mais processadores que compartilham a....

# data[].attributes.attachment_link.readable_text
Assim como os Clusters, os Grids de computadores estão se tornando algo popular. A idéia por trás tanto dos clusters quanto dos grids é basicamente a mesma: combinar o poder de processamento de vários computadores ligados em rede para conseguir executar tarefas que não seria possível (ou pelo menos não com um desempenho satisfatório) executar utilizando um único computador e ao mesmo tempo fazê-lo a um custo mais baixo de o de um supercomputador de potência semelhante.

Os clusters e grids podem ser compostos tanto permanentes, quanto temporários, formados para executar uma tarefa específica e depois desfeitos. Presumindo que todos os computadores estejam previamente ligados em rede, a criação e dissolução é apenas questão de ativar e depois desativar o software responsável em cada computador.

A principal diferença entre um cluster e um grid é que um cluster possui um controlador central, um único ponto de onde é possível utilizar todo o poder de processamento do cluster. Os demais nós são apenas escravos que servem a este nó central. Os clusters são mais usados em atividades de pesquisa, resolvendo problemas complicados e na renderização de gráficos 3D.

Os grids por sua vez são uma arquitetura mais "democrática" onde embora possa existir algum tipo de controle central, temos um ambiente fundamentalmente cooperativo, onde empresas, universidades ou mesmo grupos de usuários compartilham os ciclos ociosos de processamento em seus sistemas em troca de poder utilizar parte do tempo de processamento do grid.

Por exemplo, duas empresas sediadas em países com fuso-horários diferentes poderiam formar um grid, combinando seus servidores web, de modo que uma possa utilizar os ciclos de processamento ociosos da outra em seus horários de pico, já que com horários diferentes os picos de acessos aos servidores de cada empresa ocorrerão em horários diferentes.

# data[].attributes.attachment_link.title
Grid Computing - Definição de Grid Computing

# data[].attributes.attachment_link.description
Assim como os Clusters, os Grids de computadores estão se tornando algo popular. A idéia por trás tanto dos clusters quanto dos grids é basicamente a mesma: combinar o poder de processamento de vários computadores ligados em rede para conseguir executar tarefas que não seria possível (ou pelo menos não com um desempenho satisfatório) executar utilizando um único computador e ao mesmo tempo fazê-lo a um custo mais baixo de o de um supercomputador de potência semelhante.

# data[].attributes.attachment_link.readable_text
A palavra multicore é utilizada para definir qualquer processador que tenha mais de um núcleo. Atualmente há vários processadores desse tipo no mercado, seja eles processadores de dois, três ou quatro núcleos. As fabricantes de processadores (AMD e Intel) tiveram que tomar este rumo com os processadores por um simples motivo: os antigos processadores estavam atingindo velocidades (ou frequências) muito altas e logo não haveria sistema de refrigeração eficiente o suficiente para que eles não chegassem a temperaturas tão altas.

Antes de continuar com a explicação sobre os multicore, talvez seja ideal falar um pouco do processador em si. Ele é a principal peça de um computador, pois ele calcula e executa tudo o que o usuário ordenar. Sendo um dos menores componentes do computador, o processador tem internamente várias divisões. Cada parte interna do CPU executa uma função específica, porém a única parte indispensável e que realmente faz o trabalho pesado é o núcleo.

O nome já diz tudo, ele fica no centro do processador e tem a função de comandar tudo. Pensando assim, pode-se dizer até que o núcleo é quase o processador por completo. E foi a partir dessa ideia que as empresas que fabricam processadores tiveram a brilhante ideia de colocar dois núcleos em um mesmo processador, sendo que eles teriam apenas de compartilhar algumas peças.
Qual a vantagem dos multicore?
Além da notável diferença em poder de processamento, os processadores de múltiplos núcleos têm uma grande vantagem sobre os antigos processadores: várias tarefas podem ser realizadas ao mesmo tempo. E não para por aí, os processadores multicore esquentam muito menos do que processadores antigos, pois cada núcleo trabalha em uma velocidade menor e consequentemente produz menos calor.
Os atuais
Ambas as fabricantes de processadores lançaram seus CPUs de dois núcleos quase que simultaneamente. Com poucas diferenças de nomes e configurações, as empresas notaram que este método seria eficiente, pois eles trariam um ganho significativo em softwares especialmente preparados para esse tipo de processamento.

Há ainda os recentes processadores de quatro núcleos, que diferem em muito poucos dos dual core. E claro, existem os desconhecidos CPUs de três núcleos, estes fabricados apenas pela AMD. A arquitetura interna (dos microcomponentes) dos processadores de três e quatro núcleos até diferenciam um pouco, mas de uma forma em geral, eles tendem a trabalhar exatamente igual aos seus antecessores.
Em breve numa loja perto de você
Como o avanço da tecnologia nunca para, em breve os processadores de dois núcleos começarão a ser aposentados. Os de quatro núcleos serão os populares e chegará a época dos processadores de seis e oito núcleos. Segundo boatos, a Intel já está trabalhando nestes processadores e eles não devem demorar muito a chegar ao mercado.

É evidente que como todo lançamento, não chega a compensar a compra de componentes tão avançados tecnologicamente. Um exemplo muito claro disso são os atuais Intel Core i7, que para os consumidores é um verdadeiro sonho de consumo, e tende a ser um sonho por muito tempo, porque são o que existe de melhor atualmente.
Um evolui, todos evoluem
A informática sempre teve este laço entre componentes e o processador sempre foi o principal responsável. Isso é óbvio, pois os processadores mudam fisicamente e exigem novas placas-mães, mas ao mesmo tempo há também uma evolução interna nos processadores, a qual traz novas tecnologias para os computadores.

Um exemplo bem claro disso é o padrão DDR3 de memórias RAM, que foi implementado nos processadores de quatro núcleos. Com a chegada dos processadores de seis núcleos, provavelmente o padrão DDR3 já não seja rápido o suficiente e será necessário substituir por um novo modelo. A parte física provavelmente será alterada e com certeza apenas placas-mãe novas poderão suportar estes CPUs.

# data[].attributes.attachment_link.description
A palavra multicore é utilizada para definir qualquer processador que tenha mais de um núcleo. Atualmente há vários processadores desse tipo no mercado, seja eles processadores de dois, três ou quatro núcleos. As fabricantes de processadores (AMD ...

# data[].attributes.attachment_link.readable_text
Um supercomputador, ou Computador de Alto Desempenho, como o nome já diz, é um computador com níveis superiores de performance se comparado a um computador convencional.

Geralmente, esses níveis de performance são mensurados na quantidade de operações de pontos flutuantes por segundo, ou FLOPS, em vez da quantidade de instruções por segundos.

Este artigo, como você já deve suspeitar, irá abordar o que são os supercomputadores, as origens da computação de alto desempenho, as principais fabricantes de supercomputadores, os motivos por trás do seu desenvolvimento e utilização, bem como algumas curiosidades sobre os essas monstruosas máquinas.

Definição

A definição geral de um supercomputador já foi abordada no início do texto, mas você sabia que para obter tal nome, uma máquina deve operar em uma quantidade específica de FLOPS?

Um supercomputador, segundo a empresa alemã de desenvolvimento de softwares, Suse, supercomputadores são máquinas que contém milhares de processadores e podem realizar bilhões ou trilhões cálculos computacionais por segundo.

Alguns supercomputadores podem chegar até centenas de quadrilhões de FLOPS, que como dito lá em cima, são operações de pontos flutuantes por segundo.

A IBM (quem não conhece este nome?) afirma que, diferentemente dos computadores tradicionais, um supercomputador utiliza mais de uma CPU, agrupadas em nódulos que comprimem um processador, ou um grupo de processadores e um bloco de memória. Tal técnica é chamada de multiprocessamento simétrico (SMP - Symmetric multiprocessing).

Com isso, geralmente, um supercomputador pode ter dezenas de milhares de nódulos, que com recursos de comunicação interconectadas, permitem a resolução de problemas específicos.

Além disso, usando a interconexão, tais nódulos podem se comunicar com sistemas I/O, como armazenamento de dados e sistemas de rede.

Processo paralelo

O computador é uma máquina cujo propósito geral é obter informações (dados) através de um processo de inserção de dados, armazenamento e processamento que gera alguma forma de resultado. Esse processo é chamado de processamento serial, ou em série.

Em um supercomputador o trabalho é feito de uma forma diferente, usando o processamento paralelo em vez do processamento em série, realizando tarefas múltiplas ao mesmo tempo.

Portanto, um supercomputador moderno trabalha de forma mais rápida ao dividir os problemas matemáticos em partes iguais e executando os cálculos nessas partes em simultâneo.

Linux

Em novembro do ano passado, foi lançado o ranking dos 500 melhores supercomputadores do mundo, Top500, que constatou que o Linux está presente em todas essas máquinas.

O Top500 surgiu em 1993 para realizar benchmarks de supercomputadores, publicando os detalhes sobre os 500 melhores supercomputadores anualmente.

Segundo o último ranking, a principal razão pelo uso massivo do Linux como sistema operacional de um supercomputador se dá pela sua natureza de código aberto.

Um supercomputador é um dispositivo criado para propósitos específicos (falaremos em breve sobre isso), o que demanda um sistema operacional que possa ser personalizado para atender tais propósitos.

Sendo assim, times de engenharia podem personalizar o sistema operacional de seus supercomputadores da maneira mais conveniente para atender suas necessidades.

Nos primórdios da computação de alto desempenho, cada supercomputador tinha um sistema operacional específico.

História do Supercomputador

Embora a atenção da mídia aos supercomputadores surja nas duas últimas décadas, o conceito de supercomputador já existe há um bom tempo, mais precisamente, desde as décadas de 1950 e 1960.

Além disso, o termo "Super Computação" existe há mais de 90 anos, utilizado pela primeira vez por um jornal americano, em 1929, para se referir a uma gigante máquina tabuladora desenvolvida pela IBM para a Universidade de Columbia, de Nova York.

Enfim, a supercomputação e o supercomputador foram inventados bem antes dos computadores pessoais (PC), construídos em grandes centros de computação nos EUA e na União Soviética durante a Guerra Fria.

A Guerra Fria, aliás, foi o que acelerou o trabalho para a criação de supercomputadores, sobretudo devido à corrida espacial disputada entre as duas grandes potências desse período.

Em suma, o progresso dos supercomputadores começa na década de 1950 quando o governo americano passa a investir regularmente no desenvolvimento de tecnologias de alta performance para uso militar.

A viagem à Lua, um dos maiores feitos da humanidade, só ocorreu pela criação de máquinas com capacidade de realizar cálculos mais complexos em uma maior velocidade.

Portanto, em 1954, para fins de Defesa Nacional, o primeiro supercomputador foi criado: O NORC. Desenvolvido pela IBM e instalado na Base Naval de Dahlgren, nos Estados Unidos.

O NORC conseguia fazer cálculos em 67 kOPS, ou seja, 67 mil operações por segundo, quando a unidade de medida dos supercomputadores ainda era OPS, operações por segundo.

Sete anos após a criação do NORC, a IBM Lançou o 7030, conhecido popularmente como Stretch, em 1961, o supercomputador mais rápido até 1964, quando o CDC 6600 foi lançado.

A construção do Stretch começou em 1956, com o investimento de 4,3 milhões de dólares (US$ 44 milhões em 2021) e durou 42 meses. De acordo com a IBM, foi após o lançamento do Stretch e do UNIVAC LARC, que o termo supercomputador entrou em uso geral.

Uso comercial

Embora, inicialmente, os supercomputadores eram produzidos em quantidades limitadas para uso governamental, a tecnologia desenvolvida durante esse período iria chegar aos setores industriais e comerciais nas décadas seguintes.

Duas empresas americanas, a CDC (Control Data Corporation) e a Cray Research, lideraram o movimento para o uso comercial do supercomputador a partir da segunda metade dos anos 1960.

O CDC 6600, desenvolvido por Seymour Cray - considerado o pai da supercomputação -, é considerado o primeiro supercomputador comercial de sucesso.

Após deixar a CDC, Seymour Cray e inicia o período considerado como a Era Cray, quando a Cray Research dominou o mercado de supercomputadores durante as décadas de 1970 e 1980.

O Cray-1, lançado em 1976, é um dos primeiros supercomputadores a utilizar circuitos integrados, com a capacidade de realizar cálculos em 160 megaFLOPS, com o fim de realizar pesquisas aerodinâmicas e meteorológicas.

O fim da Era Cray chega após outras companhias começarem a desenvolver supercomputadores mais baratos através do processamento paralelo.

Propósitos de um Supercomputador

Como dito acima, os primeiros supercomputadores eram utilizados essencialmente para pesquisas em aerodinâmica e meteorologia.

No entanto, as décadas posteriores ao lançamento do Cray marcam o início do uso de supercomputadores para análises probabilísticas e em proteção radiológica.

Os anos 1990 são o período em que os supercomputadores começaram a ser usados para a cibersegurança e até mesmo para simulações de testes nucleares em 3D.

Os supercomputadores atuais, essencialmente, são usados para executar tarefas com o intenso uso de dados e processamento para propósitos científicos e de engenharia, como mecânica quântica, previsão climática, exploração de petróleo e gás natural, modelagem molecular, aerodinâmica, fusão nuclear e criptoanalise.

No caso da exploração de petróleo, os supercomputadores convertem dados sísmicos em mapas para indicar onde estão os locais ideias para perfuração.

Um supercomputador pode calcular dinâmicas de fluidos (hidrodinâmica) em automóveis através de simulações de engenharia para analisar a eficiência aerodinâmica. Semelhantemente, simulações de engenharia mecânica que calculam as cargas de uma estrutura inteira podem determinar onde estão os pontos fracos e identificar a pressão no veículo.

Além disso, nos últimos anos, supercomputadores estão diretamente ligados ao desenvolvimento de inteligência artificial, ao Data Science e ao machine learning. O vídeo abaixo explica como os supercomputadores estão presentes na nossa realidade.

Os Estados Unidos e a China são os principais fabricantes de supercomputadores

Entre os cinco principais fabricantes de supercomputadores, a China e os EUA são os que possuem a maior quantidade de máquinas de alto desempenho. O país asiático possui 37,6% das máquinas na lista do TOP500 de junho deste ano.

Embora os Estados Unidos fiquem um pouco atrás da China, com 24,4%, de acordo com a análise da TOP500, os supercomputadores americanos possuem um desempenho superior às máquinas chinesas.

Em seguida aparecem o Japão, a Alemanha e a França, com 6,8%, 4,6% e 3,2%, respectivamente. O Brasil ocupa a 11ª posição do ranking, com seis supercomputadores representando o país.

Voltando a falar sobre os EUA e a China, em 2013, a China lançou o Tianhe-2A, com desempenho de 125 petaFLOPS, assumindo o primeiro lugar entre os 500 melhores computadores por três anos.

O Tianhe-2A possuía um processador da Intel, o que tornou a conquista chinesa menos surpreendente.

Em 2016, o Tianhe-2A perde o posto para outro supercomputador chinês, o TaihuLight, com 140 petaFLOPS, que se torna o orgulho da nação por ter sido construído usando apenas tecnologia chinesa e fica no topo até 2018.

No entanto, os Estados Unidos recuperam o posto revelando o Summit, um supercomputador fabricado pela IBM equipado com processadores da Nvidia, alcançando a velocidade de 200 petaFLOPS.

Financiado pelo governo americano, o Summit foi desenvolvido para lidar com tarefas relacionadas aos campos da física nuclear, sismologia e ciência climática.

Além disso, no mesmo ano o supercomputador Sierra é lançado, utilizado pelo governo americano, alcançando 125 petaFLOPS de velocidade, para simulação de ogivas nucleares.

Contudo, essa recuperação não significa que o topo da guerra tecnológica entre EUA e China já tem dono. Na verdade, a China pode recuperar o primeiro lugar em breve, pois o país trabalha para ser a primeira nação a alcançar a próxima etapa da supercomputação: a computação de exaescala.

Sistemas de exaescala conseguirão alcançar a velocidade de exaflops (um bilhão de operações por segundo). Dois protótipos já foram revelados, mas até então, ao contrário do que havia sido prometido pelo governo chinês, nenhum supercomputador de exaescala foi lançado.

Por outro lado, o atual supercomputador mais potente do mundo é de outro país japonês.

Fugaku: o maior supercomputador

Em junho de 2020, o supercomputador Fugaku, baseado em tecnologia Arm e desenvolvido pelo instituto de pesquisa RIKEN, em parceria com a empresa Fujitsu, assumiu o primeiro lugar na lista TOP500 melhores supercomputadores do mundo.

O Fugaku possui uma velocidade de 415,53 petaflops, superando o Summit e o Sierra, que caíram para o segundo e terceiro lugar, respectivamente.

Instalado no Centro de Ciência da Computação do instituto RIKEN, em Kobe, no Japão, o Fugaku é o fruto do plano nacional de desenvolvimento de supercomputação do Japão e será usado em aplicações de cunho científico e social.

Os principais usos do Fugaku serão em áreas como a farmacêutica - na descoberta de drogas e no uso personalizado e preventivo de medicações -, em simulações de desastres naturais; na criação, uso e armazenamento de energia; em novos processos de produção industrial.

Além disso, assim como o Summit, o Fugaku foi utilizado, de maneira experimental, para a pesquisa durante a pandemia da COVID-19, incluindo diagnósticos, tratamentos e simulações de como o vírus se espalha.

No último TOP500, realizado em junho deste ano, o Fugaku manteve o topo da lista e foi considerado o primeiro supercomputador de exaescala devido ao seu desempenho em tarefas de machine learning e inteligência artificial, que ultrapassaram 1 exaflop.

Considerações Finais - Futuro da Supercomputação

Os principais países fabricantes de supercomputadores estão em uma corrida acirrada para desenvolver o supercomputador mais rápido do planeta, que atinja a Exaescala.

Essa corrida não acontece apenas pela demonstração de poder tecnológico e econômico.

Na verdade, em um mundo pós-pandemia, há diversos fatores contribuindo para aceleração do desenvolvimento daquilo que será a nova de geração de supercomputadores.

Apesar do alto custo na criação de um supercomputador, os países perceberam a importância dos supercomputadores para o desenvolvimento de vacinas e outras formas de combate à pandemia.

O fator militar também é um dos principais motivos para o investimento em computação de alto desempenho, tendo em vista que o combate moderno, bem como outros própositos militares, dependem demasiadamente desses sistemas.

Por exemplo, supercomputadores são usados para o desenvolvimento de armas, quebra de códigos criptografados, análise de conflitos armados e na garantia de futuras ameaças.

Desse modo, o Laboratório Nacional de Oak Ridge, no Tennessee, está desenvolvendo o supercomputador Frontier, que pretende alcançar a velocidade de 1,5 exaFLOPS, com previsão de lançamento para dezembro deste ano.

A China também está nessa corrida. O país desenvolve atualmente três máquinas para chegar na exaescala.

A previsão é de que no final desta década, e no início da próxima, haverá computadores com dezenas e, até mesmo, centenas de exaFLOPS. Em 2036, é possível que vejamos a chegada do primeiro computador com desempenho em zettaFLOPS, operando em um setilhão (1.000.000.000.000.000.000.000.000) por segundo.

Por fim, de acordo com o gráfico de projeção de desempenho do , é possível que vejamos um supercomputador chegar à escala yotta em 2050. Quem viver, verá.

# data[].attributes.attachment_link.title
O que é um Supercomputador? - Hardware.com.br

# data[].attributes.attachment_link.description
Um supercomputador, ou Computador de Alto Desempenho, como o nome já diz, é um computador com níveis superiores de performance se comparado a um computador convencional. Geralmente, esses níveis de performance são mensurados na quantidade de operações de pontos flutuantes por segundo, ou FLOPS, em vez da quantidade de instruções por segundos.

# data[].attributes.attachment_link.title
These Supercomputers Are Altering Reality