Este documento descreve a implementação de um cluster de alto desempenho usando GNU/Linux. O trabalho apresenta os fundamentos de processamento paralelo e arquiteturas de cluster, e descreve as etapas para configurar um cluster em máquinas físicas, incluindo a adição de nós, definição de usuários e preparação do sistema operacional nos servidores e nós.
2. ii
INSTITUTO SUPERIOR POLITÉCNICO
METROPOLITANO DE ANGOLA
Por: Fernando Kanda Kassobo Eduardo
IMPLEMENTAÇÃO DE CLUSTER DE ALTO DESEMPENHO
USANDO GNU/LINUX
Monografia apresentada ao curso de
Licenciatura em Ciência da Computação,
como requisito parcial para obtenção do título
de Licenciado em Ciência da Computação, sob
orientação do professor Engenheiro Dionísio
Teixeira
Luanda
2013
3. iii
IMPLEMENTAÇÃO DE CLUSTER DE ALTO DESEMPENHO
USANDO GNU/LINUX
Por: Fernando Kanda Kassobo Eduardo
Orientador: Engenheiro Dionísio Teixeira
Monografia apresentada ao curso de Licenciatura em Ciência da Computação,
requisito parcial para obtenção do título de Licenciado em Ciência Da Computação.
Aprovado por:
-------------------------------------------------
O Presidente da Banca
-------------------------------------------------
Membro da Banca
-------------------------------------------------
Membro da Banca
-------------------------------------------------
O professor orientador
Aprovado Aprovado com restrições Não Aprovado
Grau de avaliação _______________________
______ de _________________de 2013
4. iv
Eduardo, Fernando Kanda Kassobo
Implementação de cluster de Alto Desempenho usando GNU/Linux / por Fernando
Kanda Kassobo – Luanda, 2013
95 p.
Trabalho de conclusão de curso (Licenciatura) – Departamento de ciências e
tecnologias - Curso de Licenciatura em Ciência da Computação - 2013
Orientador: Engenheiro Dionísio Teixeira
1. Cluster, 2. Alto desempenho, 3. Computação | Implementação de Cluster de alto
desempenho usando GNU/Linux
5. v
DEDICATÓRIA
Dedico este trabalho em especial a minha família, a
turma LCC4N/2012 (conseguimos…), aos meus Pais
(isto é para vocês) e a todos que directa ou
indirectamente contribuíram ou não para a conclusão
deste curso.
6. vi
AGRADECIMENTOS
Agradeço aos meus irmãos Miguel Kindieco Luvumbo, Benvindo Luvumbo,
Sebastião Eduardo, Engrácia Luengo, por sempre acreditar incansavelmente no meu potencial
e ter ajudado na realização do nosso sonho. Aos meus pais pela impaciência da longa jornada,
ao meu Tio Álvaro Mwanza que nunca desistiu da sua visão (ela se realizou), ao meu Tutor
Prof. Dr. Luvuvamo e Engº. Dionísio, pela motivação e orientação incansável, e
disponibilidade para que o fim deste trabalho fosse possível, e sem esquecer os meus
caríssimos colegas que sempre acreditaram desde a turma LCC1N (2009) e vencemos a
batalha.
7. vii
“As pedras no caminho?
guardo todas,
um dia faço um castelo ...”
Nemo Nox
8. viii
LISTA DE TABELAS
Tabela 1- Relação dos 5 supercomputadores mais rápidos do mundo (top500.org, 2013).................. 15
Tabela 2 - Linux & Windows (diffen.com, 2013) .................................................................................. 19
Tabela 3 - Classificação de arquitecturas paralelas, segundo FLYNN................................................ 27
Tabela 4 - Níveis de Alta disponibilidade ............................................................................................. 44
Tabela 5 - Medida de desempenho dos computadores em Flops.......................................................... 54
9. ix
LISTA DE FIGURAS
Figura 1- Arquitectura de Von Neumann (wikipedia, 2013) .................................................................. 8
Figura 2- Computadores baseado na arquitectura de Von Neumann, ENIAC(fi.edu, 2013)................. 8
Figura 3 - Exemplo de computador comercializado na segunda geração (ufpb.br, 2013) .................... 9
Figura 4 - Comparação do circuito integrado com uma moeda (ufpb.br, 2013) ................................... 9
Figura 5 - Computador pessoal de quarta geração (ufpb.br, 2013)..................................................... 10
Figura 6 - Computador de quinta geração (ufpb.br, 2013).................................................................. 11
Figura 7 – Supercomputador Jaguar, da classe Cray XT5 (olcf.ornl.gov, 2013) ................................ 12
Figura 8 - Tinhae 2, o supercomputador mais rápido do mundo (cri.cn, 2013) .................................. 14
Figura 9 - Logomarca do projecto Gnu (gnu.org, 2013)...................................................................... 18
Figura 10 - Tux a mascote do Linux (wikipedia, 2013) ........................................................................ 18
Figura 11- Arquitectura SISD............................................................................................................... 28
Figura 12 - Arquitectura MISD ............................................................................................................ 29
Figura 13 - Arquitectura SIMD ............................................................................................................ 30
Figura 14 - Arquitectura MIMD........................................................................................................... 31
Figura 15 - Classificação segundo o compartilhamento de memória (TANENBAUM 2003).............. 31
Figura 16 - Multiprocessadores (UMA - Uniform Memory Access) .................................................... 32
Figura 17 - Multiprocessadores (NUMA - Non Uniform Memory Access).......................................... 33
Figura 18 - Arquitectura de um multicomputador................................................................................ 34
Figura 19 - Arquitectura PVP............................................................................................................... 35
Figura 20 - Arquitectura SMP .............................................................................................................. 36
Figura 21 - Arquitectura DSM.............................................................................................................. 37
Figura 22 - Arquitectura MPP.............................................................................................................. 38
Figura 23 - Cluster da força aérea Americana (AFRL), tem 1760 PlayStation 3 (US Air Force)....... 40
Figura 24 - Cluster classe I, na Universidade de Tecnologia de Chemnitz (megware.com, 2013)...... 41
Figura 25 - Cluster classe II, Sun Microsystem Solaris Cluster (ChrisDag, 2013) ............................. 42
Figura 26 - Cluster de alta disponibilidade (wikipedia, 2013)............................................................. 45
Figura 27 - Arquitectura do Cluster com balanceamento de Carga (devmedia.com.br, 2013) ........... 47
Figura 28 - Arquitectura do cluster de alto desempenho, HPC (wikipedia, 2013) .............................. 48
Figura 29 - Cluster do grupo Structural and Computational Biology (norma.mbg.duth.gr, 2013) ..... 52
Figura 30 - Exponencial crescimento da supercomputação, (top500.org)........................................... 54
Figura 31 - Modelo de execução de Fork-Join (openmp.org, 2013).................................................... 61
.
10. x
Lista de abreviaturas e siglas
ANSI American National Standards Institute
API Application Programming Interface
CC-NUMA Cache Coherence Non-Uniform Memory Access
CDC Control Data Corporation
CESDIS Center of Excellence in Space Data and Information Sciences
CI Circuitos Integrados
COTS Comercial Off-The-Shelf
CPU Unidade central de processamento
CUDA Computer Unified Device Architecture
DEC Digital Electronic Computer
DHCP Dynamic Host Configuration Protocol
DSM Distributed Shared Memory
EDVAC Electronic Discrete Variable Automatic Computer
ENIAC Electronic Numerical Integrator and Calculator
FLOPS Operações De Ponto Flutuante Por Segundo
FSF Free Software Foundation
GCC Gnu Compiler Collection
Gnome Gnu Network Object Model Environment
GNU General Public License
GPGPU General Purpose Graphics Processing Unit
GPL General Public License
HA High Availability
HIPPI High Performance Parallel Interface
11. xi
HPC High Performance Cluster
HD Hard Disk
IAS Institute of Advanced Studies
IBM International Business Machines
IP Internet Protocol
KDE K Desktop Environment
LAN Local Area Network
LB Balanceamento de Carga
LSI Large Scale of Integration
M2COTS Mass Market Commercial-Off-The-Shelf
MC Memória Compartilhada
MIMD Multiple Instruction Multiple Data
MISD Multiple Instruction Single Data
MIT Massachusetts Institute of Technology
MPI Message Passing Interface
MPMD Multiple Program Multiple Data
MPP Massively Parallel Processor
NASA National Aeronautics and Space Administration
NFS Network File System
NUDT National University for Defense Technology
NUMA Non Uniform Memory Access
OSI Open Systems Interconnection
PAD Processamento de Alto Desempenho
PC Personal Computers
12. xii
PCI Interfase de Comunicação com Periféricos
PDP Programmed Data Processor
PV Processadores Vectoriais
PVM Parallel Virtual Machine
PVP Parallel Vector Processors
SCI Scalable Coherent Interface
SIMD Single Instruction Multiple Data
SISD Single Instruction Single Data
SMP Simmetric Multiprocessors
SSH Secure Shell
SSI Single System Image
UC Unidade de Controlo
ULA Unidade Logica e Aritmética
ULSI Ultra Large Scale of Integration
UMA Uniform Memory Access
VLSI Very Large Scale Integration
VLSI Very Large Scale of Integration
VPI Virtual Path Identifier
13. xiii
RESUMO
Com o desenvolvimento do nosso país na última década, tem surgido algumas
necessidades por poder computacional mais propriamente nas áreas que exigem
processamento em massa e área que necessitam eficiência e rapidez nos resultados, como as
aplicações de pesquisa, e outras, faz-se necessário a criação de ambientes com elevado poder
computacional. O uso de cluster tem sido uma das alternativas mais adoptadas para o
desenvolvimento de sistemas computacionais, que visam o alto desempenho, para atender as
necessidades por poder computacional.
O objectivo deste trabalho é o estudo fundamentado de arquitecturas para ambientes
de alto desempenho servindo como base a idealização, projecto e construção de um Cluster
Computacional.
Palavras-chave: Cluster, Programação Paralela, Sistemas de Alto Desempenho, super
computação.
14. xiv
Abstract
With the development of our country in the last decade, there has been some needs for
computing power more specifically in the areas that require bulk processing and areas in need
efficiently and quickly in the results, as research applications, and other it is necessary to
create environments with more computing power. The use of clusters has been one of the
alternatives adopted for the development of computer systems, aimed at the high
performance, and to meet the need for computational power.
The aim of this work is the study of the technologies and architectures for high-
performance environments serving as a basis ideation, design and construction of a
Computational Cluster.
Keywords: Cluster, Parallel Programming, High Performance Systems,
supercomputing.
15. xv
SUMÁRIO
LISTA DE TABELAS ............................................................................................................VIII
LISTA DE FIGURAS............................................................................................................... IX
LISTA DE ABREVIATURAS E SIGLAS ............................................................................................X
RESUMO................................................................................................................................XIII
ABSTRACT............................................................................................................................... XIV
SUMÁRIO............................................................................................................................... XV
1. INTRODUÇÃO...................................................................................................................1
1.1. BREVE HISTORIAL.............................................................................................................. 2
1.2. DESCRIÇÃO DO TEMA....................................................................................................... 3
1.3. HIPÓTESES............................................................................................................................ 4
1.4. JUSTIFICATIVA.................................................................................................................... 4
1.5. OBJECTIVOS......................................................................................................................... 5
1.5.1. Objectivos Gerais............................................................................................................ 5
1.5.2. Objectivos específicos..................................................................................................... 5
1.6. METODOLOGIA ................................................................................................................... 5
1.7. APRESENTAÇÃO DOS CAPÍTULOS ................................................................................. 6
2. BREVE HISTORIAL DA COMPUTAÇÃO ......................................................................7
2.1. GERAÇÃO DOS COMPUTADORES................................................................................... 7
2.2. SUPER COMPUTADOR ..................................................................................................... 12
2.3. GNU/LINUX......................................................................................................................... 16
2.3.1. Linux & Windows......................................................................................................... 18
3. FUNDAMENTOS DE PROCESSAMENTO DE ALTO DESEMPENHO ...................... 23
3.1. ARQUITECTURA COMPUTACIONAL (TAXONOMIA DE FLYNN) ........................... 27
3.1.1. Multiprocessadores........................................................................................................ 31
3.1.2. Multicomputadores........................................................................................................ 33
3.2. TENDÊNCIAS NA CONSTRUÇÃO DE MÁQUINAS PARALELAS .............................. 35
3.2.1. Processadores Vectoriais............................................................................................... 35
3.2.2. Simmetric Multiprocessors (SMP)................................................................................ 36
3.2.3. Distributed Shared Memory (DSM).............................................................................. 37
3.2.4. Massively Parallel Process (MPP) ................................................................................ 38
3.2.5. Sistemas distribuídos..................................................................................................... 39
3.2.6. Clusters.......................................................................................................................... 40
16. xvi
4. CLUSTER......................................................................................................................... 41
4.1. TIPOS DE CLUSTER........................................................................................................... 44
4.1.1. Cluster de alta disponibilidade (HA)............................................................................. 44
4.1.2. Cluster de Balanceamento de carga (LB)...................................................................... 46
4.1.3. Cluster de alto desempenho (HPC) ............................................................................... 47
4.2. COMBINAÇÃO DE CLUSTER .......................................................................................... 48
4.3. VANTAGENS DO CLUSTER DE ALTO DESEMPENHO................................................ 48
5. CLUSTER DE ALTO DESEMPENHO/PROCESSAMENTO PARALELO .................. 51
5.1. UTILIZAÇÃO DE LINUX EM CLUSTER ......................................................................... 53
5.2. O AUMENTO DA DEMANDA POR PROCESSAMENTO PARALELO......................... 53
5.3. ARQUITECTURAS COM MÚLTIPLOS PROCESSADORES.......................................... 56
5.4. VISÃO GERAL SOBRE PROGRAMAÇÃO PARALELA................................................. 57
5.5. TÉCNICAS DE PROCESSAMENTO PARALELO............................................................ 59
5.5.1. Programação multithread com OpenMP ....................................................................... 59
5.5.2. Troca de Mensagens com MPI...................................................................................... 62
5.5.3. Programação Paralela em GPU com CUDA................................................................. 63
6. CONFIGURAÇÃO DE UM CLUSTER DE ALTO DESEMPENHO.............................. 65
6.1. CLUSTER EM MAQUINAS VIRTUAIS............................................................................ 66
6.2. CLUSTER EM MAQUINAS FÍSICAS................................................................................ 66
6.3. ADICIONAR NÓS ............................................................................................................... 69
6.4. DEFINIÇÃO DE UM USUÁRIO PARA EXECUTAR TAREFAS .................................... 69
6.5. PREPARANDO O SISTEMA (SERVIDOR E NÓS):. ........................................................ 70
7. CONCLUSÃO E SUGESTÃO.......................................................................................... 89
8. REFERÊNCIAS BIBLIOGRÁFICAS ............................................................................. 91
9. ANEXO ............................................................................................................................. 94
17. 1
1. INTRODUÇÃO
O desenvolvimento do nosso país na última década tem sido crescente, alinhar a
estratégia de negócio a tecnologia de informação tem sido encarada para muitas instituições
como um problema devido a altos custos financeiros dos recursos computacionais empregue,
que reflectem assim na qualidade dos serviços prestados, desempenhando assim um papel
importante nos processos produtivos, e de suporte ao negócio.
A crescente demanda por informações e a dependência dos recursos computacionais,
que tratam com rapidez e eficiência grandes volumes de dados, pela sociedade e pelo
mercado, exige uma disponibilidade de serviços, sem a ocorrência de paragens em maior
quantidade de tempo possível, já que as empresas tem no seu portefólio produtos que exigem
alta disponibilidade e desempenho, não podem ter seus sistemas comprometidos, sejam por
hora, minutos e até mesmo segundos.
A solução para esta necessidade são os supercomputadores, e a sua aquisição tem
custos elevados, na maior parte dos casos a sua compra não é rentável em termos de custos,
surgindo como alternativas os cluster.
Nos últimos anos as redes de computadores se tornaram mais rápidas e mais
confiáveis, permitindo a interligação de computadores pessoais de forma eficiente
possibilitando a criação de sistemas distribuídos, cluster. Cluster permite a formação de uma
imagem única do sistema, de forma que o usuário não perceba que estamos a trabalhar em
vários computadores conectados.
18. 2
A computação em cluster ganhou destaque nos anos 80 com a convergência de três
importantes factores: microprocessadores de alta performance, redes de alta velocidade, e
ferramentas de computação distribuída de alta performance (YEO et al., 2006).
Segundo Karl Kopper (2005), cluster é um sistema paralelo ou distribuído que
constitui um conjunto de computadores interligados, que são utilizados como um recurso
computacional único.
Diante do exposto e da importância do tema, este trabalho tem por objectivo
desenvolver uma solução, descrevendo os passos, para implementação de cluster eficiente e
de baixo custo, envolvendo o sistema operacional GNU/Linux, sistema de código livre
baseado em Unix.
O facto de ter o código livre possibilita as empresas fazer personalização do sistema
para seu próprio cenário, obtendo assim melhor desempenho da tecnologia (FERREIRA,
2008).
1.1. BREVE HISTORIAL
A primeira ideia de cluster foi desenvolvida pela IBM na década de 60, com o
objectivo de interligar grandes mainframes. Mais tarde em 1994 surge nos laboratórios do
CESDIS - Center of Excellence in Space Data and Information Sciences, da NASA, uma das
soluções, quando engenheiros e pesquisadores tiveram a ideia de utilizar microcomputadores
comuns, para realizarem tal tarefa, bastava fazer com que vários deles, ligados em rede,
funcionassem como uma máquina – um computador virtual – também chamado de cluster. O
projecto contava com 16 computadores 486, hardware comum e de fácil acesso, executando a
plataforma GNU/Linux. (BUENO, 2007).
19. 3
Segundo (PITANGA, 2003), o primeiro cluster recebeu o nome de BEOWULF, e até
hoje é conhecido como nome padrão para todos os clusters que têm configuração semelhante
ao primeiro cluster. O BEOWULF marcou um período de ouro para o Linux na área de super
computação, justamente por permitir que grande poder computacional pudesse ser alcançado
com equipamento disponível no mercado.
Cluster de alto desempenho, HPC (do inglês High Perfomance Computing), hoje em
todo mundo são comuns em grandes centros de pesquisas e industrias, que necessitam de
grande poder computacional, e um dos grandes factores é o preço relativamente baixo às
ofertas existentes nos mercados para supercomputadores. Hoje a utilidade dos clusters vai
desde a: meteorologia, astrofísica, exploração de petróleo, optimização, pesquisa operacional,
biotecnologia, tolerância a falhas, simulação de mercados financeiro, inteligência artificial,
servidores de internet, tratamento de imagens, jogos, e até renderização de efeitos visuais para
o cinema (BROWN, 2006).
A era da Supercomputação, no nosso pais ainda é miúda, e reconhecendo a amplitude
e valor da mesma, mesclando o papel da computação de alto desempenho hoje, e caindo o véu
da necessidade eminente da evolução das tecnologias de software voltadas a estas
arquitectura, decidi apresentar neste trabalho, a implementação de HPC usando Linux que
possibilita obter um desempenho superior a qualquer computador desktop disponível a baixo
custo.
1.2. DESCRIÇÃO DO TEMA
No nosso país, existem instituições que enfrentam inúmeros problemas no que tange a
elevada capacidade computacional com alto desempenho na sua solução, para suprir cálculos
complexos e repetitivos, reflectindo assim na qualidade do serviço prestado, tarefa esta,
executada por supercomputadores. A aquisição de supercomputadores, apesar de ser muito
20. 4
poderosa, não é viável em alguns casos, tendo em vista o desenvolvimento de
microprocessadores poderosos hoje em dia, a baixo custo e de redes de alta velocidade para
atingirmos o alto desempenho.
1.3. HIPÓTESES
Face os problemas acima exposto, proponho as seguintes hipóteses para a sua
resolução:
1. Aquisição de Supercomputadores proprietários.
2. Construção de cluster beowulf, sistemas de processamento paralelo e
distribuído, solução de baixo custo usando software livres.
3. Compra de cluster comercial, configurações simplificadas e de custos mais
altos usando software proprietário e hardware sofisticados.
1.4. JUSTIFICATIVA
É crescente o número de projectos no nosso país que necessitam de grande poder de
processamento, onde normalmente são empregues os supercomputadores. Um computador
deste porte tem custos elevadíssimos, os clusters representam uma alternativa. No final deste
trabalho, o mesmo servirá de orientação inicial para usuários que queiram Implementar ou
atingir alto desempenho usando cluster, a partir de configurações manuais a custo
relativamente baixos, usando software livres. E estudar os paradigmas da computação paralela
de forma a solidificar os conhecimentos mais abrangente sobre cluster HPC.
O cluster tem como principal vantagem seu valor de custo e benefício muito inferior
em relação as outras tecnologias existentes no mercado no que toca a disponibilidade, alto
desempenho, e balanceamento de cargas, conforme (PITANGA, 2007).
21. 5
1.5. OBJECTIVOS
Este trabalho servirá como primeiro contacto a área de supercomputação. Respostas as
questões “o que é um supercomputador? E cluster é a alternativa a supercomputação?”. Será
apresentado aos objectivos geral e específico, que se pretende atingir com este projecto de
pesquisa.
1.5.1. Objectivos Gerais
Realizar estudo sobre computação paralela e cluster, permitindo a aquisição de
conceitos básicos sobre o tema e como resultado final a implantação de um cluster de alto
desempenho usando o Linux para resolução dos problemas acima referenciados.
1.5.2. Objectivos específicos
Os objectivos específicos deste trabalho são:
Aprender a origem da computação e fundamentos do processamento de alto
desempenho.
Descrever alguns recursos do Linux e vantagens do Cluster.
Configurar um cluster de alto desempenho usando Linux Ubuntu.
Realizar um teste básico.
1.6. METODOLOGIA
Para o desenvolvimento deste projecto, utilizar-se-á referências bibliográficas sobre
clusters, equipamentos de redes e materiais didácticos de apoios.
O estudo deste projecto contará com uma abordagem básica sobre paralelismo
estritamente ligado ao tema do projecto, para depois partir para uma abordagem mais prática
com implantação de alguns conceitos teóricos pré-estudados. E no final iniciaremos a
22. 6
configuração passo a passo de um cluster HPC de baixo custo e considerações futuras de
como melhorar o seu desempenho.
1.7. APRESENTAÇÃO DOS CAPÍTULOS
Este trabalho de fim de curso conta com 7 (sete) capítulos.
No capítulo 1, constitui a apresentação global do tema incluindo breve histórico,
importância e justificativa do tema. O capítulo 2 faz uma abordagem histórica da computação
desde a primeira geração até a era dos supercomputadores, e sem esquecer do papel do
GNU/Linux no desenvolvimento dos supercomputadores de hoje.
O capitulo 3 contem fundamentos teóricos, necessários para um melhor entendimento
sobre paralelismo, onde faz-se uma abordagem sobre arquitecturas computacional baseando
se na taxonomia de FLYNN.
O capítulo 4, fala de clusters, tipos de clusters, vantagens e desvantagens. O capitulo
5, debruça se mais ao cluster de processamento paralelo ou alto desempenho, e suas
ferramentas necessárias, e o funcionamento do MPI (do inglês Message Passing Interface).
O capítulo 6, representa a parte prática do projecto, configuração de um cluster HPC, e
finamente o capítulo 7, mostrando as considerações finais e futuras, do cluster construído para
sua melhoria.
23. 7
2. BREVE HISTORIAL DA COMPUTAÇÃO
De acordo com TANENBAUM (2003), sempre que nos apegamos a evolução dos
computadores, quantidade disponível, variedades de modelos, logo, associamos estes
dispositivos a nova tecnologia. Não podemos nos esquecer jamais que a tecnologias utilizadas
na construção dos mesmos evoluíram, mas os conceitos básicos descendem da década de 40.
2.1. GERAÇÃO DOS COMPUTADORES
Primeira Geração
A primeira geração de computadores, na década de 1940 estabeleceu os conceitos
básicos da organização dos computadores electrónicos. Os computadores desta época
utilizavam válvulas electrónicas e uma quantidade enorme de fios. Eram muito grandes e
lentos, além de aquecerem muito. Estes computadores possuíam somente dois níveis de
linguagem de programação:
O nível da linguagem de máquina, onde toda a programação era feita, através de zeros
e uns.
E o nível da lógica digital, local na qual os programas eram efectivamente executados,
sendo formado nesta geração por válvulas e depois por transístores, circuitos
integrados (CI).
Em 1946, Von Neumann sugeriu um sistema binário, que viria a se tornar à base de
outros projectos de desenvolvimento computacional subsequente. A máquina proposta por
Von Neumann era composta por uma unidade de processamento centralizada, responsável
pela execução de operações aritméticas e lógicas, uma unidade de controlo de programa, na
qual determinava quais acções executar, uma unidade de memória principal e uma unidade de
entrada e saída de dados (WEBER, 2000).
24. 8
De acordo com PITANGA (2004), o processador executa as instruções
sequencialmente, de acordo com a ordem estabelecida por uma UC (unidade de controlo). O
modelo lógico de computador proposto por Von Neumann pode ser descrito pela figura
abaixo:
Figura 1- Arquitectura de Von Neumann (wikipedia, 2013)
Figura 2- Computadores baseado na arquitectura de Von Neumann, ENIAC(fi.edu, 2013)
Segunda Geração
A segunda geração de computadores ficou marcada pela invenção do transístor que
venho a substituir as válvulas electrónicas e a troca dos fios de ligações por circuitos
impressos. Com estas trocas, os computadores não só ficaram mais rápidos, mas tiveram
também uma redução no tamanho dos equipamentos, nos custos e no consumo de energia.
Além disso, com a troca das válvulas pelos transístores, não era mais necessário um tempo
25. 9
para aquecimento antes do seu funcionamento. Nesse período surgem também alguns
dispositivos como impressoras, fitas magnéticas e discos de armazenamento (ufpb.br, 2013).
Figura 3 - Exemplo de computador comercializado na segunda geração (ufpb.br, 2013)
Terceira Geração
A invenção dos CI proporcionou mais um grande avanço na evolução da computação
e com eles surgem os computadores de terceira geração. Os transístores foram substituídos
por esta nova tecnologia e sua utilização tornou os equipamentos mais compactos, rápidos e
confiáveis, com baixo consumo de energia, e um custo ainda menor que os das gerações
anteriores. Nesta geração, também foram desenvolvidas as linguagens de programação de alto
nível orientada a procedimentos.
Figura 4 - Comparação do circuito integrado com uma moeda (ufpb.br, 2013)
26. 10
Quarta Geração
O período decorrente de 1970 até os dias de hoje, ficou caracterizado pelo
aperfeiçoamento das tecnologias já existentes, denominando-se os computadores da quarta
geração. Tecnologias de integração dos CI foram desenvolvidas, incorporando milhões de
componentes electrónicos em um pequeno espaço ou chip, denominados por escala de
integração (ufpb.br, 2013):
Figura 5 - Computador pessoal de quarta geração (ufpb.br, 2013)
Escala de integração grande (LSI - Large Scale of Integration)
Escala de integração muito grande (VLSI - Very Large Scale of Integration)
Escala de integração ultra grande (ULSI - Ultra Large Scale of Integration).
Assim, avanços significativos com a optimização dos componentes e o surgimento dos
microprocessadores e microcomputadores fizeram com que houvesse uma explosão no
mercado de computadores a partir de 1980, sendo fabricados em escala comercial, uma vez
que, computadores anteriores a esta geração eram restritos a poucas empresas e universidades,
devido a custos e tamanho dos equipamentos. A partir daí, os avanços tecnológicos vem
sendo cada vez maior até chegar nos pc actuais, com velocidades cada vez maiores e com
custos muito mais baixo, se comparados com as tecnologias anteriores (PITANGA, 2003).
27. 11
Figura 6 - Computador de quinta geração (ufpb.br, 2013)
Quinta Geração
A computação da quinta geração ou computador da quinta geração, deve o seu nome a
um projecto gigantesco de pesquisa governamental e industrial no Japão durante a década 80
do século XX. O projecto tinha como principal objectivo a criação de um computador que
“marcasse uma época” com performance semelhante a um supercomputador e capacidade
prática de inteligência artificial (ufpb.br, 2013)..
Visto que a anterior geração de computadores (quarta geração) se tinha focado no
aumento do número de elementos lógicos numa única CPU, acreditava-se plenamente na
altura que a quinta geração iria virar-se completamente para a utilização de quantidades
enormes de CPU’s para um desempenho maior das máquinas.
Sendo assim, a indústria da computação é uma das que mais cresce e é abastecida
pelos desenvolvimentos tecnológicos rápidos na área de software e hardware. Os avanços de
tecnologias de hardware incluem o desenvolvimento e fabricação de chips e processadores
rápidos e baratos, com largura de banda elevada e baixa latência de interconexão. Destacam-
se recentemente avanços na tecnologia VLSI, que deram um dos principais passos no
desenvolvimento de computadores sequenciais e paralelos. Assim como o desenvolvimento
28. 12
de hardware teve grande evolução, o desenvolvimento de software também evoluiu
rapidamente. Softwares maduros como sistemas operativos, linguagens de programação e
ferramentas de desenvolvimento estão disponíveis no mercado a fim de suprir as necessidades
comerciais (BUYYA, 1999).
Cada era da computação ficou caracterizada pelo inicio do desenvolvimento de
arquitecturas de hardware, seguido pelo desenvolvimento de sistemas operativos e
compiladores, até alcançar seu crescimento comercial.
Figura 7 – Supercomputador Jaguar, da classe Cray XT5 (olcf.ornl.gov, 2013)
2.2. SUPER COMPUTADOR
Supercomputador é um computador com altíssima velocidade de processamento e
grande capacidade de memória. Tem aplicação em áreas de pesquisa que grande quantidade
de processamento se faz necessária, como pesquisas militares, científica, química, medicina.
Supercomputadores são usados para cálculos muito complexos e tarefas intensivas, como
problemas envolvendo física quântica, mecânica, meteorologia, pesquisas de clima,
modelagem molecular (computação nas estruturas e propriedades de compostos químicos,
macromoléculas biológicas, polímeros e cristais) e simulações físicas, como simulação de
29. 13
aviões em túneis de vento, simulação da detonação de armas nucleares e investigação sobre a
fusão nuclear (wikipedia, 2013).
O que diferencia dos computadores normais, é que vários processadores, hd´s e
módulos de memória são combinados para criar um sistema incrivelmente rápido
(MORIMOTO, 2012).
Os primeiros supercomputadores foram criados na década de 1960 por Seymour Cray.
Seymour Cray fundou sua própria empresa, a Cray Research, em 1970 e dominou o mercado
da supercomputação durante 25 anos (1965-1990).
Máquinas estas, que inovaram em arquitectura, no entanto, o aumento da eficiência
computacional estava limitado pelo desenvolvimento tecnológico, principalmente pelo facto
dos processadores terem que terminar uma tarefa antes de iniciar outra. Dessa forma,
percebeu-se que a divisão de tarefas traria avanços significativos quanto ao desempenho das
máquinas, surgindo a partir desta época dois caminhos distintos: Arquitecturas paralelas e
sistemas distribuídos (PITANGA, 2004)
As principais características dos supercomputadores são:
Velocidade de processamento: triliões de operações de ponto flutuante por segundo
(TFlops).
Tamanho: requerem instalações e sistemas de refrigeração especiais;
Dificuldade de uso: escolhido por especialistas;
Clientes usuais: grandes centros de pesquisa;
Penetração social: praticamente zero;
Impacto social: muito importante no espaço da investigação, a partir do momento em
que fornece cálculos em alta velocidade, permitindo, por exemplo, analisar a ordem do
30. 14
genoma, o número pi, números complexos, o desenvolvimento de cálculos para
problemas físicos que requerem uma baixíssima margem de erro, etc.
Parques instalados: menos de mil em qualquer lugar no mundo;
Custo: actualmente (2010) até centenas de milhões de dólares cada (~ US$ 225MM o
Cray XT5) (fonte: wikipedia, 2013).
Actualmente, os supercomputadores estão com capacidades altíssimas de poder de
processamento. O supercomputador mais rápido na actualidade opera a uma velocidade de
33,86 petaflops (34 quatrilhões de cálculos matemáticos por segundo), tem 32.000
processadores Ivy Bridge e 48.000 co-processadores Xeon Phi da Intel, e tem 12,4 petabytes
de espaço de armazenamento e com um consumo energético de total de 17,8 MW, arrefecido
por um sistema de ar de circuito fechado. Pertence a National University for Defense
Technology (NUDT) da China e chama se TIANHE-2, também conhecido por Milkyway-2,
foi testado em junho deste ano (2013) e entra em funcionamento no final do ano. O TIANHE-
2 roda o Kylin Linux, uma versão do Linux desenvolvida pela NUDT, quando estiver a
funcionar fornecerá uma plataforma aberta para o ensino, pesquisa, e a prestação de serviços
de computação de alto desempenho para o sul da China (cri.cn, 2013).
Figura 8 - Tinhae 2, o supercomputador mais rápido do mundo (cri.cn, 2013)
31. 15
Tabela 1- Relação dos 5 supercomputadores mais rápidos do mundo (top500.org, 2013)
Nome Fabricante Processadores
Perfomance
Max
Perfomance
teórico
Memoria SO
Tianhe-2 NUDT 3.120.000
33,862.7
TFLOP/s
54,902.4
TFLOP/s
1.024.000
GB
Linux
Titan Cray Inc. 560.640
17,590
TFLOP/s
27,112.5
TFLOP/s
710.144
GB
Linux
Sequoia IBM 1.572.864
17,173.2
TFLOP/s
20,132.7
TFLOP/s
1.572.864
GB
Linux
K Computer Fujitsu 705.024
10,510
TFLOP/s
11,280.4
TFLOP/s
1.410.048
GB
Linux
Mira -
BlueGene
IBM 786.432
8,586.6
TFLOP/s
10,066.3
TFLOP/s
-- Linux
Se olharmos para tabela acima, que representa o top 5 dos melhores
supercomputadores do mundo, vemos logo que todos usam o Linux como sistema operativo.
Segundo o site top500.org, 95,2% dos sistemas operativos usados nos supercomputadores são
da família Linux (TOP500.ORG, 2013).
fonte: top500.org
Supercomputadores são sistemas de processamento de dados com o poder
computacional altíssimo, capaz de realizar cálculos complexos. Eles são usados
principalmente em instituições de pesquisa e grandes corporações e são projectados para
executarem tarefas específicas com eficiência.
32. 16
2.3. GNU/LINUX
O Linux e um sistema operativo criado à partir do Unix, como alternativa funcional e
acessível a comunidade, devido aos altos preços do unix na época.
O Linux foi desenvolvido por Linus Torvalds, baseado no Unix, desenvolvido em
meados da década de 60, por um grupo de programadores da Bell, Telephone Labs. da AT&T,
juntamente com a GE (General Electric) o projecto MAC do MIT (Massachusetts Institute of
Technology), desenvolvem o sistema operativo Multics. Porém, como ele não atinge seu
propósito inicial, logo o Laboratório Bell retira-se do projecto devido a atrasos dos prazos
(WELSH; KAUFMAN, 1995).
Por causa de um jogo chamado Space Travel usado como passatempo durante o
projecto Multics, dois engenheiros de software da AT&T, Ken Thompson e Dennis Richie,
que não tinham mais acesso ao sistema, resolveram criar um sistema operativo rudimentar que
possibilitasse a portabilidade do jogo em um computador PDP-7, que já não era mais
utilizado. Desta forma nasceu o sistema operativo chamado Unics, em troca ao Multics e que
de alguma forma, passou a ser escrito posteriormente como Unix (GNU.ORG, 2013).
Já no início da década de 70, o Unix é reescrito em linguagem C pelo próprio criador
da Linguagem, Dennis Ritchie, fazendo com que seu uso dentro da AT&T crescesse tanto,
que um grupo de suporte interno para o sistema acabou sendo criada. Eles forneciam cópias
do código fonte para fins educacionais em universidades.
Em 1983, Richard Stallman, um cientista do MIT lança o projecto GNU (GNU´s not
Unix) que tinha a pretensão de criar um sistema operacional do tipo Unix gratuito, em defesa
de muitos programadores que haviam contribuído para o aprimoramento do Unix e
consideravam injusto que a AT&T e outros se apoderassem do fruto deste trabalho. No ano
seguinte, o projecto GNU é iniciado oficialmente, e para efeito de organização, Stallman e
33. 17
outros criam a Free Software Foundation (FSF), uma corporação sem fins lucrativos que
buscava promover softwares gratuitos, eliminando restrições à cópia, formulando assim a
licença GPL (General Public License)(WIKIPEDIA, 2013).
De acordo com o mesmo site, no final da década de 80, um estudante finlandês
chamado Linus Torvalds inicia um processo de desenvolvimento do núcleo como um projecto
particular inspirado no sistema Minix, um sistema operacional do tipo Unix escrito por
Andrew Tannenbaum, Linus chama-o de Linus's Minix. Depois de um certo tempo de
trabalho, Linus envia uma mensagem para o grupo de discussão do Minix, na qual afirma
estar trabalhando em uma versão livre de um sistema operacional similar ao minix para
computadores AT-386, tendo finalmente alcançado o estágio de utilização, e estava disposto a
colocar o código-fonte disponível para ampla distribuição.
Como a FSF já tinha obtido ou escrito vários componentes importantes do sistema
operativo GNU, com excepção de um kernel, foi uma questão de tempo até que em 5 de
Outubro de 1991, Linus Torvalds anuncia a primeira versão oficial do Linux, versão 0.02
tendo sucesso ao executar alguns compiladores, bash, gcc, e outros. No ano seguinte, o Linux
se integra a GNU com o objectivo de produzirem sistema operacional completo
(WIKIPEDIA, 2013).
Desde então, muitos programadores e usuários espalhados pelo mundo, têm seguido as
ideais de Richard Stallman e Linus Torvalds, e contribuído para o desenvolvimento do Linux.
No início, o Linux era utilizado por programadores ou com conhecimentos, e usavam
a linha de comando. Hoje com o chamado de Linus em 1991, isso mudou e existem diversas
empresas que criam os ambientes gráficos, distribuições cada vez mais amigáveis de forma
que uma pessoa com poucos conhecimentos conseguem usar o Linux (interface gráfica KDE e
Gnome). Hoje o Linux e um sistema estável.
34. 18
Figura 9 - Logomarca do projecto Gnu (gnu.org, 2013)
Figura 10 - Tux a mascote do Linux (wikipedia, 2013)
Inicialmente desenvolvido e utilizado por grupos de entusiastas em computadores
pessoais, os sistemas operativos com núcleo Linux passaram a ter a colaboração de grandes
empresas como a IBM, Sun, HP, Novell, Google, e outras.
2.3.1. Linux & Windows
O lançamento do Linux, como alternativa ao sistema operativo dominante da
Microsoft, causou impacto no mundo inteiro principalmente pelo facto de ter o código-fonte
aberto, possibilitando sua alteração por qualquer um que tivesse habilidade. Começava a era
do software livre e por ironia, o Linux teve sucesso em rejuvenescer um dos mais antigos
sistemas operacionais até então em uso, o Unix (WELSH; KAUFMAN, 1995).
35. 19
Tabela 2 - Linux & Windows (diffen.com, 2013)
GNU/Linux Windows
O que é? Um exemplo de software e SO opensource
Da família do SO da Microsoft, e o mais
famoso do mundo
Preço Gratuito ou baixo custo 50 - 450 USD dependendo da licença
Facilidade
Cada vez mais facilitado para os usuários
menos experientes
Mais avançado no que toca a facilidade de
uso. Mais fácil que o Linux
Desenvolvimento
O kernel, e desenvolvido pela comunidade, e
o Linux Torvalds superviona.
A Microsoft criou o SO, mas permite que
outros fabricantes de computadores
distribuem seus próprios pc com o SO pré-
instalado
Utilidade
Pode ser instalado em uma ampla variedade
de hardware de computador, que vão desde
telefones, tablets e videogame, para
mainframes e supercomputadores.
Em desktops, pc, servidores e alguns
telefones.
Distribuição
Opensource, através da partilha e
colaboração de varias comunidades, fóruns,
vários fornecedores
Pela Microsoft
GUI
Duas interfaces gráficas, KDE e Gnome.
Opcional
A interface e um componente integral do
SO
Extensões
Ext2, Ext3, Ext4, Jfs, ReiserFS, Xfs, Btrfs,
FAT, FAT32, NTFS
FAT, FAT32, NTFS, exFAT
Modo Texto
BASH é o padrão.
Suporta vários interpretadores de comando
usa um shell de comando e cada versão do
Windows tem um único interpretador de
comandos com comandos dos, recentemente
a adição do PowerShell opcional, usa mais
comandos do Unix.
Segurança
Registou 60 a 100 vírus até a data de hoje, e
nenhum deles está no activo.
De acordo com o Dr. Nic Peeling e Dr.
Julian Satchell’s, já houve mais de 60.000
vírus
Detecção de
ameaças e
solução
é muito rápido, sempre que há quaisquer
mensagens de usuários Linux em qualquer
tipo de ameaça, vários desenvolvedores
começam a trabalhar nele a partir de
diferentes partes do mundo.
Depois de detectar uma ameaça no SO,
geralmente libera um patch que pode
corrigir o problema e pode levar mais de 2/3
meses. Às vezes, mais cedo, lança patches e
actualizações semanais.
36. 20
Em termos técnicos, o Linux é apenas o núcleo do sistema operativo, responsável
pelos serviços básicos de escalonamento de processos, memória virtual, tratamento de
excepções, gerenciamento de arquivos, dispositivos entrada/saída etc. No entanto, a maior
parte das pessoas utiliza o termo “Linux” referindo-se ao sistema completo – núcleo junto das
aplicações, interfaces gráficas, jogos e outros. Estas aplicações foram desenvolvidas em sua
maior parte graças ao projecto GNU, daí a razão de muitos desenvolvedores denominarem o
sistema completo como “GNU/Linux” (WELSH; KAUFMAN, 1995).
Como o Linux pode ser modificado e distribuído por qualquer um, naturalmente
começaram a surgir as tão faladas distribuições, ou “distros” como são carinhosamente
chamadas em alguns círculos. As mais famosas são, com certeza, Ubuntu, RedHat, Debian,
Suse, Mandriva, Fedora, e tantos.
Falar de popularidade em todo mundo devido à facilidade de manuseio, configuração e
por disponibilização de infinidade de pacotes (softwares) nos repositórios on-line de
programas sem falar do Ubuntu hoje, é extremamente chocante, razão pela qual é a nossa
escolha para implementação da parte prática.
Os programas são instalados e executados no Linux de uma forma muito mais
eficiente, segura e elegante do que em outros sistemas operativos: o usuário não precisa se
preocupar em qual directório o programa deve ser instalado ou muito menos se irá contrair um
vírus ao fazê-lo, pois os pacotes Linux vêm pré-compilados, diferentemente dos executáveis
“.exe” do Windows. Além do mais, no Linux não é necessário ficarmos horas a procura por
programa, pois as distribuições vêm com a maioria dos programas essenciais para o trabalho,
como editores de texto, planilhas, utilitários para gravação de CDs, tocadores de música e
DVD, entre outros. Na pior hipótese, caso o usuário não encontre o programa que deseja,
basta digitar um comando simples em um terminal, que o Linux se encarrega
37. 21
automaticamente de procurá-lo nos repositórios on-line, fazendo o seu download e instalação
sem intervenção externa (BUENO, 2002).
De acordo com o mesmo autor, além do poder do Linux em transformar qualquer
computador pessoal em uma estação de trabalho com o poder do Unix, ele também é utilizado
para controlar grandes servidores, devido às suas características de flexibilidade e estabilidade
para lidar com grandes arrays de disco e sistemas multiprocessados, com aplicações que vão
desde servidores web a bases de dados corporativas.
A utilização do Linux como sistema operativo em um ambiente de Cluster se encaixa
muito bem, ainda mais para fins académicos. Segundo os administradores do Tianhe-2, – um
dos maiores Clusters em operação, situado na China – a utilização do Linux não se deve ao
facto de ser gratuito e sim porque ele tem o código fonte aberto, desempenho de rede superior,
e está sendo continuamente desenvolvido de maneira aberta e acessível (WARREN, 2002).
Entretanto, vários outros factores podem influenciar em tal escolha, como facilidade
de manuseio, configuração, compatibilidade de hardware e até familiaridade do projectista
com a distribuição em questão, visto que podem haver diferenças significativas entre elas
dependendo da aplicação, apesar de todas carregarem o nome Linux.
39. 23
3. FUNDAMENTOS DE PROCESSAMENTO DE ALTO DESEMPENHO
Em 1943, um matemático Howard Aiken, começou um projecto que abriu caminho
para o surgimento dos primeiros grandes computadores. Nomeado de MARK I, o computador
realizava, em um dia, cálculos que antes consumiriam seis meses. Juntamente com o início da
Segunda Guerra Mundial, Alan Turing utilizou seu projecto Colossus para decifrar mensagens
interceptadas de exércitos inimigos. Colossus, primeiro computador a utilizar válvulas,
procurava coincidências entre as mensagens cifradas e os códigos conhecidos, em uma taxa
de 5.000 caracteres por segundo.
Com um projecto iniciado em 1942 e finalizado em 1945, coincidindo com o final da
Segunda Guerra Mundial, o Eletronic Numerical Integrator and Calculator (ENIAC),
projecto de John Mauchly e Presper Eckert com aporte financeiro do exército americano,
usando válvulas eletrônicas, alcançou clock de 100 khz. O seu sucessor, Electronic Discrete
Variable Automatic Computer (EDVAC), foi modelo para a construção de outros
computadores. Planejado por John von Neumann, principal ícone do desenvolvimento de
computadores do pós-guerra, a máquina Institute of Advanced Studies (IAS), já processava
informações de forma binária e armazenava tanto dados quanto o programa em uma memória
interna. Os complexos cálculos de balística passaram a ser executados em 30 segundos, contra
12 horas dos métodos anteriores. Findando a primeira geração de computadores a
International Business Machines (IBM) lançou o modelo 704 que contemplava componentes
de hardware exclusivos para dados em ponto-flutuante.
A geração posterior dos computadores é caracterizada pela substituição das válvulas
pelos transístores e o início do uso de computadores para fins comerciais. Em 1956, surgiu o
primeiro computador transistorizado. Inventado em 1948, nos Laboratórios da Bell , o
transístor era mais rápido e mais confiável. Com uma dimensão aproximada de 100 vezes
40. 24
menor que uma válvula, não precisava de tempo para aquecimento e consumia menos energia.
Alguns computadores desta geração eram programados em linguagem montadora e já faziam
cálculos em microssegundos (milionésimos de segundos). Fabricados pela Digital Electronic
Computer (DEC), surgem em 1961 os computadores da família Programmed Data Processor
(PDP), dando origem à indústria dos chamados minicomputadores. O modelo 6600 da
companhia Control Data Corporation (CDC), em 1964, foi o primeiro expoente dos
computadores que poderiam executar instruções em paralelo. Exclusivamente projectado para
processamento científico, se bem programado, poderia executar 10 instruções ao mesmo
tempo (TANENBAUM 2003).
De acordo o autor, os circuitos integrados, associação de vários transístores em um
mesmo chip, e a miniaturização de outros componentes electrónicos, propiciaram um novo
avanço e com eles surgiram os computadores de terceira geração. Ainda mais confiáveis e
menores, pela proximidade dos componentes, os circuitos integrados tornaram os
computadores mais compactos, rápidos, baratos e com baixo consumo de energia. Os
representantes mais importantes foram os modelos da família System/360, fabricados pela
IBM , projectados tanto para aplicações científicas quanto para aplicações comerciais. Uma
outra inovação desta geração foi a implantação do conceito de multi-programação e um
grande espaço de endereçamento de memória.
A próxima geração dos computadores foi marcada pela técnica VLSI, que possibilitou
a inclusão de dezenas de milhares e, posteriormente, centenas de milhões de transístores em
um único chip. Surge então o microprocessador e com ele a era da computação pessoal.
Assim, os fabricantes dividiram esforços na fabricação de supercomputadores e computadores
pessoais. Os supercomputadores eram dominantes na área científica, que é baseada em
cálculos complexos, e nas empresas, com vários terminais acoplados executando aplicações
41. 25
comerciais. Os Personal Computers (pcs) alavancaram as aplicações integradas como editores
de texto, planilhas electrónicas, manipuladores de imagens, entre outros.
Ao longo do tempo, uma série de técnicas e recursos sofisticados da supercomputação
foram incorporados, sucessivamente, aos microprocessadores utilizados em computadores
pessoais e estações de trabalho. Acreditava-se, na década de 80, que o aumento do
desempenho de uma máquina dependia apenas e tão-somente da criação de processadores
mais rápidos e eficientes, porém havia outros empecilhos, tais como:
Alto custo e longos prazos, na pesquisa e projecto de novas arquitecturas de hardware;
Necessidade de se trabalhar com tecnologia de ponta;
Limitação e dependência de outros componentes como memória e dispositivos de
armazenamento;
Uma esperada saturação da tecnologia, ou seja, em um determinado momento a
tecnologia aplicada aos processadores não conseguirá miniaturizar e colocar tantos
transístores quanto necessários para aumentar o poder de processamento do chip em questão.
A computação passou por um processo evolutivo intenso, em termos de hardware e
software, a fim de proporcionar maior desempenho e ampliar o leque de aplicações que
podem ser computacionalmente resolvidas de maneira eficiente. Diversas técnicas e
tecnologias foram propostas para se chegar o mais próximo possível do estado da arte e
construir componentes complexos em chips cada vez menores (STALLINGS 2002).
Os Grandes avanços ocorridos no processo de fabricação de microprocessadores
actuais estão baseados no aumento do pipeline, melhor organização da hierarquia de memória
cache, hyper-threading, dual core, dentre outros.
42. 26
Estas inovações trazem mais eficiência e velocidade aos microprocessadores, dando
oportunidades aos softwares, principalmente os de propósito geral, um excelente ambiente de
execução. Entretanto, essa evolução não é suficiente para suprir a exigência de alguns
softwares específicos que consomem facilmente os recursos computacionais oferecidos pelas
máquinas convencionais (modelo de von Neumann).
O tratamento de grandes problemas, principalmente das áreas científicas como:
processamento de imagens e sinais, inteligência artificial, mineração de dados, física
molecular, previsão meteorológica, estudos sísmicos, pesquisas militares, aerodinâmica de
aviões e mísseis, exploração de petróleo, diagnóstico médico, entre outras, demandam o uso
de máquinas com múltiplos processadores ou ainda supercomputadores proprietários,
fornecidos por grandes empresas. Ambas as soluções oferecem grande desempenho, mas
apresentavam problemas no elevado custo e na baixa escalabilidade.
Baseado nas dificuldades apresentadas, Donald Becker e Thomas Sterling, em 1993,
na NASA, tiveram a ideia de juntar computadores pessoais para um trabalho cooperativo
(STERLING & Lusk 2003) e (BELL & GRAY 2002). Com o grande sucesso desta
experiência, baptizada de cluster, conseguiram alcançar níveis de processamento equivalentes
aos de supercomputadores da época, mas por uma fracção do seu preço.
Segundo (FRANCO, 2004), cluster é um conjunto de máquinas ou nós, normalmente
sem necessidade de periféricos, interligadas via rede, que trabalham em conjunto, trocando
informações entre si para solucionar uma determinada tarefa.
Como já foi mencionado, a estrutura do cluster apresenta vantagens competitivas em
relação a outros ambientes multiprocessador, tanto de memória compartilhada quanto
distribuídas, além do custo, que em geral é menor, oferece uma maior flexibilidade com um
proporcional poder de processamento (STALLINGS 2002).
43. 27
Isto é possível pela utilização de componentes padrão de mercado, ligados por uma
rede tradicional de interconexão, que, através de softwares livres e programação paralela,
fornecem um ambiente propício para a comunicação e sincronização das tarefas em execução
(STERLING & Lusk 2003).
Assim, o aprimoramento dos computadores pessoais, a redução dos preços e a
excelente relação custo/benefício apresentada pelos clusters tiveram um impacto notório nos
centros de pesquisas, que, novamente, vislumbraram boas oportunidades para solucionar seus
problemas de grande escala.
3.1. ARQUITECTURA COMPUTACIONAL (TAXONOMIA DE FLYNN)
A classificação dos ambientes de hardware mais aceite na área de arquitectura de
computadores é a conhecida por taxonomia de Flynn, (FLYNN 1974), proposta de Michael J.
Flynn em 1966 e publicada pela IEEE em 1972.
Esta classificação distingue a arquitectura de computadores, de acordo com o fluxo de
instruções e de dados leva em consideração o número de instruções executadas em paralelo
versus o conjunto de dados para os quais as instruções são submetidas. Desta forma, a
taxonomia de Flynn estabeleceu as seguintes classificações de computadores (DANTAS
2005):
Tabela 3 - Classificação de arquitecturas paralelas, segundo FLYNN
SD (Single Data) MD (Multiple Data)
SI (Single Instruction)
SISD
Maquinas de Von Neumann
SIMD
Maquinas Array
(CM-2, MasPar)
MI (Multiple Instruction)
MISD
Sem representante
MIMD
Multiprocessadores e
Multicomputadores (nCube,
Intel Paragon, Cray T3D)
44. 28
• SISD (Single Intruction Single Data) - Computadores com estas características são
aqueles que executam uma instrução de um programa de cada vez. Na Figura 11, o fluxo de
instruções (linha contínua) alimenta uma unidade de controle (C) que activa a unidade
central de processamento (P). A unidade P, por sua vez, atua sobre um único fluxo de dados
(linha tracejada), que é lido, processado e reescrito na memória (M). Nessa classe, são
enquadradas as máquinas Von Neumann tradicionais com apenas um processador, como
microcomputadores pessoais e estações de trabalho.
Figura 11- Arquitectura SISD
• MISD (Multiple Instruction Single Data) - não se tem conhecimento de arquitectura
de máquinas com múltiplas instruções trabalhando com um único conjunto de dados. A
Figura 12, mostra múltiplas unidades de processamento P, cada uma com sua unidade de
controlo própria C, recebendo um fluxo diferente de instruções. Essas unidades de
processamento executam suas diferentes instruções sobre o mesmo fluxo de dados. Na
prática, diferentes instruções operam a mesma posição de memória ao mesmo tempo,
executando instruções diferentes. Como isso, até os dias de hoje, não faz qualquer sentido,
além de ser tecnicamente impraticável, essa classe é considerada vazia
45. 29
Figura 12 - Arquitectura MISD
As máquinas paralelas concentram-se nas duas classes restantes, SIMD e MIMD.
No caso SIMD (Single Instruction Multiple Data), uma única instrução é executada ao
mesmo tempo sobre múltiplos dados. O processamento é controlado por uma única unidade
de controle C, alimentada por um único fluxo de instruções. A mesma instrução é enviada
para os diversos processadores P envolvidos na execução. Todos os processadores executam
suas instruções em paralelo de forma síncrona sobre diferentes fluxos de dados (Figura 13).
Na prática, pode-se dizer que o mesmo programa está sendo executado sobre diferentes dados,
o que faz com que o princípio de execução SIMD assemelhe-se bastante ao paradigma de
execução sequencial. É importante ressaltar que, para que o processamento das diferentes
posições de memória possa ocorrer em paralelo, a unidade de memória M não pode ser
implementada como um único módulo de memória, o que permitiria só uma operação por vez.
Nessa classe, são enquadradas as máquinas Array como CM-2.
• SIMD (Single Instrucion Multiple Data) - neste tipo de arquitectura existe, também,
a execução de uma única instrução. Todavia, devido a existência de facilidades em hardware
para armazenamento (um vector ou array), a mesma instrução é processada sob diferentes
itens de dados, ou seja, só um programa, está sendo executado, em uma máquina MIMD
46. 30
(Multiple Instruction Multiple Data), cada unidade de controlo C recebe um fluxo de
instruções próprio e repassa-o para sua unidade processadora P para que seja executado sobre
um fluxo de instruções próprio (Figura 13). Dessa forma, cada processador executa o seu
próprio programa sobre seus próprios dados de forma assíncrona.
Figura 13 - Arquitectura SIMD
• MIMD (Multiple Intruction Multiple Data) - arquitectura caracterizada por possuir
múltiplos fluxos de instruções e múltiplos fluxos de dados, envolve múltiplos processadores,
executando diferentes instruções em diferentes conjuntos de dados, de maneira independente.
É modelo para a maioria dos computadores paralelos.
O princípio MIMD é bastante genérico, pois qualquer grupo de máquinas, se analisado
como uma unidade (executando, por exemplo, um sistema distribuído), pode ser considerado
uma máquina MIMD. Nesse caso, como na classe SIMD, para que o processamento das
diferentes posições de memória possa ocorrer em paralelo, a unidade de memória M não
pode ser implementada como um único módulo de memória, o que permitiria só uma
operação por vez.
47. 31
Figura 14 - Arquitectura MIMD
Sabe-se que a comunicação e o sincronismo dos processos em execução são
directamente relacionados à organização da memória. Sendo assim, a classe MIMD, proposta
por Flynn, pode ainda, segundo (TANENBAUM 2003), ser subdividida em duas novas
categorias, como mostra a Figura 15: Multiprocessadores e Multicomputadores.
Figura 15 - Classificação segundo o compartilhamento de memória (TANENBAUM 2003)
3.1.1. Multiprocessadores
Estas arquitecturas são caracterizadas por vários processadores compartilhando uma
única memória, ou um conjunto de memórias.
48. 32
A arquitectura dos multiprocessadores é conhecida como fortemente acoplada, uma
vez que processadores e memória estão fortemente interligados através de seu sistema local de
interconexão. A interconexão local de processadores e memória, quando efectuada por
intermédio de uma barra, prove a facilidade de configuração compartilhada. Por outro lado, a
interligação de processadores e memórias através de um equipamento de comutação
estabelece uma configuração comutada simples, podendo também se estender até a múltiplos
níveis (TANENBAUM 2003).
É importante observar que independente do hardware de interconexão, seja esta uma
barra ou um elemento comutador (switch), a arquitectura de um multiprocessador é
caracterizada pelo compartilhamento global de uma memória pelos diversos processadores do
ambiente.
A escalabilidade em uma configuração deste tipo varia entre alguns até centenas de
processadores. Os processadores compartilham a memória de uma forma global.
Figura 16 - Multiprocessadores (UMA - Uniform Memory Access)
Os múltiplos processadores são ligados por meio de uma rede de interconexão (BUS)
a uma memória global centralizada. Essa memória central é formada por módulos disjuntos,
os quais podem ser acessados independentemente um do outro por diferentes processadores
da máquina. Para reduzir o tráfego na rede, a cada processador pode ser associada uma
memória local privativa (b) para o armazenamento de dados locais e instruções de programa.
49. 33
As máquinas recebem nomes porque o tempo de acesso à memória compartilhada é igual para
todos os processadores.
Figura 17 - Multiprocessadores (NUMA - Non Uniform Memory Access)
Cada processador possui uma memória local, a qual é agregada ao espaço de
endereçamento global da máquina. Dessa forma, podem existir até três padrões de acesso à
memória compartilhada em uma mesma máquina. O primeiro, é o mais rápido, é aquele onde
a variável compartilhada está localizada na memória local do processador. O segundo padrão
refere-se ao acesso a um endereço na memória central (a). Já o terceiro, é o mais lento, diz
respeito ao acesso a uma posição localizada em uma memória local de outro processador.
3.1.2. Multicomputadores
São ambientes fracamente acoplados. Em outras palavras, estas configurações
caracterizadas por centenas de processadores têm suas próprias memórias locais. Não existe
um compartilhamento forte, o que significa dizer que a comunicação entre processos é
efectuada apenas por troca de mensagens entre os processos que estão executando nos
processadores. Processadores e memórias podem estar conectados por uma barra ou
comutador.
50. 34
PATTERSON & HENNESSY (2005), ainda adiciona uma categoria híbrida, chamada
(arquitectura de memória compartilhada distribuída) ou Distributed Shared Memory (DSM),
na qual a comunicação é feita por meio de um espaço de endereçamento compartilhado. Isto
é, as memórias fisicamente separadas podem ser endereçadas como um único espaço de
endereços logicamente compartilhado.
Figura 18 - Arquitectura de um Multicomputadores
Cada processador P possui uma memória local M, à qual só ele tem acesso. As
memórias dos outros processadores são consideradas memórias remotas e possuem espaços de
endereçamento distintos (um endereço gerado por P1 só é capaz de endereçar M1). Como não
é possível o uso de variáveis compartilhadas nesse ambiente, a troca de informações com
outros processos é feita por envio de mensagens pela rede de interconexão Por essa razão,
essas máquinas também são chamadas de sistemas de troca de mensagens (MPI). Essas
características resultam do fato de esse tipo de máquina paralela ser construído a partir da
replicação de toda a arquitectura convencional, e não apenas do componente processador
como nos multiprocessadores. Daí o nome múltiplos computadores.
51. 35
3.2. TENDÊNCIAS NA CONSTRUÇÃO DE MÁQUINAS PARALELAS
Nesta seção são apresentados os principais modelos físicos de máquinas paralelas que
constituem actualmente as principais tendências para a construção destes sistemas. Para cada
modelo são apresentadas suas principais características e sua classificação segundo a
terminologia. No final são apresentadas tabelas e diagramas comparativos entre os modelos.
Cabe destacar que, segundo a classificação de Flynn, todos os modelos aqui apresentados
pertencem à classe MIMD.
3.2.1. Processadores Vectoriais
Processadores vectoriais paralelos (PVP - Parallel Vector Processors) são sistemas
constituídos de poucos processadores vectoriais poderosos (PV) que são especialmente
desenvolvidos para esse tipo de máquina. A interconexão dos processadores a módulos de
memória compartilhada (MC) é feita, na maioria dos casos, por uma matriz de chaveamento
(crossbar) de alta vazão.
A implementação da memória compartilhada com blocos entrelaçados e o uso de uma
rede de interconexão não bloqueante permite que os processadores acessem a memória em
paralelo. A comunicação entre os processadores é feita através da memória compartilhada que
possui apenas um espaço de endereçamento que engloba todos os módulos de memória (todos
os processadores podem endereçar todos os módulos de memória).
Figura 19 - Arquitectura PVP
52. 36
Como o tempo de acesso à memória compartilhada é uniforme, essas máquinas são
classificadas como multiprocessadores UMA. Esse tipo de máquina normalmente não se
utiliza de memórias cache, usando para essa função um grande número de registradores
vectoriais e um buffer de instrução.
3.2.2. Simmetric Multiprocessors (SMP)
Multiprocessadores simétricos (SMP - Symmetric Multiprocessors) são sistemas
constituídos de processadores comerciais, também denominados “de prateleira” (of the shelf),
conectados a uma memória compartilhada (MC) na maioria dos casos através de um
barramento de alta velocidade (Figura 20). Como a maioria dos processadores comerciais
encontrados no mercado utiliza memórias cache, tanto no chip quanto fora dele, os
processadores foram representados na figura por PC. Como consequência, o barramento
utilizado nessas máquinas implementa coerência de cache através do protocolo snoopy.
Figura 20 - Arquitectura SMP
A utilização de configuração SMP é a mais popular. Exemplos comerciais que
empregam esta abordagem são os servidores de fabricantes como Compaq, IBM, Dell e HP.
Uma outra máquina que ilustra o uso categoria da arquitectura SMP é um computador
do tipo IBM-PC com um processador Intel Pentium Pro Four-Processador Quand Pack. A
organização desta arquitectura da Intel é formada por quatro processadores compartilhando
um barramento principal, onde também estão conectados os módulos de memória e o
componente de interfase de comunicação com periféricos (PCI).
53. 37
3.2.3. Distributed Shared Memory (DSM)
Máquinas com memória compartilhada distribuída (DSM – Distributed Shared
Memory) são sistemas em que, apesar de a memória se encontrar-se fisicamente distribuída
através dos nós, todos os processadores pode endereçar todas as memórias. Isso se deve à
implementação de um único espaço de endereçamento. Essa implementação pode ser feita em
hardware, em software ou ainda com a combinação dos dois. A distribuição da memória, por
sua vez, pode ser resultado da escolha de uma arquitectura multiprocessada com memória
entrelaçada distribuída (máquinas NUMA) ou de uma arquitectura de multicomputador com
memórias locais (máquina NORMA). Em ambos os casos, a máquina resultante é considerada
CC-NUMA se tiver coerência de cache implementada em hardware ou SC-NUMA se a
implementação for em software.
Figura 21 - Arquitectura DSM
A Figura 21, apresenta a arquitectura de uma máquina com memória compartilhada
distribuída derivada de um Multicomputadores NORMA. Nesse caso, os vários nós com suas
memórias locais (ML) são interligados através de adaptadores de rede (AR) a uma rede de
interconexão específica. O que diferencia essa arquitectura da máquina maciçamente paralela
da Figura 20, é a possibilidade do acesso às memórias remotas e a utilização de um directório
(DIR) para a implementação da coerência de cache. É importante destacar que, em alguns
casos, a coerência de cache não é implementada com um directório, como no caso do Cray
54. 38
T3D que usa uma combinação de hardware especial e extensões de software para garantir a
coerência em nível de bloco.
3.2.4. Massively Parallel Process (MPP)
As máquinas com configuração maciçamente paralelas (Massively Parallel Processors
- MPP) são conhecidas como arquitecturas fracamente acopladas. Computadores sob este
paradigma são classificados usualmente como multicomputadores.
MPP são multicomputadores construídos com milhares de processadores comerciais
(PC) conectados por uma rede proprietária de alta velocidade (Figura abaixo). A expressão
“maciçamente paralela” indica a proposta dessas máquinas: a obtenção de alto desempenho
através da utilização de um grande número de processadores, os quais, devido ao factor custo,
acabam sendo processadores de poder computacional médio ou pequeno. Essa é uma
alternativa à proposta dos PVPs, por exemplo, em que o alto desempenho é obtido através da
utilização de poucos processadores vectoriais de grande poder computacional.
Figura 22 - Arquitectura MPP
Para que essas máquinas possam ser altamente escaláveis, suportando tantos
processadores, cada nó possui sua memória local (ML) com um espaço de endereçamento
próprio. Dessa forma, não é possível o acesso à memória de nós vizinhos, caracterizando um
multicomputador NORMA. A ligação desses nós à rede de interconexão é feita através de um
adaptador de rede (AR).
55. 39
Como consequência directa dessa organização de memória distribuída com vários
espaços de endereçamento locais, a comunicação nessas máquinas é realizada através de troca
de mensagens. Esse paradigma é considerado de mais difícil programação do que o paradigma
de memória compartilhada, por ser mais distante da programação feita em sistemas
tradicionais.
Computadores com a arquitectura MPP são caracterizados por milhares de nós
interligados por dispositivos de interconexão de alta velocidade. Cada nó pode ser composto
por um ou mais processadores, possuindo cache e memórias locais. Uma outra característica
da arquitectura é que cada nó possui sua própria copia de sistema operacional, onde as
aplicações executam localmente e se comunicam através de pacotes de troca de mensagem,
tais como MPI e PVM.
A escalabilidade da abordagem MPP é a maior do que as arquitecturas como memória
Compartilhada, uma vez que cada nó tem sua própria estrutura de memória.
3.2.5. Sistemas distribuídos
Os sistemas distribuídos, sob o aspecto de arquitectura de máquinas para a execução
de aplicativos, devem ser vistos como configurações com grande poder de escala pela
agregação dos computadores existentes nas redes convencionais (DANTAS 2005).
Nos ambientes distribuídos, a heterogeneidade e a homogeneidade de um conjunto de
máquinas, onde cada qual possui sua arquitectura de hardware-software executando sua
própria cópia de sistema operacional, permite a formação de interessantes configurações de
SMP, de MPP, de Clusters e Grids computacionais. Embora a utilização de ambientes
distribuídos seja interessante sob o aspecto de utilização de recursos abundantes e na maioria
das vezes ociosos nas redes, alguns cuidados devem ser verificados nas fases de projecto e
implementação de aplicativos candidatos ao processamento nestas configurações.
56. 40
Dentre esses aspecto tem-se concorrência, segurança, confiabilidade, latência da rede
de comunicações, compatibilidades de pacotes de softwares, entre outros.
3.2.6. Clusters
As configurações de clusters em termos de arquitectura computacional, podem ser
entendidas como uma agregação de computadores de forma dedicada (ou não) para a
execução de aplicações específicas (DANTAS 2005). Normalmente formados por
computadores do tipo PC, pertencentes a uma única unidade (ex: laboratório).
Figura 23 - Cluster da força aérea Americana (AFRL), tem 1760 PlayStation 3 (US Air Force)
57. 41
4. CLUSTER
Um Cluster de computadores é um sistema composto por mais de um computador
interconectados e trabalhando em sincronia, com a finalidade de melhorar o desempenho das
aplicações e criar redundâncias em caso de falhas de hardware ou software os recursos ou
aplicativos de serviços (missão critica) estejam disponíveis para o usuário ou cliente executar
determinada tarefa desejada.
Os componentes de um Cluster são geralmente ligados uns aos outros através de
rápidas redes local ("LAN"), com cada nó (computador usado como um servidor) executando
a sua própria instância de um sistema operativo. Clusters de computadores surgiram como
resultado da convergência de uma série de tendências de computação, incluindo a
disponibilidade de microprocessadores de baixo custo, redes de alta velocidade, e software de
alto desempenho de computação distribuída (PITANGA, 2007).
Os clusters são usados principalmente para duas funções: Alta disponibilidade (HA –
High Availability) e Alto desempenho (HPC – High Perfomance Computing).
Os clusters dividem se em classes, na qual de classe I, são construídos a partir de
tecnologia padrão e de fácil acesso. E são mais baratos que os de classe II, que usam hardware
altamente especializado com objectivo de alcançar alto desempenho (BROWN, 2006).
Figura 24 - Cluster classe I, na Universidade de Tecnologia de Chemnitz (megware.com, 2013)
58. 42
Figura 25 - Cluster classe II, Sun Microsystem Solaris Cluster (ChrisDag, 2013)
Os clusters são mais usados nas áreas técnicas, como servidores de internet, ambientes
de simulação de biotecnologia, mercado financeiro, previsão do tempo, entre outras
(BROWN, 2006).
Cada computador presente no cluster é chamado de nó, onde um assume o papel de Nó
Mestre (Master) e os outros nó escravos ou simplesmente nó. Os computadores dividem as
actividades de processamento e executam o trabalho de maneira simultânea. Os computadores
que fazem parte do cluster permanecem em sincronia, através de trocas de mensagem
periódica.
A sincronia dos computadores é complexa e perfeita que, caso ocorra alguma falha no
sistema, qualquer Nó assume a função de Nó Master num intervalo de tempo fraccionado,
permitindo que o serviço permaneça operacional (Cluster de alta disponibilidade) (PITANGA,
2004).
Segundo o mesmo autor, na sua forma mais básica um cluster é um sistema que
compreende dois ou mais computadores ou sistemas (denominados nós) na qual trabalham em
conjunto para executar aplicações ou realizar outras tarefas, de tal forma para que os usuários
que os utilizam tenham a impressão que somente um único sistema responde para eles,
59. 43
criando assim uma ilusão de um recurso único (computador virtual). Este conceito é
denominado transparência do sistema. Como características fundamentais para a construção
destas plataformas inclui-se elevação dá: confiança, distribuição de carga e performance.
De acordo com (KOPPER, 2005), um cluster compõem-se de quatro características
básicas:
Transparência para os usuários;
Os computadores do cluster não têm ideia que fazem parte de um cluster;
As aplicações ou recursos em execução, não têm ideia que fazem parte de um cluster;
Os computadores que fazem parte do cluster têm que ser vistos como clientes comuns.
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 adoptado 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 pode até mesmo ser composta por computadores simples, como computadores de
desempenho normal. 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 projecto inicial que mostrou a viabilidade do conceito foi usado 133 nós, os
desenvolvedores usaram Linux, o PVM kit de ferramentas e o MPI biblioteca para atingir alta
performance a um custo relativamente baixo.
60. 44
4.1. TIPOS DE CLUSTER
Em qualquer ambiente onde a aplicação é considerada de missão critica, que não pode
parar de funcionar ou não pode ter perda de dados, o Cluster surge como solução mais viável
dependendo simplesmente do tipo a ser implementado.
4.1.1. Cluster de alta disponibilidade (HA)
Clusters de alta disponibilidade, este cluster é caracterizada pela alta disponibilidade
dos serviços, ou seja, utilizam vários equipamentos em conjunto para manter o serviço sempre
disponível, replicando os dados e evitando que as máquinas fiquem paradas ou ociosas. Este
cluster fica à espera de um equipamento falhar ou parar, delegando as tarefas a uma outra
máquina. O objectivo principal é não parar, isto não quer dizer que não há paralisação da
mesma, mas quando tal aconteça, a paralisação deve ser a menor tempo 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.
Tabela 4 - Níveis de Alta disponibilidade
Disponibilidade Down Time / Ano Down Time / Mês
95 % 18 Dias 6 horas 1 Dia e 12 horas
96 % 14 Dias 14 horas e 24 min 1 Dia e 4 horas e 48 min
97 % 10 Dias, 22 horas e 48 min. 0 Dia, 21 horas e 36 min.
98 % 7 Dias, 7 horas e 12 min. 0 Dia, 14 hora e 24 min
99 % 3 Dias, 15 horas e 36 min. 0 Dia, 7 horas e 12 min.
99,9 % 8 Horas e 45 min. 35.99 Segundos 43 Min. 11,99 Segundos
99,99 % 52 Min e 33,60 segundos 4 Min e 19,20 segundos
99,999 % 5 Min e 15,36 segundos 25,92 Segundos
61. 45
Para atender a esta exigência, os clusters de alta disponibilidade podem contar com
diversos recursos: Ferramenta de monitoramento que identificam nós defeituosos com falhas
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 actividade.
Figura 26 - Cluster de alta disponibilidade (wikipedia, 2013)
O objectivo principal deste tipo de cluster é a tolerância à falhas. Este tipo de cluster
funciona da seguinte maneira: dos computadores ligados entre si, um deles (server 1) executa
a tarefa enquanto o outro (server 2) tem a função de monitorar e manter os dados actualizados
em relação ao primeiro. Se o primeiro computador para por alguma razão o segundo assume
imediatamente o seu lugar. Normalmente usados em servidores web ou banco de dados em
intranets (MORIMOTO, 2003).
62. 46
4.1.2. Cluster de Balanceamento de carga (LB).
Nos clusters de balanceamento de carga, as tarefas de processamento são distribuídas
o mais uniformemente possível entre os nós de forma uniforme. 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.
O seu princípio de funcionamento baseia-se na distribuição de pedidos através de um
ou mais dos nós de entrada, o que lhes redireccionado para processamento nos outros, os nós
de computação. O propósito original deste tipo de cluster é produtividade, no entanto, também
são frequentemente utilizados métodos que melhoram a confiabilidade. No mercado existe
Software especializados, e pode ser tanto comercial (OpenVMS , MOSIX , Platform LSF
HPC, Solaris Cluster , Moab Cluster Suite, Maui Cluster Scheduler) e livre ( OpenMosix ,
Sun Grid Engine , Linux Virtual Server ).
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.
63. 47
Figura 27 - Arquitectura do Cluster com balanceamento de Carga (devmedia.com.br, 2013)
4.1.3. Cluster de alto desempenho (HPC)
Este tipo de cluster, e o tema principal deste trabalho. Computação de alto
desempenho é uma necessidade em certos ramos de pesquisa cientifica.
Base se no cluster BEOWULF, consiste na criação de computadores paralelos a apartir
de computadores de uso comum atingindo alto desempenho em computação com custos
extremamente baixos.
Este tipo de cluster muitas vezes chamado de cluster de alta performance permite uma
grande carga de processamento com um volume alto de flops em computadores de uso
comum utilizando sistemas operativos gratuito.
Clusters de alto desempenho são direccionados a aplicações bastante exigentes no que
diz respeito ao processamento.
O foco deste tipo de cluster é o de permitir que o processamento direccionado à
aplicação forneça resultados satisfatórios em tempo hábil, mesmo que haja centenas de
milhares de giga flops envolvidos com a tarefa.
64. 48
Figura 28 - Arquitectura do cluster de alto desempenho, HPC (wikipedia, 2013)
4.2. COMBINAÇÃO DE CLUSTER
É 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, a instituição que gere a rede de multicaixa no nosso país, utiliza um
cluster de alta disponibilidade para garantir que os pedidos de movimentos bancário possam
ser realizadas 24 horas por dia e, ao mesmo tempo, aplicar balanceamento de carga para
suportar um expressivo aumento no número de pedidos causados por qualquer movimento
bancário na rede de multicaixa.
4.3. VANTAGENS DO CLUSTER DE ALTO DESEMPENHO
Uma verdade irrefutável é, o mercado de PC´s é maior que o mercado de workstations,
permitindo que o preço de PC desça, e aumentando a sua performance, sobrepondo a
performance dos workstation dedicados.
Segundo PITANGA (2007), este tipo de cluster tem uma importância devido o seu uso
na indústria cinematográfica, para renderização de imagens, engenharia e finanças para
65. 49
actuarem nos projectos de desdobramentos de proteínas, dinâmica dos fluidos, redes neurais,
analise genética, estatística, economia, astrofísica, etc..
Vantagens:
Quanto mais computadores na rede mais rápido fica.
Componentes de fácil aquisição.
Fácil manutenção.
Independência de fornecedores de hardware.
Custo baixo. Utilizando computadores simples ou até mesmo computadores obsoletos.
Se um computador falhar, nada impede o usuário de prosseguir.
Cluster BEOWULF suporta mais de um nó mestre, do mesmo jeito que nó escravos da
rede.
Qualquer estudante ou não pode construir um em casa, para testar seus estudos em
programação paralela a baixo custo porque no nosso país nenhuma universidade tem
disponível um Computador (supercomputador) para teste da programação em paralelo.
Um exemplo do uso do mesmo foi na produção do filme TITANIC, onde 105
computadores, computadores comuns, montados em uma rede local de alta velocidade,
equipados com sistemas operativos LINUX, utilizados param renderização de imagens.
67. 51
5. CLUSTER DE ALTO DESEMPENHO/PROCESSAMENTO PARALELO
Algumas áreas de conhecimento (por exemplo, astronomia, meteorologia e genética)
requerem, para os problemas estudados, de muitos recursos computacionais com alto
desempenho para suprir cálculos complexos e repetitivos. Os avanços da tecnologia de
computadores geralmente não acompanham a demanda solicitada e, às vezes, a utilização de
supercomputadores não é viável financeiramente. Uma alternativa a ser adoptada pode ser a
soma dos recursos computacionais já existentes utilizando-os de forma mais apropriada e
equilibrada, resultando em um ganho substancial de desempenho (speed up).
A implementação de cluster viabiliza a computação em paralelo, utilizando
microcomputadores ligados em redes e sistema operativo Linux, com distribuição gratuita.
Este tipo de cluster, é e continua a ser um projecto bem-sucedido.
A opção feita pelos seus criadores de usar hardwares populares e software aberto, tornou-o
fácil de replicar e modificar, a prova disso é a grande quantidade de sistemas construídos
baseando-se no Cluster BEOWULF em diversas universidades, empresas, e residenciais em
todo o mundo. Não só foi uma experiencia como também foi obtido um sistema de uso
pratico que continua sendo aperfeiçoado constantemente ate o dia de hoje.
Uma característica chave de um cluster Beowulf, é o software utilizado, que é de
elevado desempenho e gratuito a maioria de suas ferramentas, como exemplo podemos citar
os sistemas operativos GNU/Linux e Freebsd, sobre os quais estão instaladas as diversas
ferramentas que viabilizam o processamento paralelo, como é o caso das API’s, MPI e PVM.
Isto permitiu fazer alterações no sistema operacional Linux para dotá-lo de novas
características que facilitaram a implementação para aplicações paralelas.
68. 52
O sistema é dividido em um nó controlador denominado front-end (nó mestre), cuja
função é controlar o cluster, monitorar e distribuir as tarefas, actua como
servidor de arquivos e executa o elo entre os usuários e o cluster. Os demais nós são
conhecidos como clientes ou back-ends (nós escravos), e são exclusivamente dedicados para
processamento das tarefas enviadas pelo nó controlador, e não existe a necessidade de
teclados e monitores, e eventualmente até sem a utilização de discos rígidos (boot remoto), e
podem ser acessadas via login remoto (telnet ou ssh).
Figura 29 - Cluster do grupo Structural and Computational Biology (norma.mbg.duth.gr, 2013)
“Este cluster baptizado com o nome Norma, tem 96 núcleos, 82 GB de
memória física, 11 nós e conexão de 1 gigabit, usada para simulações de
dinâmica molecular e cristalogia computacional. E pode ser acessado e ter mais
detalhes on line no endereço http://norma.mbg.duth.gr/index.php?id=status” .
Processamento paralelo consiste em dividir uma tarefa em suas partes independentes e
na execução de cada uma das partes em diferentes processadores.
Os clusters compreendem um conjunto de nós que operam de maneira cooperativa e
transparente, disponibilizando serviços e/ou efectuando tarefas a fim de atender uma demanda
específica. A fim de atenderem tal demanda, os clusters apresentam uma arquitectura
específica e elementos constituintes, onde o entendimento de conceitos chaves nesse cenário é
importante.
69. 53
5.1. UTILIZAÇÃO DE LINUX EM CLUSTER
Existem versões de UNIX para muitos sistemas, sendo normalmente proprietárias e
com custos bastante elevados. O Linux foi inspirado no sistema operacional MINIX, uma
pequena versão do UNIX criada por Andrew Tannembaum (2003).
Pode ser livremente distribuído nos termos da GNU (General Public License), ou seja,
o usuário pode alterar o seu núcleo (kernel) de acordo com as suas necessidades. As
vantagens de se utilizar o Linux na implantação de clusters são diversas, entre elas destacam-
se o fato do Linux ser um sistema robusto, que dá suporte desde aplicações simples até
aplicações extremamente complexas, e por ser possível dotá-lo de novas características que
facilitam a implementação para aplicações paralelas.
Além disso, em específico para clusters Beowulf, o Linux atende uma das suas
principais características que é ser um sistema operativo de código aberto e de distribuição
livre [Pitanga, 2004]. Assim, tem-se um sistema extremamente flexível e robusto sem nenhum
ónus adicional, que permite qualquer alteração que se fizer necessária para melhor adaptação
a um ambiente paralelo e de alto desempenho.
5.2. O AUMENTO DA DEMANDA POR PROCESSAMENTO PARALELO
A evolução do desempenho dos 500 maiores computadores do mundo nos últimos
anos pode ser acompanhada através da página do projecto Top500, http://www.top500.org. De
seis em seis meses é actualizada uma lista elaborada com base num benchmark específico de
desempenho, contendo os principais detalhes dos 500 maiores computadores do mundo. Para
quem não está familiarizado com as magnitudes neste tipo de gráfico a Tabela abaixo
apresenta as unidades utilizadas para quantificar o desempenho destes supercomputadores.
70. 54
Tabela 5 - Medida de desempenho dos computadores em Flops
Nome Números de operações por segundo
Kiloflops
Megaflops
Gigaflops
Teraflops
Petaflops
Hexaflops
Zettaflops
Dando uma vista no gráfico de evolução de desempenho publicado no relatório mais
recente do Top500, apresentado na Figura abaixo, fica em aberto a pergunta: qual a força
motriz que impulsiona esta corrida desenfreada por um maior desempenho?
Figura 30 - Exponencial crescimento da supercomputação, (top500.org)
71. 55
Procurando uma resposta para esta pergunta podemos começar por algumas
constatações simples. Para começar, a formulação e resolução de problemas cada dia mais
complexos nos leva a níveis mais profundos de conhecimento. As diversas áreas das ciências
e as engenharias têm contribuído, de uma forma ou de outra, com o surgimento de mais e
maiores problemas a ser resolvidos.
De facto os principais paradigmas da ciência e da engenharia estão cada dia mais
permeados pela computação. A simulação computacional tem-se mostrado ferramentas
confiáveis e baratas para ser utilizadas na comprovação de teorias, projecção de sistemas, e na
construção de protótipos. As ferramentas computacionais disponíveis devem então permitir a
resolução de problemas complexos em um tempo razoável. O PDA passa a ser uma
ferramenta importante quando nos deparamos com problemas de grande porte, ou seja,
problemas que não podem ser resolvidos, com os recursos computacionais disponíveis, em
um intervalo razoável de tempo.
Para exemplificar o conceito de problema de grande porte podemos utilizar um
exemplo clássico: o cálculo do movimento de corpos estelares. Basicamente o problema a ser
resolvido é estimar as posições dos corpos estelares sendo que: cada corpo é atraído pelas
forças gravitacionais exercidas por todos os outros corpos; o movimento de um corpo é
modelado calculando o efeito de todas as forças que actuam sobre ele. Se temos N corpos
teremos N - 1 forças actuando sobre cada corpo e operações de ponto flutuante (flop) para
determinar a posição de todos os corpos. Após determinar a posição de cada um deles o
cálculo deve ser repetido de forma iterativa, de acordo com o período de tempo que esteja
sendo simulado.
Colocando o exemplo anterior em números teremos que a galáxia tem
aproximadamente Estrelas. Se cada operação fosse feita em 1µ s teríamos s ou 1
72. 56
bilhão de anos. Mesmo aprimorando o algoritmo para conseguir complexidade da ordem de N
log N somente conseguiríamos terminar cada iteração em 1 ano.
Existem outros inúmeros exemplos de problemas de grande porte em áreas como
simulação de biomoléculas, simulação estocástica utilizada em Monte Carlo - simulação de
reservatório de hidrocarbonetos, processamento de imagens e nano tecnologia.
5.3. ARQUITECTURAS COM MÚLTIPLOS PROCESSADORES
Depois de termos uma explanação da taxonomia de Flynn, no capítulo 3, taxonomia de
Flynn pode ser utilizada para obter uma classificação amplamente aceite. Apesar de ter se
originado nos anos 70 trata-se de uma classificação ainda válida que se baseia na capacidade
dos computadores de lidar com fluxos de instruções e fluxos de dados. Politécnico
Os computadores pessoais, equipados com chips de um único núcleo, podem ser
classificados como sistemas SISD. O principal gargalo nesta arquitectura é a transferência de
dados entre a memória principal e a CPU. Para melhorar este fluxo de dados foi introduzido
uma estrutura hierárquica de memória. Com base em computadores pessoais deste tipo e em
equipamentos simples encontrados nas lojas de informáticas fora construído um tipo
particular de máquina paralela: os clusters tipo Beowulf.
As arquitecturas paralelas modernas podem ser caracterizadas como SIMD ou como
MIMD. No primeiro caso temos um único fluxo de instruções actuando sobre múltiplos
fluxos de dados. As modernas GPGPUs são um exemplo típico deste tipo de sistemas.
73. 57
5.4. VISÃO GERAL SOBRE PROGRAMAÇÃO PARALELA
Antes de começar a falar sobre programação paralela, deve-se analisar alguns aspectos
relacionados com programação sequencial. O algoritmo serial ou sequencial é aquele que
executa, de forma independente, em um único processador. Ao contrário do algoritmo
paralelo que roda simultaneamente em dois ou mais processadores. Para cada algoritmo
paralelo existe um algoritmo sequencial que realiza a mesma tarefa.
Para se implementar um algoritmo paralelo é extremadamente importante criar uma
versão serial do mesmo. O algoritmo serial serve de ponto de partida, como base para o
melhor e mais rápido entendimento do problema e como ferramenta para validar os resultados
do programa paralelo. O desempenho do algoritmo serial auxilia também na avaliação do
ganho de desempenho e da eficiência do algoritmo paralelo.
Existem diversas métricas para avaliar o desempenho de algoritmos paralelos. Os
cursos específicos de programação paralela discutem diversas métricas que permitem avaliar
o desempenho de aplicações paralelas.
A primeira destas métricas é o speedup, uma das medidas mais utilizadas para avaliar
o desempenho de um algoritmo paralelo.
O speedup pode ser utilizado também para calcular outro parâmetro importante, a
eficiência. A eficiência não é mais que a medida de utilização dos processos em um programa
paralelo em relação ao programa serial. Desta forma a eficiência é calculada como a razão
entre o speedup e a quantidade de processadores.
Para se obter algoritmos paralelos eficientes deve-se levar em consideração alguns
aspectos importantes como a divisão equitativa do trabalho entre os processos, a minimização
da necessidade de comunicação entre os processos e do tempo ocioso dos mesmos, a
74. 58
sobreposição, das operações de comunicação e computação, e a concentração das operações
de entrada e saida visando minimizar seu efeito.
Existem basicamente dois enfoques na hora de projectar programas paralelos. São eles
o paralelismo de dados e o paralelismo de controlo.
O paralelismo de dados dá se através do particionamento do conjunto de dados a ser
processados em subconjuntos menores que são atribuídos a cada processo. Este enfoque pode
ser implementado de forma simples, não é prejudicado pela dependência entre as operações,
os programas que utilizam o mesmo são facilmente escalável e geralmente utilizam pouca
comunicação entre processos. As implementações paralelas utilizando CUDA em dispositivos
GPGPU são um exemplo de uso intensivo de paralelismo de dados.
Entretanto, nem sempre é possível utilizar o paralelismo de dados. Muitas vezes
precisamos dividir o problema em tarefas independentes, que podem ser atribuídas a
processos diferentes e executadas em paralelo. Neste caso utilizamos o paralelismo de
controle. Este enfoque deve considerar a dependência entre as operações, é mais difícil de se
implementar e escalonar, e implica, geralmente, em um uso elevado de comunicação entre
processos. O construtor paralelo sections, utilizado em OpenMPI, é um exemplo de
implementação de paralelismo de controlo. A maior parte dos programas paralelos envolvem,
de uma forma ou outra, os dois enfoques ainda que o paralelismo de dados seja mais
comummente encontrado.
Finalmente, antes de começar a analisar técnicas de programação paralela, podemos
desenhar um roteiro geral que pode ser utilizado para construir um programa paralelo:
1. Implementação sequencial: Analisar, implementar e validar uma solução sequencial
para o problema que pretende-se solucionar;