Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

111
INSTITUTO SUPERIOR POLITÉCNICO METROPOLITANO DE ANGOLA IMPLEMENTAÇÃO DE CLUSTER DE ALTO DESEMPENHO USANDO GNU/LINUX Luanda 2013

description

Trabalho de fim de curso, 2013, Imetro Angola

Transcript of Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

Page 1: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

INSTITUTO SUPERIOR POLITÉCNICO

METROPOLITANO DE ANGOLA

IMPLEMENTAÇÃO DE CLUSTER DE ALTO DESEMPENHO

USANDO GNU/LINUX

Luanda

2013

Page 2: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 3: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 4: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 5: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 6: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 7: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

vii

“As pedras no caminho?

guardo todas,

um dia faço um castelo ...”

Nemo Nox

Page 8: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 9: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

.

Page 10: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 11: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 12: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 13: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 14: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 15: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 16: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 17: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 18: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 19: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 20: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 21: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 22: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 23: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 24: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 25: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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)

Page 26: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 27: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 28: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 29: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 30: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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)

Page 31: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 32: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 33: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 34: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 35: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 36: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 37: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 38: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

22

Page 39: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 40: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 41: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 42: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 43: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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)

Page 44: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 45: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 46: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 47: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 48: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 49: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 50: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 51: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 52: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 53: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 54: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 55: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 56: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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)

Page 57: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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)

Page 58: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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,

Page 59: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 60: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 61: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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).

Page 62: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 63: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 64: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 65: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 66: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

50

Page 67: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 68: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 69: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 70: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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)

Page 71: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 72: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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.

Page 73: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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

Page 74: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

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;

Page 75: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

59

2. Análise da divisão do trabalho: Avaliar a possibilidade divisão do conjunto de dados

do problema entre os diferentes processos;

3. Avaliar a viabilidade do paralelismo de dados puro: verificar se o problema pode ser

resolvido apenas executando o algoritmo serial nos distintos conjuntos de dados;

4. Análise da necessidade de comunicação: Se o paralelismo de dados não for suficiente

identificar as necessidades de comunicação entre os processos;

5. Avaliar a necessidade de paralelismo de controlo: Analisar a necessidade de introduzir

paralelismo de controlo na implementação da solução paralela;

6. Validação da implementação paralela: Verificar a solução paralela com ajuda do

algoritmo serial.

7. Análise de desempenho: Avaliar diferentes métricas de desempenho para analisar as

características do algoritmo paralelo implementado.

5.5. TÉCNICAS DE PROCESSAMENTO PARALELO

Na actualidade existem diversas abordagens que podem ser utilizadas para se

implementar programas paralelos. Cada uma delas depende, essencialmente, da arquitectura

computacional para a qual está-se programando. O grande problema nestas abordagens hoje é

a portabilidade dos códigos que, em muitos casos fica limitada por soluções específicas para

determinado tipo de hardware. Apresentaremos a seguir três paradigmas de programação

paralela. No final voltaremos a discutir o tema de portabilidade.

5.5.1. Programação multithread com OpenMP

Os computadores multiprocessador de memória compartilhados representam uma das

arquitecturas paralelas mais amplamente disponíveis nos dias de hoje. Quase todos os

computadores pessoais e laptops na actualidade podem ser considerados computadores

Page 76: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

60

multiprocessadores de memória compartilhados. Uma das formas de se implementar

processamento paralelo neste tipo arquitectura é através de programação multithread.

Uma thread, ou linha ou fio de execução, não é mais que a menor parte de um

processo que pode ser manipulado pelo escalonador do sistema operativo. As threads de um

processo se originam da divisão da thread principal em dois ou mais threads. Elas podem ser

executadas em paralelo, são atribuídos pelo escalonador, quando possível, a processadores

diferentes e compartilham entre sim o mesmo espaço de memória.

As técnicas mais comuns para se trabalhar com multithread são: o threading explícito

e as directivas de compilação. Neste texto será abordado o uso de directivas de compilação,

através de OpenMP, que consiste em inserir directivas no código sequencial para informar ao

compilador quais regiões devem ser paralelizadas.

O Open specification for Multi Processing, ou simplesmente OpenMP, é um modelo

de programação em memória compartilhada que surgiu a partir da cooperação de grandes

fabricantes de hardware e software como a Sun, Intel, SGI, AMD, HP, IBM e outras.

Projectada para ser utilizada com C/C++ e Fortran, as especificações são desenvolvidas e

mantidas pelo grupo OpenMP ARB (Architecture Review Board). Trata-se de um padrão (não

é uma linguagem de programação) que define como os compiladores devem gerar códigos

paralelos através de directivas e funções. Por este motivo o resultado depende, em grande

medida, do compilador que foi utilizado para gerar o aplicativo.

A versão 1.0 destas especificações para Fortran foi liberada em Outubro de 1997 e um

ano depois saíram as especificações para C/C++. Em Novembro de 1999 foi liberada a versão

1.1 para Fortran e em 2000 a versão 2.0 também para Fortran. A versão 2.0 para C/C++

demorou ainda dois anos mas, a partir 2005 com a versão 2.5, começaram a ser

disponibilizadas as especificações para Fortran e C/C++ simultaneamente. Em 2008 saiu a

Page 77: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

61

versão 3.0 e em julho de 2011 foi disponibilizada a versão 3.1, que está implementada nas

versões mais recentes do compilador GNU/GCC. No momento que este texto estava sendo

preparado os desenvolvedores de compiladores trabalhavam na implementação do padrão 4.0

que foi disponível em Agosto de 2013.

Os programas desenvolvidos com ajuda de OpenMP utilizam um modelo de execução

conhecido como Fork-Join, que pode ser entendido da seguinte forma: todos os programas

iniciam com a execução de uma thread principal ou master thread; a master thread executa de

forma sequencial até encontrar um construtor paralelo, momento em que cria um grupo de

threads; o código delimitado pelo construtor paralelo é executado pelo conjunto de threads;

Ao concluírem a execução paralela o grupo de threads sincroniza numa barreira implícita com

a master thread; o grupo de thread termina sua execução e a master thread continua sua

execução sequencial. A Figura abaixo exemplifica o modelo de execução Fork-Join.

Figura 31 - Modelo de execução de Fork-Join (openmp.org, 2013)

Actualmente uma grande quantidades de compiladores implementam as especificações

OpenMP, entre eles alguns dos mais populares como os compiladores da Intel e os do

projecto GNU/GCC (a partir da versão 4.3.2). A programação multithread com OpenMP tem

Page 78: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

62

uma série de vantagens sobre outras formas de implementação de paralelismo em

arquitecturas de memória compartilhada. Entre elas podemos citar a facilidade de conversão

de programas sequenciais em paralelos, a maneira simples de se explorar o paralelismo, a

facilidade de compreender o uso das directivas entre outros.

5.5.2. Troca de Mensagens com MPI

A implementação de programas paralelos em ambientes de memória distribuída requer

um mecanismo para criação de processos que permita sua execução em máquinas diferentes e

um mecanismo que viabilize a troca de mensagens entre os processos. O padrão mais

utilizado para implementar troca de mensagens é o de Message Passing Interface (MPI).

Da mesma forma que OpenMP, MPI não é uma linguagem de programação. O padrão

MPI define a sintaxe e a semântica de um conjunto de rotinas que devem ser implementadas

numa biblioteca de funções para Fortran e C/C++. Este padrão surgiu como fruto da

colaboração de um conjunto de pessoas e instituições representando a indústria, o meio

académico e importantes centros de pesquisa. Como resultado inicial desta colaboração surgiu

o MPI Forum em 1992 e dois anos mais tarde o foi lançado o padrão MPI 1.0. Após um longo

processo de discussão que levaram a melhoras significativas foi lançado, em 1997, o padrão

2.0 que recebeu uma actualização de menor porte (2.1) apenas em 2008.

O surgimento de implementações importantes e eficientes do padrão MPI viabilizou o

desenvolvimento do cluster tipo Beowulf que foram a base de muitos sistemas de alto

desempenho em instituições de pequeno e médio porte. Actualmente existem inúmeras

implementações do padrão MPI entre as quais destacam-se:

OpenMPI, desenvolvida pelo OpenMPI Team, http://www.open-mpi.org

Page 79: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

63

MPICH, uma das implementações mais conhecidas e da qual se derivaram outras

implementações importantes como a implementação da Intel.

A programação utilizando MPI pode se resumir da seguinte forma: Todos os

processadores executam o mesmo programa, entretanto cada programa executa um

subconjunto específico de instruções com base numa estrutura de desvio que utiliza a

identificação de cada processo chamada de rank. Este enfoque utilizado em sistemas MIMD é

conhecido como SPMD (Single Program Multiple Data).

Outro problema importante com que tem que lidar os desenvolvedores do MPI são os

mecanismos de comunicação. O padrão MPI implemente um conjunto bastante amplo de

mecanismos de comunicação entre os quais destacam-se funções que implementam

comunicação ponto a ponto, mecanismos de comunicação bloqueada e não bloqueada e

mecanismos de comunicação colectiva.

Como foi colocado anteriormente, na busca por algoritmos paralelos mais eficientes

procura-se diminuir ao máximo a comunicação entre os processos. Nesta tarefa desempenha

um papel importante a localidade dos dados, ou seja o problema de atribuir um conjunto de

dados a um determinado processo de forma que as operações de comunicação sejam

minimizadas. Na mesma linha tem que se prestar uma atenção especial ao balanceamento de

carga, ou seja atribuir uma quantidade de trabalho equivalente a cada processo (PITANGA,

2007).

5.5.3. Programação Paralela em GPU com CUDA

A programação paralela e, particularmente, a PAD ganharam mais uma linha

importante de trabalho com o aperfeiçoamento das GPGPUs e das ferramentas para

implementar processamento paralelo nelas. A evolução das GPGPUs e das suas interfaces de

programação ocupariam mais tempo do que dispomos neste texto. Várias APIs já estão

Page 80: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

64

disponíveis no mercado, algumas delas pensadas para rodar em qualquer GPGPU. Destaca-se

pelo avançado da sua implementação o OpenCL. Entretanto os recursos disponíveis nas

GPGPUs da NVIDIA através da arquitectura CUDA são os que apresentam resultados mais

consistentes na actualidade.

A partir dos dispositivos G80 da NVIDIA uma nova arquitectura foi desenhada para

permitir computação paralela. O modelo de programação CUDA, introduzido pela NVIDIA

em 2007, foi projectado para permitir a execução conjunta em CPU e GPU de um aplicativo.

CUDA tem muitos aspectos em comum com outros modelos utilizados para

programação paralela, como MPI e OpenMP. Os programadores estão encarregados de

construir o código paralelo através de um conjunto de extensões da linguagem C/C++.

Os conhecedores de OpenMP são unânimes em afirmar que os compiladores que

utilizam esta ferramenta têm um maior grau de automação na hora de criar código paralelo.

O sucesso do modelo de paralelização implementado na arquitetura CUDA foi tanto

que modelos posteriores, como o OpenCL, seguiram a mesma estratégia com excelentes

resultados.

Entretanto a curva de aprendizagem destes modelos é um pouco mais lenta, devido ao

conceito, totalmente novo, introduzido a partir da aplicação desta nova tecnologia.

Page 81: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

65

6. CONFIGURAÇÃO DE UM CLUSTER DE ALTO DESEMPENHO

Neste capítulo do trabalho, vou descrever todo o processo de construção do cluster de

alto desempenho do laboratório prático.

A configuração do cluster, foi realizada manualmente permitindo assim um controlo

total da localização dos arquivos.

O processo de configuração não se detém em muitas explicações sobre todas definições

de cada programa instalado no Cluster, apenas dá breves comentários antes da instalação de

cada um. E também não se perde em explicações sobre comandos, pois partimos do princípio

de que a configuração de um cluster requer que o usuário já tenha algum conhecimento sobre

os comandos básicos de GNU/Linux.

Robert G. Brown, no seu livro Engineering a Beowulf-style Compute Cluster, 2003, da

uma definição mais detalhada de cluster. Este livro descreve o verdadeiro Cluster Beowulf,

como um conjunto de computadores interligados por uma rede com as seguintes

características:

1. Os nós são dedicados ao cluster Beowulf.

2. A rede na qual os nós residem são dedicados ao cluster Beowulf.

3. Os nós são computadores Mass Market Commercial-Off-The-Shelf (M2COTS).

4. A rede também é uma entidade COTS.

5. Os nós todos executam o software de código aberto.

6. O agrupamento resultante é utilizado para High Performance Computing (HPC).

Page 82: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

66

6.1. CLUSTER EM MAQUINAS VIRTUAIS

Para este trabalho a construção de um cluster será em um ambiente virtual, usamos o

software de virtualização VirtualBox . O cluster virtual permite construir e testar o cluster sem

a necessidade de hardware adicional. No entanto, este método serve apenas para testes e não é

adequado se você quiser melhorar o desempenho.

Quando se trata de configurar os nós do cluster, a construção de um cluster virtual é

praticamente o mesmo que construir um cluster com máquinas reais. A diferença é que você

não precisa se preocupar com o hardware mais. Você tem que configurar correctamente as

interfaces de rede virtual dos nós virtuais. Eles precisam ser configurados de forma que o nó

mestre (por exemplo, o computador no qual os nós virtuais estão em execução) tem acesso à

rede para os nós virtuais, e vice-versa.

6.2. CLUSTER EM MAQUINAS FÍSICAS

Os componentes do cluster são dispositivos disponíveis para o público em geral

(requisito beowulf 3 e 4). Neste tutorial, vamos usar o sistema operativo Debian 7 (Wheezy)

SO de código aberto para permitir a computação paralela distribuída (requisito beowulf 5).

O cluster é composto pelas seguintes peças de hardware:

Switch

Computadores (No mestre e escravos)

Todos nós (incluindo o nó mestre) executando os seguintes software:

GNU / Linux OS, Debian 7.3 (Wheezy) 32-bit. Kernel Linux 3.2.0-4-486, Gnome

3.4.2 (apenas no master).

Network File System (NFS)

Page 83: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

67

Secure Shell (SSH)

Message Passing Interface (MPI) - MPICH, um alto desempenho e implementação

amplamente portátil da Message Passing Interface (MPI) padrão (5).

Ganglia web.

Vamos partir do princípio que todos os nós, são parte da mesma rede privada e que

eles estão conectados correctamente.

RECOMENDAÇÃO

i. Siga a sequência de passos, cada biblioteca deve estar no directório correto. Se

você mudar o caminho, lembre-se de alterar também em todos os locais onde a

biblioteca referida for usada.

ii. Iremos instalar e configurar nos directórios /opt e /usr/local. No Debian, os

directórios /usr/local e /opt, são os únicos directórios onde o sistema não "mete

a mão", ou seja, são directórios próprios para instalações "alienígenas", por

assim dizer. Além do que, dessa maneira, as instalações ficam melhor

organizadas.

iii. O Debian não toca nos arquivos em /usr/local/ ou em /opt, portanto, ao

compilar um programa a partir do código fonte, instale-o em /usr/local/ ou /opt,

para que não interfira com o Debian.

iv. Nome de máquina: servidor, no0X (no01, no02, no03, etc).

v. Nome de usuário: cluster.

vi. Mesmo nome de usuário para todos e na instalação do sistema, deve ser a

mesma localização e fuso horário.

Page 84: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

68

REPOSITORIOS DO DEBIAN

Editar o arquivo sources.list, e adicionar os seguintes repositórios. Para o master, por

ter sido instalado a parte gráfica:

deb http://ftp.br.debian.org/debian/ wheezy main contrib non-free

deb-src http://ftp.br.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free

deb-src http://security.debian.org/ wheezy/updates main contrib non-free

deb http://ftp.br.debian.org/debian/ wheezy-updates main contrib non-free

deb-src http://ftp.br.debian.org/debian/ wheezy-updates main contrib non-free

deb http://mirrors.kernel.org/debian/ wheezy-updates main contrib non-free

deb-src http://mirrors.kernel.org/debian/ wheezy-updates main contrib non-free

deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free

deb-src http://ftp.debian.org/debian/ wheezy-updates main contrib non-free

Para os nos escravos, instalado somente o modo texto:

deb http://ftp.br.debian.org/debian/ wheezy main contrib non-free

deb-src http://ftp.br.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free

deb-src http://security.debian.org/ wheezy/updates main contrib non-free

deb http://ftp.br.debian.org/debian/ wheezy-updates main contrib non-free

deb-src http://ftp.br.debian.org/debian/ wheezy-updates main contrib non-free

deb http://ftp.debian.org/debian/ wheezy-updates main contrib non-free

deb-src http://ftp.debian.org/debian/ wheezy-updates main contrib non-free

deb http://ftp.debian.org/debian/ wheezy-backports main contrib non-free

Page 85: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

69

6.3. ADICIONAR NÓS

Partimos do princípio que todos os nos já estão configurados correctamente para ter

um endereço estático.

Edite o arquivo /hosts, precisa fazer isso em todos os nós.

127.0.0.1 localhost

192.168.1.6 master

192.168.1.7 node1

192.168.1.8 node2

192.168.1.9 node3

Master é usado como o nó mestre. Uma vez que o grupo foi criado, o nó master será

usado para iniciar os trabalhos no cluster. O nó master será usado para gerar postos de

trabalho no cluster. Os nós de computação são node1 para node3 e, assim, executar os

trabalhos.

6.4. DEFINIÇÃO DE UM USUÁRIO PARA EXECUTAR TAREFAS

Todos nós precisam de um usuário separado para a execução de trabalhos de MPI.

Baseando se nas seguintes razões:

1. Não há necessidade de lembrar os nomes de usuário e ter senhas diferentes se todos os

nós usar o mesmo nome de usuário e senha.

2. MPICH2 pode usar SSH para comunicação entre nós. O login sem senha com o uso de

chaves autorizadas só funciona se o nome de usuário corresponde ao conjunto sem

senha de login. Não temos que nos preocupar com isso, se todos os nós usarem o

mesmo nome de usuário.

3. O directório NFS pode ser acessível apenas para os usuários MPI. Os usuários MPI

todos precisam ter o mesmo ID de usuário para o sistema funcionar.

Page 86: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

70

4. A separação de usuário requer permissões especiais.

6.5. PREPARANDO O SISTEMA (SERVIDOR E NÓS):.

Actualizar o sistema

# apt-get update

# aptitude safe-upgrade

Instalar e actualizar pacotes (servidor e nós):

# aptitude install build-essential module-init-tools kernel-package initramfs-tools

# aptitude install autoconf libaal-dev wget liblzo2-dev gzip libncurses5 libncurses5-

dev dpatch udev

Vamos instalar pacotes, a mais do que o necessário, para compilação dos programas

que queremos. Caso, futuramente, for preciso compilar o kernel ou compilar e instalar um

outro pacote, bastará actualizar o sistema.

# aptitude install openjdk-7-jre

Somente se for trabalhar com Java - servidor e nós. Para optimizar o sistema. Execute

o seguinte comando no servidor e nós:

# aptitude install cgroup-bin

Abrir o arquivo rc.local e adicionar o conteudo:

# vim /etc/rc.local

mkdir -p /dev/cgroup/cpu

mount -t cgroup cgroup /dev/cgroup/cpu -o cpu

mkdir -m 0777 /dev/cgroup/cpu/user

echo "1" > /dev/cgroup/cpu/user/notify_on_release

echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent

Page 87: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

71

Salvar e sair.

Criar o arquivo cgroup_clean e colocar o conteúdo:

# vim /usr/local/sbin/cgroup_clean

#!/bin/sh

if [ "$1" != "/user" -a "$1" != "/user/" ]; then

rmdir /dev/cgroup/cpu$1

fi

Salvar e sair. E execute o commando:

# chmod +x /usr/local/sbin/cgroup_clean

Abrir o arquivo bash.bashrc e edite, adicionando o conteúdo:

# vim /etc/bash.bashrc

# this file has to be sourced in /etc/profile.

if [ "$PS1" ] ; then

mkdir -m 0700 /dev/cgroup/cpu/user/$$

echo $$ > /dev/cgroup/cpu/user/$$/tasks

fi

Salvar e sair.

Instalando mais pacotes necessários (servidor e nós):

# apt-get update

# apt-get install gfortran-*

Reiniciar: # shutdown -r now

Criando os arquivos necessários (servidor e nós):

Page 88: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

72

Para ver qual a placa de rede eth0 ou eth1.

# ifconfig

Para vermos o arquivo que contem a configuração das interfaces.

# cat /etc/network/interfaces

Auto lo

Iface lo inet loopback

# the primary network interface

Allow-hotplug eth0

Iface eth0 inet static

Address 192.168.1.6

Netmask 255.255.255.0

Network 192.168.1.0

Broadcast 192.168.1.255

Gateway 192.168.1.1

#the secondary network interface

Allow-hotplug eth1

Iface eth1 inet dhcp

O arquivo interfaces acima, é do servidor. Em algumas máquinas, a placa de rede

utilizada com IP fixo na eth0, em outras, a eth1. Adapte para a sua configuração de hardware.

Abri o arquivo hosts e edite:

# vim /etc/hosts

127.0.0.1 localhost

192.168.1.6 master

192.168.1.7 no01

192.168.1.8 no02

Page 89: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

73

192.168.1.9 no03

# the following lines are desirable for IPv6 capable hosts

::1 localhost ip6-localhost ip6-loopback

Ff02::1 ip6-allnodes

Ff02::2 ip6-allrouters

O arquivo /etc/hosts deve ser igual, tanto no servidor como nos nós.

Abrir o arquivo e edite com o conteúdo abaixo:

# vim /etc/hosts.equiv

master

no01

no02

no03

O arquivo /etc/hosts.equiv, deve ser o mesmo em todas as máquinas do cluster.

Abrir o arquivo .rhosts e edite com o conteúdo abaixo:

# vim /home/.rhosts

master

no01

no02

no03

O arquivo /home/.rhosts, deve ser o mesmo em todas as máquinas do Cluster.

Abrir o arquivo e edite com o conteúdo abaixo.

# vim /root/.rhosts

master

Page 90: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

74

no01

no02

no03

Abri o arquivo o securetty, somente acrescente as linhas,:

# vim /etc/securetty

console

rsh

ssh

Abrir o arquivo hostfile e edite com o conteúdo abaixo.

# vim /opt/hostfile

master

no01

no02

no03

O arquivo /opt/hostfile deve ser rigorosamente o mesmo em todas as máquinas.

Instalando NTP (servidor e nós).

NTP (Network Time Protocol), ou Protocolo de Tempo para Redes, permite a

sincronização do tempo em servidores ou máquinas em uma rede, buscando em uma estrutura

confiável de outros servidores NTP, para obter a hora certa.

O NTP é necessário para fins de sincronização de tempo entre as máquinas do cluster.

# aptitude install ntp

Abrir o arquivo ntp.conf:

Page 91: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

75

# vim /etc/ntp.conf

Edite o arquivo adicionando e comentando as linhas necessárias em seus respectivos

lugares.

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

Server 192.168.1.6

Driftfile /var/lib/ntp/ntp.drift

Authenticate no

E passe a comentário as linhas

#server 0.debian.pool.ntp.org iburst

#server 1.debian.pool.ntp.org iburst

#server 2.debian.pool.ntp.org iburst

#server 3.debian.pool.ntp.org iburst

Aumentando descritores e swappiness (opcional: servidor e nós)

Um Descritor de Arquivo (FD - File Descriptor) é um número inteiro positivo que o

processo usa para referenciar um determinado arquivo aberto. Quando um processo precisa

acessar um arquivo, ele faz isso através do descritor do arquivo. Os descritores, propriamente

ditos, são mantidos pelo kernel. O tamanho dessa tabela varia de sistema para sistema.

swappinnes é o processo de troca responsável por controlar a quantidade de memória

RAM e swap que será utilizada pelo sistema. É uma variável contida no código fonte do

kernel.

Alterando:

# sysctl -w fs.file-max=921600

Page 92: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

76

Acesse ao ficheiro sysctl.conf :

# vim /etc/sysctl.conf

Acrescentar no final as linhas:

fs.file-max=921600

vm.swappiness=10

Reinicie.

Para ver a alteração da swappiness, execute:

# sysctl vm.swappiness

Servidor SSH

Instale no servidor e nòs.

# aptitude install ssh

No servidor, gerando a chave com 1024 bits:

# ssh-keygen -b 1024 -t rsa

Copiando a chave para os nós. Mudando os IP´s no comando abaixo:

# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

Para testar, vamos executar o shell nos nós a partir do servidor. Na primeira vez,

deverá pedir a senha, digite a senha.

# ssh 192.168.1.x -n 'echo $SHELL'

Ou:

# rsh 192.168.1.x -n 'echo $SHELL'

Page 93: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

77

Deverá aparecer: /bin/bash

Mudando os IP’s no comando acima e teste todos.

Em caso de algum erro e de não conseguir acessar alguma máquina, acesse o arquivo

abaixo no servidor e apague todo o conteúdo dentro dele:

# vim /root/.ssh/known_hosts

Depois, ao acessar um nó com, por exemplo,

# ssh no01

Deverá aparecer uma mensagem "Are you sure you want to continue...", digite yes. Irá

pedir a senha, digite-a e, na próxima vez, não pedirá mais senha.

Instalando PVFS2 (servidor e nós)

PVFS (Parallel Virtual File System), é um sistema de arquivos concebido para

proporcionar alto desempenho para aplicações paralelas, onde tem grande concorrência de

acesso a muitos arquivos e grande volume de I/O (Entrada e Saída de Dados) a arquivos em

comum (compartilhados).

A instalação do PVFS2 é interessante em Clusters com grande volume de dados. Aqui

foi instalado para fins de testes.

Para o cluster que se propõe vamos utilizar o NFS.

Servidor NFS

Tem a mesma função do PVFS2, fazer o compartilhamento e sincronização de

directórios e arquivos no cluster. Grosso modo podemos dizer que um sistema de arquivos

Page 94: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

78

desse tipo permite que instalemos somente no servidor os programas que queremos executar

no cluster, cabendo ao sistema de arquivos fazer o compartilhamento e o sincronismo.

Prefira o sistema de arquivos NFS, pois tem melhor desempenho em clusters caseiros

com baixo volume de dados e não habilite os dois sistemas de arquivos (PVFS2 e NFS) ao

mesmo tempo no cluster, senão dará problemas.

E lembre-se, se você instalar o PVFS2 com o NFS e for usar o NFS, comente a linha

/etc/init.d/pvfs2-server no arquivo /etc/rc.local no servidor e nos nós.

Iniciando a instalação do NFS:

# cd /home/kluster

No servidor:

# apt-get install portmap

# apt-get install nfs-common

# apt-get install nfs-kernel-server

# apt-get install nfs-user-server

Abrir o arquivo:

# vim /etc/exports

Coloque o conteúdo no final:

/home/kluster

192.168.1.0/24(rw,all_squash,subtree_check,anonuid=150,anongid=100)

/opt 192.168.1.0/24(rw,all_squash,subtree_check)

/usr/local 192.168.1.0/24(rw,all_squash,subtree_check)

Deve ir o endereço da rede. Salve e saia.

Page 95: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

79

Veja bem, as pastas colocadas ali serão as pastas a serem compartilhadas pelo servidor

com as outras máquinas do cluster. Então, todo e qualquer arquivo que deverá ser utilizado

pelo cluster durante a execução de um programa devem ser colocados nesta mesma pasta.

Actualizando o kernel com as mudanças no arquivo /etc/exports:

# exportfs -a

Reinicie o serviço:

# /etc/init.d/nfs-kernel-server restart

Nos nós:

Entre no arquivo /etc/fstab:

# vim /etc/fstab

Adicione no final:

192.168.1.6:/home/kluster /home/kluster nfs defaults 0 0

192.168.1.6:/opt /opt nfs defaults 0 0

192.168.1.6:/usr/local /usr/local nfs defaults 0 0

E salve o arquivo.

MPICH

MPI (Message Passing Interface), em uma tradução livre, Interface de Passagem de

Mensagens. É uma biblioteca com funções para troca de mensagens que faz a comunicação e

a sincronização de processos em um Cluster paralelo.

Essa é a biblioteca que fará todo o trabalho de processamento no Cluster. Essa é a

biblioteca que transforma um conjunto de máquinas em um Cluster.

Page 96: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

80

Os objectivos do MPICH são fornecer uma implementação MPI que suporte

eficientemente, diferentes plataformas de computação e comunicação, incluindo grupos de

commodities (sistemas de Desktop, sistemas de memória compartilhada e arquiteturas

multicore), redes de alta velocidade e sistemas de computação High-end de propriedade (Blue

Gene, Cray); e permitir a pesquisa de ponta em MPI através de uma estrutura modular fácil de

estender para outras implementações derivadas.

Servidor e nós:

# cd /usr/src

# wget http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz

# tar -xzvf mpich-3.0.4.tar.gz

# ls

# cd mpich-3.0.4

#./configure --help | less

# ./configure --prefix=/opt/mpich --enable-shared --enable-f95 --enable-

threads=runtime --enable-romio --enable-nemesis-shm-collectives --enable-debuginfo

CC=gcc CXX=g++ FC=gfortran F77=gfortran --with-pvfs2=/opt/pvfs2 --with-file-

system="pvfs2+nfs" --with-thread-package=posix --with-device=ch3:nemesis --with-

java=/etc/java-7-openjdk

# make

O make deverá terminar com a frase abaixo sem nenhuma mensagem de erro antes

dela:

make[1]: saindo do directorio '/usr/src/mpich-3.0.4'

# make install

O make install, idem ao make, não deverá apresentar erros.

Configurando as variáveis:

# vim ~/.bashrc

Page 97: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

81

PATH=/opt/mpich/bin:$PATH

export PATH

E acrescentar, também, o caminho na variável LD_LIBRARY_PATH=/opt/mpich/lib

O arquivo bashrc acima com as variáveis, é o mesmo para o servidor e os nós.

Reinicie:

# shutdown -r now

Vendo as informações:

# mpiexec -info

Vamos testar nossa instalação, compilando e executando:

# cd /usr/src/mpich-3.0.4/examples

# ls

# mpicc -o cpi cpi.c

Esse arquivo deve ser compilado em todas as máquinas; acesse uma por uma ou utilize

o seguinte comando:

# mpicc -o -hostfile /opt/hostfile /usr/src/mpich-3.0.4/examples/cpi.c cpi

O arquivo cpi.c realiza cálculo do π (PI).

Testando:

# mpirun -hostfile /opt/hostfile -n 3 /usr/src/mpich-3.0.4/examples/cpi

Para ver o manual, execute:

# man mpicc

Ou:

Page 98: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

82

# man mpi_Barrier

Ou:

# man mpiexec

Ganglia

O Ganglia é um sistema de monitoramento distribuído escalável para sistemas de

computação de alto desempenho, como Clusters e grids. Ele é baseado em um projecto

hierárquico dirigido a Clusters. Ele aproveita as tecnologias amplamente utilizadas, tais como

XML para representação de dados, XDR para compacto, transporte de dados portátil e

RRDtool para o armazenamento e visualização de dados.

Ele usa as estruturas de dados e algoritmos projectados cuidadosamente para alcançar

baixos custos gerais por nós e alta concorrência. A implementação é robusta e foi portada para

um amplo conjunto de sistemas operacionais e arquiteturas de processadores, e está

actualmente em uso em milhares de grupos em todo o mundo.

Ele tem sido usado para ligar os Clusters através de campi universitários e em todo o

mundo, e pode ser escalado para lidar com grupos com 2000 nós.

Nos nós:

# apt-get update

# apt-get install ganglia-monitor

No servidor:

# apt-get update

# apt-get install apache2

Testando o Apache: abra o navegador e digite: localhost, deverá aparecer: It works.

Page 99: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

83

# apt-get install php5 libapache2-mod-php5

Crie o arquivo:

# vim /var/www/info.php

Coloque dentro dele:

<?php

phpinfo();

?>

Salve e saia. Reinicie o Apache:

# /etc/init.d/apache2 restart

Abra o navegador e digite localhost/info.php, deverá aparecer a página de informações

do PHP.

Instalando o Ganglia:

# apt-get install ganglia-webfrontend ganglia-monitor

Irá pedir duas vezes para reiniciar o Apache 2, faça. Vamos copiar o arquivo

necessário:

# cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf

Alterar o arquivo /etc/ganglia/gmod.conf no servidor e copiar para os nós. É

extremamente necessário, tendo em vista que a conexão remota fica muito lenta, devido ao IP

239.2.11.71. Comente as linhas onde tem o IP 239.2.11.71, ou similar, e configure o host com

o IP do servidor.

...

Page 100: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

84

Udp_send_channel {

Host = 192.168.1.6

/* mcast_join = 239.2.11.71 */

Port = 8649

/* mcast_join = 239.2.11.71 */

Port = 8649

/* bind = 239.2.11.71 */

..

Altere o arquivo /etc/ganglia/gmetad.conf no servidor:

Data_source “cluster” 15 localhost 192.168.1.6

Gridname “cluster”

Authority “http://192.168.1.6/ganglia/”

Para reiniciar o serviço nos nós:

# service ganglia-monitor restart

Reiniciar o Apache e o Ganglia no servidor:

# /etc/init.d/apache2 restart

# service gmetad restart

A partir daí é só digitar no navegador localhost/ganglia.

Page 101: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

85

HPL

O HPL é um pacote de software que resolve um sistema aritmético (aleatório) de

densidade linear de precisão dupla (64 bits) em computadores de memória distribuída. É uma

implementação livremente disponível do projeto High Performance Computing Benchmark

Linpack.

No servidor e nós. Volte ao diretório /opt.

# wget http://www.netlib.org/benchmark/hpl/hpl-2.1.tar.gz

# tar -vzxf hpl-2.1.tar.gz

# mv hpl-2.1 hpl

# cd hpl

Copiando o arquivo de configuração. Dependendo da sua arquitectura, você

copiar/alterar o arquivo Make.Linux_PII_CBLAS ou Make.Linux_PII_FBLAS.

Nessa configuração aqui apresentada, foi utilizado o arquivo

Make.Linux_PII_FBLAS.

# cp /opt/hpl/setup/Make.Linux_PII_FBLAS Make.Linux_PII

Entre no arquivo:

# vim Make.Linux_PII

E altere/acrescente os seguintes parâmetros:

ARCH = Linux_PII

...

TOPdir = /opt/hpl

...

MPdir = /opt/mpich

Page 102: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

86

...

#LAdir = $(HOME)/netlib/ARCHIVES/Linux_PII

LAinc =

LAlib = /opt/mpich/lib/BLAS/blas_LINUX.a

...

HPL_OPTS = -DHPL_COPY_L -DHPL_DETAILED_TIMING

...

CC = /opt/mpich/bin/mpicc

CCNOOPT = $(HPL_DEFS)

CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall

...

LINKER = /opt/mpich/bin/mpif90

Salve e saia do arquivo.

Compilando:

# make arch=Linux_PII

Testando:

# cd /opt/hpl/bin/Linux_PII

# mpirun -np 7 -hostfile /opt/hostfile ./xhpl

Veja imagem com a saída do comando acima nas conclusões, ao final do artigo.

SIESTA

O SIESTA (Spanish Initiative for Electronic Simulations with Thousands of Atoms), é

um método, uma implementação de programa de computador para realizar cálculos eficientes

de estrutura electrónica ab initio e simulações de dinâmica molecular de moléculas e sólidos.

Page 103: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

87

A eficiência do SIESTA deriva do uso de conjuntos de bases estritamente localizadas

e da aplicação de algoritmos de escalonamento linear, que podem ser aplicados a sistemas

adequados.

Uma característica muito importante do código, é que sua precisão e seu custo podem

ser sintonizados em uma ampla gama, a partir de cálculos rápidos preliminares para

simulações de alta precisão combinando a qualidade de outras abordagens, como plane-wave

e métodos de eléctrons.

O SIESTA possui as bibliotecas BLAS e LAPACK nativamente, porém, vamos

utilizar as bibliotecas que instalamos anteriormente.

Como o SIESTA é um programa que utilizará o MPI, podemos instalá-lo somente no

servidor, mas, para isso, devemos ter o NFS ou o PVFS2 bem configurados, pois serão eles

que compartilharão os arquivos utilizados na execução.

Pode-se não utilizar NFS e nem PVFS2, mas, para tanto, deve-se instalar o SIESTA

(ou qualquer outro programa a ser utilizado) no servidor e nos nós.

Volte ao directório /opt.

# wget http://departments.icmab.es/leem/siesta/CodeAccess/Code/siesta-3.2-pl3.tgz

# tar -xzf siesta-3.2-pl3.tgz

# cd siesta-3.2-pl3/Obj

# sh ../Src/obj_setup.sh

# ../Src/configure --enable-mpi --enable-debug --enable-fast --with-

blas=/opt/mpich/lib/BLAS/blas_LINUX.a --with-lapack=/opt/lapack-3.4.2/liblapack.a --with-

blacs="/opt/BLACS/LIB/blacsF77init_MPI-LINUX-0.a /opt/BLACS/LIB/blacsCinit_MPI-

LINUX-0.a /opt/BLACS/LIB/blacs_MPI-LINUX-0.a" --with-scalapack=/opt/scalapack-

2.0.2/libscalapack.a

Page 104: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

88

Configurando o arquivo arch.make:

# vim arch.make

FPP_OUTPUT=

FC=/opt/mpich/bin/mpif90

# Editar essa linha deixando-a assim

RANLIB=ranlib

# make

Será criado, entre outros, o arquivo executável siesta. Vamos copiá-lo para o

directório /opt para facilitar a execução:

# cp siesta /opt/siesta

Agora, para chamar o SIESTA (estando na mesma pasta onde está o arquivo .fdf e o

.psf), basta digitar:

# /opt/siesta < arquivo.fdf | tee arquivo.out

Para executar no cluster:

# mpirun -hostfile /opt/hostfile -n 7 /opt/siesta < /home/kluster/arquivo.fdf | tee

arquivo.out

Page 105: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

89

7. CONCLUSÃO E SUGESTÃO

Neste trabalho de fim de curso os objectivos principais foram alcançados, a

configuração de um cluster de alto desempenho, usando a versão mais popular do Linux para

servidores, o Debian.

Começamos por dar uma visão do estado actual da área de supercomputação no

mundo e como os cluster dão uma solução em alternativa aos supercomputadores no que toca

a custos e benefícios, tornando se mais económico em comparação as outras arquitecturas

existentes no mercado com fins de alta performance.

Os cluster podem ser construído em função do orçamento do projecto e necessidade,

permitindo a disponibilidade da computação de alto desempenho.

Na configuração do cluster foi simplesmente usado o necessário para termos o cluster

beowulf em funcionamento, para que se realização dos testes. Em casos reais, haveria a

necessidade de instalarmos ferramentas para gerenciar e monitorar o desempenho do cluster,

sistemas de arquivos paralelos, e escalonadores para facilitar a manutenção e uso do mesmo,

middleware.

Com o nosso objectivo concluído podemos criar assim perspectivas de novos campos

de pesquisa através de cursos para programação paralela e construção de supercomputadores.

O resultado final deste trabalho será demonstrado na apresentação da monografia, o mesmo

enriqueceu em experiencia e conhecimento a parte teórica estudada, demonstrando através

dos testes que o uso da arquitectura cluster apresenta vantagens em relação aos custos, na

instalação e nos resultados positivos, e que por isso a arquitectura cluster é realmente uma

solução para a computação de alto desempenho.

Page 106: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

90

Este trabalho será um forte contributo na implementação do Projecto AWA (Arquivo

Web Angolano), uma iniciativa dos alunos da turma LCC4N (2012). Para o seu

funcionamento do mesmo seria necessário a implementação do Hadoop, uma plataforma em

java de computação distribuída voltada para cluster e processamento grandes volumes de

dados.

Sugerindo trabalhos futuros, direcciono em projectos com foco na solução de um

problema de uma área especifica, como por exemplo em mineração de dados e algoritmos

genéticos em inteligência artificial, grandes renderização na área de computação gráfica ou

estudos na área de criptografia. Um passo alternativo seria o uso de clusters no estudo e

desenvolvimento de algoritmos paralelos, onde seria possível visualizar na prática os seus

resultados.

Também é interessante o estudo dos outros diferentes tipos de cluster abordados

superficialmente no capítulo 4, como os clusters de alta disponibilidade e os de

balanceamento de carga, que são bem diferentes dos clusters de alta performance, mas

também são muito úteis e usados actualmente.

Page 107: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

91

8. REFERÊNCIAS BIBLIOGRÁFICAS

AZIMI, Reza, 2013 Building a simple Beowulf cluster with Ubuntu, disponível em:

<http://byobu.info/article/Building_a_simple_Beowulf_cluster_with_Ubuntu>, acedido em

Agosto de 2013

BELL, G. & J. GRAY (2002), What’s next in high-performance computing?,

Communications of the ACM.

BOOKMAN, Charles. Agrupamento de computadores em Linux: aprenda a construir e

manter grupos de computadores com Linux. Rio de Janeiro: Ciência Moderna, 2003. 240p.

BRAUN, Leandro R. (2006), Avaliação da Implantação de Cluster de Computadores

Usando Tecnologias Livres, trabalho de conclusão de curso, Centro Universitário Feevale.

BROWN, R. G. What makes a Cluster Beowulf? Duke University Physics Department,

2006. Disponível em: <www.beowulf.org/overview/howto.html>. Acedido em: 15 Fev. 2008,

11:24.

BUENO, A.D. Introdução ao Processamento Paralelo e ao Uso de Clusters de

Workstations em Sistemas GNU/LINUX. UFSC, 2002. disponível em:< www.rau-

tu.unicamp.br/nou-rau/softwarelivre/document/stats.php>. Acedido em: 24 jul. 2013, 16:03.

BUYYA, Rajkumar (editor). High Perfomance Cluster Computing: Architectures and

Systems, Vol. I. Capitulo 1. New Jersey: Prentice Hall, 1999. disponível em:

<http://www.buyya.com/cluster/v1preface.pdf>. acedido em: Novembro de 2013

DANTAS, Mario (2005), Computação Distribuída de Alto Desempenho: Redes, Clusters

e Grids Computacionais, 1a edição, Axcel Books, Rio de Janeiro - RJ.

devmedia.com.br, 2013, Configurando um Cluster de Tomcat com Balanceamento de

Carga, disponível em: <http://www.devmedia.com.br/configurando-um-cluster-de-tomcat-

com-balanceamento-de-carga/22631>. Acedido em: Novembro de 2013.

differ.com, 2013, Linux vs Windows - Difference and Comparison | Diffen, disponível em:

<http://www.diffen.com/difference/Linux_vs_Windows>. acedido em: Agosto de 2013.

FARIAS, Gilberto, Introdução a informática, disponível em:

<http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-

livro/livro/livro.chunked/index.html>, acedido em 20 de Agosto de 2013.

FERREIRA, Rubem E. 2008. Linux: Guia do administrador do sistema. 2. ed. Novatec:

São Paulo.

FRANCO, L. D. (2004), Implementação Computacional em Ambiente Paralelo de Me-

mória Distribuída para Análise Acoplada de Sistemas Offshore, Tese de doutorado,

Universidade Federal do Rio de Janeiro (COPPE-UFRJ), Rio de Janeiro, RJ.

fi.edu, 2013, ENIAC_Image_2.jpg (JPEG Image, 1500 × 1012 pixels) - Scaled (66%)

disponível em: <http://www.fi.edu/learn/case-files/eckertmauchly/ENIAC_Image_2.jpg.>.

Acedido em: Setembro de 2013.

Page 108: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

92

fi.edu, John W. Mauchly and J. Presper Eckert: The ENIAC Team. Disponível em:

<http://www.fi.edu/learn/case-files/eckertmauchly/team.html>; acedido em: Agosto de 201.

IEEE, 2006. Disponível em: <http://www.feg.unesp.br/~caeel/about/aboutieee.htm>. Acedido

em: 09 jun. 2013.

KOPPER, K, 2005. The Linux Enterprise cluster : build a highly available cluster with

commodity hardware and free software.

LYNN, M. (1974), Some Computer Organizations and Their Effectiveness, IEEE

Transaction Computers, Rio de Janeiro - RJ, p. 94.

MINDCRAFT. Web Stone: The Benchmarks for Web Servers. [S.l: Mindcraft], 1998.

Disponível em: <http://www.mindcraft.com/benchmarks/webstone/> Acedido em: 22 de julho

de 2013.

M IM , arlos. Dominando o SSH. Disponível em: http://www.guiadohardware.net/

Acessado em: 05 de nov. de 2013

MPI, 2012. Disponível em: <http://www.mpi-forum.org>. Acedido em 16 maio2013.

MPIBENCH Home Page, 2009. Disponível em:

<http://icl.cs.utk.edu/projects/llcbench/mpbench.html>. Acedido em: 02 de Agosto de 2013.

OMENA, Moisés, Clusters e Supercomputadores, fórum viva o Linux on line, Disponível

em < http://www.vivaolinux.com.br/artigo/Clusters-e-Supercomputacao/ >. acedido em: 02 de

Agosto de 2013.

OPENMP, 2013, Introduction to OpenMP. Disponível em:

<http://www.rc.unesp.br/igce/demac/balthazar/gpacp/bibliografia/E-

01%20%20Introduction%20to%20OpenMP%20-%20LLNL%20-

%20University%20of%20Califor.htm >; acedido em: Dezembro de 201.

PINTO, Hudson J. L., SILVA, Michel P. e SILVEIRA, Gabriel D. (2005) . Ambientes de

Alto Desempenho utilizando Cluster de Computadores: Universidade de Formiga,

Departamento de Ciência da Computação, Instituto de Ciências Sociais Aplicadas e Exactas.

Formiga, MG, Brasil.

PITANGA, Marcos. Computação em cluster: o estado da arte da computação. Rio de

Janeiro: Brasport Livros e Multimídia Ltda, 2003.

PITANGA, Marcos. Construindo supercomputadores com linux. 3ª edição. Rio de Janeiro:

Brasport, 2008. 321p.

SILVA, José Maurício Oliveira e (2009), Estudo e construção de um ambiente de alto

desempenho utilizando cluster computacional, trabalho de conclusão de curso II, UFP.

STALLINGS, W. (2002), Arquitetura e Organização de Computadores, 5a edição, Pren-

tice Hall, São Paulo - SP.

Page 109: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

93

STERLING, T. & E. Lusk (2003), Beowulf Cluster Computing with LINUX, 2a edição,

The MIT Press.

TANENBAUM, ANDREW S. . Sistemas operacionais modernos. 2 ed. São Paulo: Pearson

Education do Brasil, 2003.

Webber, Melvin, Societal Contexts of Transportation and Communication, Working Pag.

220,. Institute of Urban and Regional Development, University of California -Berkeley, 1973.

WELSH, M.; KAUFMAN, L. Running Linux. 1. ed. United States of America: O'Reilly &

Associates, Inc, 1995. ISBN 1-56592-100-3.

WIKIPEDIA, Arquitectura de Von Neumann, Enciclopédia Livre. Disponível em:

http://pt.wikipedia.org/wiki/Arquitetura_de_von_Neumann >. Acesso em: 04 de fevereiro de

2013.

WIKIPÉDIA. Seymour Cray. Enciclopédia livre. Disponível em:

<http://pt.wikipedia.org/wiki/Seymour_Cray > Acedido em: 04 Maio de 2013.

WIKIPÉDIA. SuperComputador. Enciclopédia Livre. Disponível em:

<http://pt.wikipedia.org/wiki/Supercomputador > Acesso em: 04 de maio de 2013.

YEO, C. Shin; BUYYA, Rajkumar; POURREZA, Houssein; ESKICIOGLU, Rasit;

GRAHAM, Peter, SOMMERS, Frank, 2006. Cluster Computing: High-Performance,

High-Availability, and High- Throughput Processing on a Network of Computers. Handbook of Nature-Inspired and Innovative Computing: Integrating Classical Models with

Emerging Technologies, p 521-551, Springer US.

ufpd.br, 2013, As gerações dos computadores. Disponível em:

<http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro

.chunked/ch01s02.html>; acedido em: Agosto de 2013.

U.S. Air Force, 2013, U.S. Air Force PS3, Cluster Computing Project Screwed By Sony.

disponível em:

<http://www.everydaynodaysoff.com/2010/05/12/u-s-air-force-ps3-cluster-computing-project-

screwed-by-sony/>, acedido em: Agosto de 2013.

Wikipedia, 2013, File:Official gnu.svg - Wikimedia Commons. Disponível em:

<http://commons.wikimedia.org/wiki/File:Official_gnu.svg> acedido em: Setembro de 2013.

WIKIPEDIA, 2013, Cray XT5 - Wikipedia, the free encyclopedia. Disponível em:

<http://en.wikipedia.org/wiki/Cray_XT5>. acedido em: Agosto de 2013.

WIKIPEDIA, 2013, Arquitetura de von Neumann – Wikipédia, a enciclopédia livre.

Disponível em:

<http://pt.wikipedia.org/wiki/Arquitetura_de_von_Neumann>; acedido em: Novembro de

2013.

Page 110: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

94

9. ANEXO

Em anexo, o acesso aos nòs escravos por ssh.

Page 111: Implementação_cluster alto_desempenho_fernando_eduardo_20090726-Imetro_2013

95

Após a configuração do Cluster, monitorizando o funcionamento do cluster com o ganglia.