Você está na página 1de 77

UNIVERSIDADE FEDERAL DO TOCANTINS

CAMPUS UNIVERSITÁRIO DE PALMAS


CIÊNCIA DA COMPUTAÇÃO

AMBIENTE EXPRESSO PARA


PROCESSAMENTO DISTRIBUÍDO COM MATLAB®

RENÊ DETTENBORN

PALMAS
JUNHO 2008
Dados Internacionais de Catalogação na Publicação (CIP)
Biblioteca da Universidade Federal do Tocantins
Campus Universitário de Palmas

D483a Dettenborn, Renê


Ambiente Expresso para Processamento Distribuído com MATLAB® /
Renê Dettenborn. - Palmas, 2008.
78 f.

Monografia (TCC) – Universidade Federal do Tocantins, Curso de


Ciência da Computação, 2008.
Orientador: George L. R. de Brito

1. Processamento Distribuído. 2. Matlab 3. Cluster. I. Título.

CDD 004

Bibliotecário: Paulo Roberto Moreira de Almeida


CRB-2 / 1118
TODOS OS DIREITOS RESERVADOS – A reprodução total ou parcial, de qualquer forma ou por qualquer
meio deste documento é autorizado desde que citada a fonte. A violação dos direitos do autor (Lei nº
9.610/98) é crime estabelecido pelo artigo 184 do Código Penal.
RENÊ DETTENBORN

AMBIENTE EXPRESSO PARA


PROCESSAMENTO DISTRIBUÍDO COM MATLAB®

Monografia apresentada à disciplina


Projeto de Graduação, como requisito
parcial à obtenção de título de bacharel
em Ciência da Computação, na
Universidade Federal do Tocantins.

Orientador: Prof. George L. R. de Brito


Co-orientador: Gentil Veloso Barbosa

PALMAS
JUNHO 2008
TERMO DE APROVAÇÃO

RENÊ DETTENBORN

PROJETO DE GRADUAÇÃO

Trabalho Final de Graduação aprovado como requisito parcial para obtenção do


grau de bacharel em Ciências da Computação da Universidade Federal do
Tocantins, pela seguinte banca examinadora:

___________________________________________
George Lauro Ribeiro de Brito
Orientador

___________________________________________
Warley Gramacho da Silva
Convidado Interno

___________________________________________
Patrick Letouzé Moreira
Convidado Externo
Dedico, este trabalho
a Deus que sempre me iluminou,
a Minha Querida Esposa,
aos meus Pais e familiares
e também a aqueles que
contribuíram para a realização

V
AGRADECIMENTOS

Ao
Mestre George Brito
pela imensa atenção e dedicação ao nosso trabalho, e o
encorajamento nos momentos difíceis.

Gentil Veloso Barbosa, pela ajuda inestimável, pelos esclarecimentos


sobre o referencial teórico.

Warley Gramacho da Silva, pela preciosa consultoria nos aspectos


técnicos.

Professor Patrick Letouzé Moreira, pelas valiosas sugestões.

VI
“O futuro dependerá daquilo que fazemos no presente.”

Mahatma Gandhi

VII
SUMÁRIO
LISTA DE TABELAS...............................................................................................xii
RESUMO................................................................................................................xiii
ABSTRACT.............................................................................................................xiv
1 INTRODUÇÃO.......................................................................................................1
2 OBJETIVOS...........................................................................................................3
2.1. Objetivo Geral.........................................................................................3
2.2. Objetivo específico .................................................................................3
2.3. Organização do Trabalho.......................................................................3
3 O ESTADO DA ARTE EM SISTEMAS DISTRIBUIDOS.......................................4
3.1. Aspectos de Projetos em Sistemas Distribuídos....................................4
3.2. Sistemas Distribuídos.............................................................................7
3.3. Formas de Paralelismo...........................................................................9
3.4. Computação Distribuída.........................................................................9
3.5. Programação Distribuída........................................................................9
3.5.1 LAM/MPI...................................................................................10
3.6. CLUSTER.............................................................................................11
3.6.1 Desvantagens dos Clusters.....................................................14
3.6.2 Cluster Beowulf........................................................................14
3.6.3 Hardware do Cluster................................................................14
4 MATERIAIS E MÉTODOS...................................................................................16
4.1. MATLAB® ............................................................................................16
4.2. BCCD....................................................................................................17
4.2.1 Obter distribuição BCCD.........................................................18
5 DESENVOLVIMENTO DO TRABALHO..............................................................19
5.1. Distribuição GNU/Linux.........................................................................19
5.1.1 Servidor Principal.....................................................................20
5.1.2 Nós Secundários......................................................................21
5.2. MatlabMPI.............................................................................................21
5.3. Algoritmo para processamento paralelo...............................................22
5.4. Testes de Benchmark...........................................................................24
6 AMBIENTE PARA TESTES.................................................................................25
6.1. Ambiente de Processamento Distribuído.............................................25
6.2.Configuração do Cluster........................................................................26
7 RESULTADOS E DISCUSSOES......................................................................30
7.1.Resultados adquiridos...........................................................................30
8 CONCLUSÃO E TRABALHOS FUTUROS........................................................37
8.1. Conclusão.............................................................................................37
8.2. Trabalhos Futuros.................................................................................38
REFERÊNCIAS BIBLIOGRÁFICAS.......................................................................40
APÊNDICE A..........................................................................................................43
ANEXOS.................................................................................................................60

VIII
LISTA DE FIGURAS

Figura 1: Segmentos que utilizam Cluster (TOP500 Setembro de 2007)..................11


Figura 2: Áreas onde Cluster é aplicado (TOP500 Setembro de 2007)....................12
Figura 3: Diagrama PCAM..........................................................................................24
Figura 4: Estrutura em camadas do Cluster desenvolvido.........................................26
Figura 5: passos da implementação utilizando a Técnica Desenvolvimento e Análise
Estruturada - SADT.....................................................................................................27
Figura 6: Cluster pronto para testes no Labin 09 - UFT.............................................28
Figura 7: Terminal de linha de comando....................................................................30
Figura 8: Testes com script blurimage.m, tempo de acesso menor ao NFS, fonte
Tabela 3.......................................................................................................................31
Figura 9: Testes com script blurimage.m, tempo de acesso padrão ao NFS, fonte
Tabela 4.......................................................................................................................33
Figura 10: Ocorrência de estouro de memória por excessos de processos
concorrentes, referente ao teste 34 da Tabela 3........................................................34
Figura 11: Testes com script blurimage.m, execução local, fonte Tabela 5..............36
Figura 12: Relação Tempo x Número de Processos, referencia Tabelas 5, 6 e 7....37
Figura 13: Relação GigaFlops x Número de Processos, referencia Tabelas 5, 6 e 7...
37
Figura 14: Tela inicial BCCD.......................................................................................45
Figura 15: Inserir senha padrão para usuário bccd....................................................47
Figura 16: Configuração da placa de rede.................................................................47
Figura 17: Aviso: é necessário que o computador tenha pelo menos uma interface
de rede........................................................................................................................48
Figura 18: Drivers disponíveis para a interface de rede.............................................48
Figura 19: Interface de rede configurada corretamente.............................................49
Figura 20: Mensagem padrão, aviso que interface de rede eth0 será configurada...49
Figura 21: Configurar automaticamente via servidor DHCP?....................................49
Figura 22: Confirmar a configuração manual do IP....................................................50
Figura 23: Aviso sobre a obrigatoriedade do uso de pontos no endereçamento do IP.

IX
50
Figura 24: Inserção do IP desejado, valor padrão 192.168.1.1.................................50
Figura 25: Inserção da mascara com a qual se deseja trabalhar..............................51
Figura 26: Definição do Gateway................................................................................51
Figura 27: IP do servidor DNS....................................................................................51
Figura 28: Rota padrão definida.................................................................................52
Figura 29: O nome da maquina no domínio foi definido para host1, e o
arquivo /etc/host foi atualizado....................................................................................52
Figura 30: Responder Yes libera acesso via ssh neste host......................................52
Figura 31: Após tudo configurado corretamente, tem-se a seguinte tela de login.....53
Figura 32: Conteúdo do arquivo dhcpd.conf...............................................................54
Figura 33: Validar configurações................................................................................55
Figura 34: Resposta do comando ldconfig -v | less....................................................56
Figura 35: Inicialização nó secundário........................................................................57
Figura 36: O nó secundário agora faz parte do domínio, e seu nome foi definido para
host101........................................................................................................................57
Figura 37: Mensagem após executar o comando bccd-allowall.................................58
Figura 38: Resposta do comando recon -v ~/machines.............................................59

X
LISTA DE TABELAS

Tabela 1: Pacote de Programas do BCCD................................................................18


Tabela 2: Hardware do Cluster..................................................................................29
Tabela 3: Primeiro teste com tempo de aceso menor ao NFS.................................32
Tabela 4: Segundo teste com tempo de aceso padrão ao NFS...............................35
Tabela 5: Terceiro teste, poucos testes gerados pelo estouro de memória.............36

XI
RESUMO

Construir um Cluster com poucos recursos e nenhum maquinário dedicado é


um desafio para muitos pesquisadores. E ainda quando se tem a necessidade de
agregar a ferramenta MATLAB® a este ambiente distribuído. Neste trabalho foi
proposto a construção de um ambiente de processamento distribuído, sem precisar
destruir o conteúdo original de cada computador com isso torna-se possível
aproveitar laboratórios de informática que não estejam em uso. Pensando de uma
maneira expressa, para que este ambiente seja construído em poucas horas, optou-
se por um sistema operacional em Live CD com características pré-configuradas ao
desenvolvimento de um ambiente de processamento distribuído. Verifica-se ainda
que a instância de todos os nós com o nó principal durou aproximadamente 1 hora e
15 minutos. Para esta resolução são necessários conhecimentos em GNU/Linux,
MATLAB® e no paradigma da biblioteca MPI.

Palavras chave: Processamento Distribuído, Matlab, Cluster

XII
ABSTRACT

Building a Cluster with few resources and no dedicated machinery is a


challenge for many researchers. And yet when you have the need to add the tool
MATLAB® in this distributed environment. This paper has proposed the construction
of an environment of distributed processing, without destroying the original content of
each computer with it becomes possible to take advantage of computer laboratories
which are not in use. Thinking of an express way, so that this environment is built in
a few hours, has been chosen an operating system on Live CD features pre-
configured with the development of an environment of distributed processing. There
is also the instance of all us with the main node lasted about 1 hour and 15 minutes.
To this resolution are necessary expertise in Linux, MATLAB® and the paradigm of
MPI library.

Key words: Distributed Processing, Matlab, Cluster

XIII
1 INTRODUÇÃO

O empenho empregado no desenvolvimento de algoritmos e soluções que


minimizem o esforço computacional despende muito tempo e dedicação, a solução
proposta neste trabalho verifica possibilidade de agregar componentes que estão
disponíveis no meio acadêmico para construir um sistema que tenha suporte a
processamento distribuído, voltado para pesquisadores que não tenham um Cluster
de uso exclusivo e que utilizem a ferramenta MATLAB®.

Sistema verdadeiramente distribuído é definido por Tanenbaum como uma


coleção de computadores independentes que aparecem para os usuários do
sistema como um único computador (TANENBAUM, 2006). Esta definição e outros
temas relacionados são abordados, visando uma base teórica que de suporte ao
desenvolvimento deste trabalho acadêmico.

A importância deste sistema é verificada quando observamos que uma das


ferramentas utilizadas é o MATLAB®, software de analise numérica para aplicação
em inúmeras áreas do conhecimento relacionadas ao desenvolvimento
computacional.

No desenvolvimento do projeto de sistemas distribuídos, o emprego de


técnicas de Aspectos de Projetos em Sistemas Distribuídos, é de fundamental
importância, pois atende os pontos essenciais na construção de sistemas
distribuídos. A relação dos aspectos de projetos de sistemas inclui transparência,
flexibilidade, confiabilidade, performance e escalabilidade.

A documentação inclui algumas definições, como computação distribuída e


programação distribuída que são úteis para os programadores que pretendem
desenvolver programas para sistemas distribuídos.

Este trabalho inclui também estatísticas relacionadas com uso de Cluster no


mundo, que esclarecem a utilidade e mostra as áreas que estão sendo mais
empregados.

Elucida-se ainda que no desenvolver deste trabalho, o sistema implementado

XIV
funcionará apenas com algoritmos de processamento paralelo, na implementação
deste projeto encontram-se rotinas para verificação de algoritmos de processamento
distribuído, como a técnica PCAM, documentada por Ian Foster (FOSTER, 1995).

E por finalidade, este projeto visa demonstrar a utilização de Sistemas


Distribuídos para resolver problemas que exigem um grande tempo computacional,
observa-se a exigência: de um baixo custo computacional para a sua
implementação.

O objetivo maior é verificado quando o redirecionamento do esforço para


obtenção da resolução do problema, é investido no emprego da resolução dos
problemas matemáticos levantados pelo pesquisador, que pretende utilizar esta
solução.

XV
2 OBJETIVOS

2.1. Objetivo Geral

Fornecer uma solução com processamento paralelo em um ambiente


expresso, ou seja, em um ambiente que possa ser montado rapidamente para
processamento distribuído de programas criados na ferramenta de programação
MATLAB®. Utilizar-se de uma rede de computadores em um período que não esteja
em uso, sem precisar destruir o conteúdo armazenado em cada computador desta
rede para construir um Cluster.

2.2. Objetivo específico

● Verificar distribuição GNU/Linux que tenha suporte nativo a clusterização;

● Demonstrar como criar e configurar um Cluster;

● Configurar um ambiente Cluster para suportar ferramenta MATLAB®;

● Analisar algoritmo para processamento paralelo de informações;

● Testar implementação, e verificar resultado;

2.3. Organização do Trabalho

No Capítulo 2 são apresentados os fundamentos da definição de sistemas


distribuídos e a revisão teórica e conceitos necessários para realizar este trabalho.
No Capítulo 3 estão reunidos as ferramentas utilizadas. No Capítulo 4 esta
apresentado o desenvolvimento que reúne e coloca na prática os conceitos
adquiridos para desenvolver o trabalho proposto. No Capítulo 5 o ambiente de
testes é descrito para elucidar como o trabalho foi realizado. No Capítulo 6 são
apresentados os testes realizados juntamente com seus relatórios para analise.
Finalmente no Capítulo 7 serão dadas as conclusões e considerações feitas a partir
do trabalho.

XVI
3 O ESTADO DA ARTE EM SISTEMAS DISTRIBUIDOS

Universidades e centros de pesquisa estão sempre preocupados em


desenvolver sistemas distribuídos que minimizem custos financeiros e tenham baixa
complexidade de manutenção. A partir deste foco resolve-se integrar projetos de
Cluster em live CD e processamento paralelo com MATLAB®. Para estabelecer a
resolução deste problema é preciso basear-se na definição de sistemas distribuídos:

Sistemas de Computação compostos por um grande número de


processadores ligados através de uma rede de alta velocidade. Onde Tanenbaum
também define sistema distribuído da seguinte forma:

“Um sistema distribuído é uma coleção de computadores independentes que


aparecem para os usuários do sistema como um único computador (TANENBAUM,
2006).”

A implementação de sistemas distribuídos conta com um grande leque de


possibilidades, um bom exemplo é a utilização do console Playstation 3, pois
suporta comunicação em rede, dotado pelo processador Cell 1 e ainda tem um baixo
custo em relação a alternativas comerciais existentes, conforme sitio PS3GRID
(PS3GRID, 2007).

A criação de um ambiente distribuído trata-se de uma tarefa desgastante,


pois exige muito conhecimento técnico para instalar sistemas operacionais
específicos, configuração de bibliotecas especificas, configurações de segurança e
manutenção de compartilhamento de arquivos necessários.

Esta arquitetura pode ser composta por milhares de nós interligados em


barramentos de alta velocidade, onde cada nó tem um ou mais processadores com
memória local.

3.1. Aspectos de Projetos em Sistemas Distribuídos

1 Processador desenvolvido com tecnologia IBM PowerPC 3.2GHz e 8 unidades processantes


Synergistic Processing, atinge desempenho de 218 GFLOPS.

17
● Transparência - trás uma idéia do poder ver o que acontece internamente,
mas em sistemas distribuídos este termo estabelece um paradoxo. Onde a
definição está implicada no significado de transparência, no qual faz com que
se possa ver o outro lado através de uma superfície rígida, sem realmente
visualize a parte interna.

Uma forma de demonstrar este aspecto, obtem-se a partir de sistemas


distribuídos que são formados por inúmeros computadores, mas para o
usuário final este conjunto representa um único processador com elevado
poder computacional.

A transparência é classificada em diversos tipos para sistemas distribuídos:

Transparência de localização - os usuários utilizam-se dos recursos de um


sistema distribuído, mas realmente não sabem onde eles se encontram
fisicamente.

Transparência de migração - um sistema distribuído pode alterar o local onde


estão armazenados os recursos sem precisar alterar as características deste.
Desta forma o sistema distribuído pode estar otimizando a busca pelo
conteúdo.

Transparência de replicação - os objetos distribuídos podem ter milhares de


cópias, sem que o usuário saiba. Visando a redundância de recursos, para
que estejam sempre disponíveis aos usuários do sistema.

Transparência de concorrência - vários usuários acessam e atualizam um


recurso sem que um perceba a presença de outro. Isto pode ser
implementado pelas primitivas bloqueado e desbloqueado, onde um recurso
fica bloqueado para os demais enquanto apenas um usuário desbloqueado
atualiza.

Transparência de paralelismo - um dos princípios para sistemas distribuídos


esta no processo de tarefas em paralelo, pois para o usuário comum o
sistema processa seqüencialmente, mas realiza inúmeros processos em
paralelo sem que o usuário fique sabendo.

18
● Flexibilidade – o termo esta acoplado com a preocupação de que idéias que
perdurarão podem na realidade estar com os dias contados.

Tanenbaum em seu livro Sistemas Operacionais Modernos exemplifica o


estudo de caso para sistemas distribuídos, onde prevê a substituição do
kernel monolitíco, que reina absolutamente, pelo micro kernel (TANENBAUM,
1992).

Esta previsão é associada a visão do conceito de flexível, pois um projeto de


sistemas distribuídos deve ser flexível com a capacidade de suportar
alterações que não foram previstas.

● Confiabilidade – é um item complexo para ser administrado, pois associa


características como disponibilidade, segurança, integridade dos dados e
tolerância a falhas.

A característica disponibilidade pode ser assegurada com a redundância, mas


prejudica o desempenho da integridade dos dados, que precisam ficar
sempre atualizados em cada replicação. A segurança também auxilia na
redução de desempenho, para que haja um controle eficiente é preciso
verificar a integridade em cada acesso. Quando ocorrer uma falha que faça
um dos servidores parar por um período curto de tempo, este precisa, ao
retornar, restabelecer a redundância e integridade dos dados. Estes são os
requisitos mínimos para obter-se confiabilidade em sistemas distribuídos.

● Performance – Um sistema distribuído além de ser transparente, flexível e


confiável precisa ter uma performance melhor do que executasse em um
único processador. Existem formas de calcular a performance de um sistema
distribuído pelo throughput2.

Um throughput para calcular a soma de 2 números em um processador é alto


em relação a execução do mesmo calculo em um sistema distribuído, pois a
comunicação entre os processadores toma um tempo significante. A partir
desta idéia que surge o termo granularidade, este especifica o tamanho do

2 É a quantidade de dados transferidos de um lugar a outro, ou a quantidade de dados processados


em um determinado espaço de tempo

19
processo que será executado no processador remoto.

Do termo granularidade surgem duas derivações:

Granularidade Fina, onde os milhares de processos distribuídos são


pequenos, consumindo pouco tempo de processamento, e muitas vezes cria
sobrecarga na rede.

Granularidade Grossa, os processos distribuídos tomam mais tempo de


processamento em cada processador remoto.

A questão de troca de mensagens entre os processadores, pode inviabilizar


um projeto de sistemas distribuídos, pois a sobrecarga de mensagens na
rede gera um atraso no processamento, mesmo em projetos que utilizem
granularidade grossa a troca de mensagens entre os processos pode ser
elevada.

● Escalabilidade – de modo bem sucinto este aspecto se refere a capacidade


que um sistema tem de crescer com o acréscimo de novas unidades, mas em
sistemas distribuídos o crescimento pela simples agregação é uma má
estratégia, visto que, para o crescimento em escala seja viável deve existir
uma descentralização de dados e algoritmos. Caso os dados ou algoritmos
estejam centralizados em um determinado nó do sistema este pode ser
sobrecarregado de requisições.

3.2. Sistemas Distribuídos

O surgimento deu-se a partir da criação das redes de computadores,


sistemas abertos e arquiteturas multiprocessador. Para Tanenbaum, 2006 um
sistema distribuído comparado com um sistema centralizado, como mainframes,
tem-se as seguintes vantagens:

● Economia - microprocessadores tem melhor custo beneficio por


preço/desempenho. Processadores ligeiramente mais rápidos podem custar

20
mais que o dobro do preço que processadores padrão de mercado. O valor
de um processador que fosse desenvolvido para equivaler a milhares de
processadores de baixo custo, tem um custo inviável no que tange os valores
de um projeto de hardware de um processador.

● Velocidade - Um sistema distribuído pode ter mais poder computacional que


um sistema centralizado.

● Confiabilidade – Se uma máquina para de funcionar, o sistema permanece


intacto. Mais sobre este item em Aspectos de Projeto de Sistemas
Distribuídos.

● Crescimento Incremental – Sistemas distribuídos podem crescer


indefinidamente, juntamente com o seu poder computacional.

Existem formas de implementar um ambiente distribuído, uma destas está


baseada na taxonomia Múltiplas Instruções e Múltiplos Dados - MIMD, classificada
por Flynn, que estabelece a padronização para hardware de sistemas distribuídos
existentes de processamento e dados. Desta são derivados dois modelos de
arquiteturas computacionais (FLYNN, 1972).

● Multiprocessadores - Trata-se de um conjunto de processadores que


compartilham a mesma memória. Para esta arquitetura tem-se o termo
fortemente acoplado, pois o conjunto processador e memória estão em um
barramento em comum.

Multiprocessadores têm memória compartilhada entre processadores, quando


um processador A escreve um o valor X no endereçamento de memória Y, o
processador B lê o endereçamento de memória Y e encontra o valor X.

● Multicomputadores - Impõe um ambiente computacional formado por


inúmeros processadores, onde cada um tem sua própria memória local. E o
compartilhamento da memória entre os processadores é feita pela troca de
mensagens entre eles.

Este modelo recorda a arquitetura de Cluster, onde tem-se vários nodos ou


processadores interligados em rede de alta velocidade e compartilhamento de

21
memória por troca de mensagem. Cada processador tem a sua própria memória, ou
seja, para que um processador tenha acesso ao conteúdo da memória de outro
processador é preciso que: o processador A solicite via troca de mensagem o valor
de uma variável do processador B, e que este envie como resposta o valor.

3.3. Formas de Paralelismo

Lógico - Vários processos executados na forma seqüencial em um elemento


processante, onde os mesmos são divididos em partes muito pequenas e assim
toma-se um tempo de processamento pequeno e imperceptível, deste modo da-se
uma falsa impressão de paralelismo.

Físico - Apresenta inicialmente vários elementos processantes que podem


executar um processamento fragmentado em várias partes, que serão processadas
ao mesmo tempo.

3.4. Computação Distribuída

É inclusa em sistemas distribuídos, e tornou-se possível graças a


comunicação em rede, assim facilita-se o compartilhamento de informações e a
chamada remota de procedimentos.

Na computação distribuída não exige-se que todos os processos executem


realmente em paralelo, mas que cada elemento processante execute uma tarefa
independente como parte de um todo (ATTIYA, 2004).

3.5. Programação Distribuída

O Modelo de Passagem de Mensagem é provavelmente a mais usada


atualmente na programação distribuída, pois é possível criar múltiplas tarefas, com
compartilhamento de dados entre os processos. Cada tarefa é identificada por um
nome único, e as tarefas interagem com envio e recepção de mensagens conforme
o algoritmo (FOSTER, 1995).

22
3.5.1 LAM/MPI
A biblioteca LAM/MPI trata-se de uma implementação de alta qualidade da
padronização MPI3. MPI (Message Passing Interface) trata-se de uma padronização
para uma interface de troca de mensagem (MESSAGE PASSING INTERFACE
FORUM, 2007).

LAM/MPI proporciona alto desempenho em uma variedade de plataformas, e


possível utilizar a partir de pequenas plataformas com único CPU para grandes
Clusters compostos de computadores SMP4 com redes de alta velocidade, mesmo
em ambientes heterogêneos. Além de alto desempenho, LAM/MPI fornece um
número de características fundamentais para o desenvolvimento em larga escala de
aplicações (TRUSTEES OF INDIANA UNIVERSITY, 2007).

● Criação e gestão de processos

● Interação com C++

● Suporte a Threads

Uma maneira de conhecer a biblioteca LAM/MPI é pela verificação de um


código fonte com suas funções MPI básicas, vide Anexo 1.

Por padrão todas funções MPI inicializam-se pela nomenclatura “MPI_”. No


código fonte tem-se a função MPI_Init que indica o inicio do escopo da utilização da
biblioteca LAM/MPI e MPI_Finalize para indicar o fim. MPI_Comm_rank define o
identificador de cada unidade de processamento, e MPI_Get_processor_name
recupera o nome da estação de processamento.

Para dar suporte a compilação deste código é necessário a instalação da


biblioteca LAM/MPI e o compilador GCC.

mpicc -o mpiteste mpiteste.c

A execução do binário “mpiteste”, pode ser feito após o compartilhamento via

3 MPI, Message Passing Interface – Interface de Passagem de Mensagem.


4 Multi Processadores Simétricos, tecnologia que permite usar dois ou mais processadores na
mesma placa mãe, onde os mesmos compartilham recursos como memória e outros periféricos.

23
NFS5 do mesmo, e utilizar um canal seguro (SSH) para executar em todas unidades
de processamento pelo comando:

mpirun -np 5 mpiteste

3.6. CLUSTER

É conhecido como um sistema distribuído que envolve um conjunto de


unidades computacionais interligadas em rede, onde formam uma unidade de
processamento.

Os maiores computadores do mundo baseiam no modelo de Cluster segundo


o sitio TOP500, os seguimentos que utilizam Cluster na Figura 1 (TOP500, 2007).

A indústria é o ramo que mais utiliza Cluster devido as necessidades de


automação de processos de produção, pelo uso da robótica.

57%

Industria
Acadêmico
Gov erno
Outros
Pesquisa

20%
17%
3% 2%

Figura 1: Segmentos que utilizam Cluster (TOP500 Setembro de 2007)

A lista dos TOP500 também fornece em quais áreas são empregados a


utilização de Cluster, conforme Figura 2.

5 Network File System.

24
“Uma das maiores empresas do mundo, o Google tem um Cluster que não
para de crescer” (SLOAN, 2004).

Uma nomenclatura atualmente usada é a sigla HPC6, que traduzido significa


Computação de Alto Desempenho, considerado um sinônimo para Cluster (SLOAN,
2004).

250

200

150

100

50

Telecomm

WWW
Energia

Mídia
Farmácia
Pesquisa
Automotivo

Biologia

Construção

Defensa
Economia

Ambiente

Geofísica

Transporte
Pesquisa Tempo e Clima
Hardware
Serviço de Informação

Manufatura
Medicina

Software

Varejo
Não Especificado
Banco de Dados

Finanças

Serviço de Processamento Informações

Serviços

Semicondutores

Jogos
CFD
Aerospacial

Mídia Digital
Benchmarking

Figura 2: Áreas onde Cluster é aplicado (TOP500 Setembro de 2007)

Aglomerado de computadores utilizados para criar um sistema


computacional de alto desempenho, também é uma das definições para Cluster.

O Cluster é utilizado em atividades como: previsão do tempo,


processamento de imagens, desenho industrial, estrutura molecular e modelos
astronômicos. Além de atividades científicas, também encontra-se seu uso em
servidores web para balanceamento de carga, massa crítica e alta disponibilidade.

Cluster foi desenvolvido para resolver problemas complexos que exigem


horas de processamento e que possam ser divididos em módulos de processos
menores. Mas para um problema simples, pode ser resolvido com a aquisição de
um computador com poder de processamento muito elevado.
6 High Performance Computing, computadores que atinges alta performance, capacidades de
processamento em unidades de TeraFLOPS

25
● Os Cluster podem ser divididos em:

Homogêneo - Ambiente formado por unidades de processamento com


características similares, mesmo hardware e sistema operacional em todos os nós,
utilizado por quem busca alto desempenho. Utilizar computadores com mesmas
configurações físicas garante que o Cluster obterá desempenho computacional
satisfatório, pois dispensa o balanceamento de carga de processamento para
equipamentos com maior poder computacional.

Heterogêneo - As unidades de processamento que compõe este Cluster tem


suas características variadas, hardware e sistemas operacionais diferentes entre as
unidades, empregado pela necessidade de utilizar um parque de computadores em
disposição, como em laboratórios de informática.

● Classificação de Cluster:

Cluster de Alto Desempenho - Suporta um grande número de processos


simultâneos. Aplicado na resolução de modelos matemáticos complexos que geram
milhares de cálculos.

Cluster de Alta Disponibilidade (HA – High Avaibility) - Cluster que consegue


manter seu funcionamento por longo período de tempo, e que tem capacidade de se
recuperar em uma situação critica. Utilizado em sistemas comerciais, onde uma
pequena falha pode causar prejuízos elevados. A redundância é a chave para o
funcionamento deste modelo de Cluster, pois se uma unidade parar, outra pode
tomar o lugar e manter o sistema funcional.

Cluster para Balanceamento de Carga (Load Balancing) - tem a habilidade


de controlar a distribuição dos processos de forma equilibrada, exige redundância
na comunicação entre os nodos e freqüente monitoramento. Este procedimento
pode ser complexo, pois se o algoritmo de balanceamento de carga realizar uma má
distribuição então todo o sistema pode ficar comprometido. Quando executado
corretamente trás o beneficio do aproveitamento de todos os recursos de
processamento.

26
3.6.1 Desvantagens dos Clusters
Construir um Cluster com equipamentos antigos pode ser uma boa forma de
reaproveitar equipamentos, mas estes equipamentos antigos podem representar um
risco, pois além do consumo de energia elevado a capacidade de processamento de
dados pode ser muito baixa comparado com os novos processadores. Um
processador antigo AMD Athlon XP 3200+ pode consumir 40 Watts enquanto
processadores modernos como o AMD Athlon 64 3500+ consomem 3,2 Watts além
de processar muito mais dados (TOMSHARDWARE, 2008).

3.6.2 Cluster Beowulf


No ano de 1993, Donald Becker e Thomas Sterling iniciaram um projeto
para criar uma alternativa de baixo custo aos supercomputadores (BEOWULF.ORG,
2007).

Com auxilio do CESDIS7, foi possível montar o primeiro protótipo do Cluster


Beowulf, que fez bastante sucesso no meio acadêmico, era formado por 16 nodos
equipados com processadores Intel DX4 com tecnologia 486, interligados por rede
de 10Mbit/s Ethernet e sistema operacional GNU/Linux.

Resumidamente um Cluster Beowulf é um agregado de computadores


dedicados apenas para finalidade de processamento em paralelizado, que estão
interligados em rede dedicada para formar uma unidade maior de processamento.

3.6.3 Hardware do Cluster


Na arquitetura física do Cluster os itens: placa de captura de vídeo, placa
de áudio, bluetooth, IRDA8, e outros periféricos desnecessários na resolução do
problema a ser resolvido pelo Cluster, podem ser descartados.

Basicamente para se formar um nodo em um Cluster, bastam os seguintes


componentes: placa mãe, interface de rede, processador, memória principal,
dispositivo de armazenamento de dados e dispositivo de entrada (teclado) e saída
7 Center of Excellence in Space Data and Information Sciences, Centro de Excelência em Dados
Espaciais e Ciência da Informação.
8 Dispositivo Infra Vermelho.

27
(vídeo) de dados (IBM Clusters Hardware, 2007).

Alguns fatores importantes a serem verificados na aquisição de hardware


para bom desempenho do Cluster é: clock9 do processador, tamanho da memória
cache10, velocidade do barramento externo e interno, capacidade da memória
principal, tempo de acesso ao dispositivo de armazenamento, e tempo de latência
da interface de rede.

9 Freqüência do processador.
10 Memória de acesso rápido do processador.

28
4 MATERIAIS E MÉTODOS

4.1. MATLAB®

“MATLAB® é um poderoso sistema desenvolvido para trabalhar com análise


numérica envolvido em resolução de problemas científicos, de engenharia,
biomedicina e outros . O nome MATLAB® deriva de MATrix LABoratory, uma vez
que o sistema foi concebido para tornar a manipulação de matrizes particularmente
fácil” (HAHN, 2007).

O MATLAB® é um software de propriedade da MathWorks11 , desenvolvido


para ter uma linguagem script12 própria que assemelha-se com a descrição
matemática, pois facilita a manipulação de matrizes, analise numérica,
processamento de sinais e construção de gráficos (MATHWORKS, 2007).
A ferramenta MATLAB® inclui um compilador chamado de MCC, que
converte M-Files13 em código fonte C/C++ ou executáveis.

Para compilar “teste.m” em executável utiliza-se:

mcc -m -R -nojvm teste

11 Principal fornecedor de software para computação técnica baseada em modelagem. Fundada em


1984 e está sediada em Natick, Massachusetts, com escritórios e representantes em todo o
mundo.
12 Lista de comandos em determinada linguagem de alto nível, que realiza determinada tarefa de
forma automatizada.
13 Arquivo código fonte na linguagem MATLAB®, extensão “*.m”.

29
4.2. BCCD

Bootable Cluster CD (CD de Inicialização de Cluster) ou simplesmente BCCD,


é uma distribuição GNU/Linux baseada no LNX-BBC14, onde não exige que o
computador tenha disco rígido, pois executa diretamente do CD-ROM, em versão
compacta de aproximadamente 180MB. (Bootable Cluster CD, 2007).

Tabela 1: Pacote de Programas do BCCD

Nome Função
PVM 3.4.4 Cluster
X-PVM 1.2.5 Cluster
MPICH 1.2.5 Cluster
LAM-MPI 6.5.8 Cluster
C3-tools 3.1 Cluster
gcc Programação
g++g77 Programação
compilador GNU C Programação
C++ Programação
FORTRAN Programação
mpicc Programação
mpi77 Programação
mpiCC Programação
mpic++ Programação
hcc Programação
hcp Programação
hf77 Programação
ftp Auxiliar
ssh Auxiliar
rsync Auxiliar
gnupg Auxiliar
wget Auxiliar
tar Auxiliar
gpart Auxiliar
parted Auxiliar
hdparm Auxiliar
raidtools Auxiliar

Apesar da distribuição BCCD ter seu kernel15 na versão 2.4.25, é apresentado

14 Sistema operacional em Live CD baseado no GNU/Linux, utilizado para manutenção de sistemas.


15 Núcleo de um sistema operacional, que tem capacidade de alocar recursos básicos de hardware.

30
com um grande leque de pacotes para programação paralela. Tem suporte para
vários modelos de interfaces de rede, e suporte para dispositivos de
16
armazenamento USB. Implementa segurança com utilização de ssh com chaves
criptografadas e compartilhamento de pastas.

4.2.1 Obter distribuição BCCD


A aquisição do BCCD pode ser feita com um acesso pela internet17 a partir do
seu repositório. O BCCD já vem com servidor DHCP (180MB), e pelo site oficial
<http://bccd.cs.uni.edu> do BCCD o seguinte arquivo bccd-2.2.1c7.iso está
disponível para download, este arquivo é uma imagem de extensão iso18 que deve
ser gravada em CD (Index of BCCD-Images, 2007)

No Apêndice A, informações adicionais sobre o BCCD são apresentadas.

16 Secury Shell, protocolo de comunicação que permite o acesso e a execução de comandos


remotamente, em uma camada segura.
17 Rede mundial de computadores
18 Padronização ISO-9660 para arquivos imagens de discos CD e DVD.

31
5 DESENVOLVIMENTO DO TRABALHO

Inicialmente pretende-se analisar um algoritmo de processamento paralelo .


Em seguida monta-se um ambiente em Cluster para que o mesmo seja executado.
Para montar o Cluster é utilizado o BCCD (Bootable Cluster CD) que não
exige instalação em disco rígido. Com este ambiente pronto será possível adicionar
o pacote da ferramenta MATLAB® via compartilhamento NFS. Dentro deste
ambiente, pode-se desenvolver testes para apresentação posterior dos resultados
obtidos. As técnicas de análise de desempenho de processamento paralelo que
pode ser aplicada, serão: Granularidade, Latência e Fatores que limitam Speedup.

Para-se criar um ambiente em Cluster uma das exigências é: que se tenha


um comutador de alta velocidade, para que a comunicação entre os nós tenha
menos atraso possível.

5.1. Distribuição GNU/Linux

Para o desenvolvimento deste projeto, o sistema operacional GNU/Linux foi


selecionado como preferencial, pois conforme o site TOP500 dos 500
supercomputadores classificados, 426 utilizam este sistema operacional (TOP500,
2007).

O sistema operacional GNU/Linux também apresenta documentação


suficiente, e uma considerável comunidade de desenvolvedores e funciona em um
grande número de arquiteturas de hardware, além de não existir custo para sua
aquisição.

Como se pretendente utilizar uma versão de GNU/Linux que tenha suporte a


clusterização nativa, os sites LiveDistro e The LiveCD List fornecem uma lista
recente de clusters em Live CD.

Na lista destes sites pode-se observar as seguintes distribuições GNU/Linux:

● ParallelKnoppix – uma versão modificada do sistema operacional GNU/Linux

32
Knoppix Live CD, que tem suporte a vários pacotes para programação
distribuída como a biblioteca para programação distribuída LAM/MPI e o
software de computação distribuída PVM (Parallel Virtual Machine).
Apresenta uma interface amigável KDE19, inclui modulo para boot remoto, o
tamanho da distribuição é de 676MB (PARALLELKNOPPIX, 2007)

● BCCD – baseada no sistema operacional GNU/Linux LNX-BBC, apresenta


vários pacotes de programação distribuída como: LAM/MPI e PVM já
explicitados anteriormente. E também inclui como adicional a biblioteca
MPICH baseada no padrão MPI-1 e MPI-2. Tem uma interface gráfica
simples, com servidor DHCP que é um protocolo de configuração dinâmica
de terminais de computadores, o tamanho da distribuição é de 180MB
(BCCD, 2007).

● Dyne:Bolic – destinado principalmente ao desenvolvimento e processamento


de multimídia. O suporte para clusterização utiliza a ferramenta openMosix
que destina-se a execução do software Blender para renderização de video, o
tamanho da distribuição é de 683MB (DYNE:BOLIC, 2007).

● Clusterix – projeto baseado no sistema operacional GNU/Linux Morphix, que


trás uma gama de pacotes para programação distribuída, e utiliza interface
gráfica Xfce, o tamanho da distribuição é de 275MB (CLUSTERIX, 2007).

Destes sistemas operacionais o escolhido foi o BCCD, pois além de ser


voltado para treinamento e desenvolvimento de Cluster, possui a opção para que
seja carregado para a memória principal na inicialização a partir do CD-ROM, e e
tem imagem de 180MB. Das distribuições selecionadas é a mais atualizada (2006).
Para maiores informações sobre o BCCD, veja o Apêndice A.

5.1.1 Servidor Principal


Em um ambiente Cluster, para se criar o servidor principal é preciso escolher
de forma mais exigente as configurações de hardware, verifica-se a capacidade de
memória primária, capacidade de processamento e interface de rede de alta

19 Sigla inglesa para K Desktop Environment, trata-se de um ambiente gráfico

33
velocidade. Para a instância do sistema operacional em questão, verifique o
Apêndice A.

Após inicializar o servidor é preciso configurar a biblioteca LAM/MPI como


biblioteca padrão do sistema BCCD, estas instruções também estão disponíveis no
Apêndice A.

5.1.2 Nós Secundários


Qualquer outro computador que estiver na mesma rede do nó principal
poderá fazer parte do Cluster com auxilio do servidor DHCP; observa-se que o
BCCD tem um modo de inicialização que carrega todo conteúdo para a memória
principal, conforme referencias do BCCD (Apêndice A). Desta forma é possível
montar um Cluster com 20 computadores com apenas 1 CD de distribuição, para
esta operação é necessário pelo menos 512MB de memória RAM para cada
computador.

Para integrar a ferramenta MATLAB® com ambiente Cluster será preciso


gerar um pacote com os arquivos base do MATLAB®. O comando buildmcr
aplicado dentro do ambiente MATLAB® tem a capacidade de gerar um pacote
compactado com as bibliotecas comuns que servirão como referencia para executar
os binários em stand alone20 compilados no MATLAB® .

Este pacote precisa ser compartilhado para que entre todas as unidades de
processamento do Cluster. Também será necessário a definição das variáveis de
ambiente utilizadas pelo MATLAB®, pois a partir destas variáveis que pode-se
enxergar as dependências a serem sanadas para execução do binário gerado na
ferramenta MATLAB®.

5.2. MatlabMPI

É uma biblioteca criada na linguagem MATLAB® que implementa a


especificação MPI, permite que algoritmos de processamento paralelo MATLAB®
sejam executado em um Cluster. Esta biblioteca é encontrada em forma de código

20 Que funciona sozinho, dispositivo qualquer que não precisa de outros para funcionar

34
livre no sitio do projeto MatlabMPI (MATLABMPI, 2008).

Os pré requisitos para utilização do MatlabMPI são:

● Licença do MATLAB®

● Sistema de arquivos visíveis para todos os processadores

O primeiro é solucionado a partir da aquisição e instalação da ferramenta


MATLAB®, e o segundo requisito resolve-se com a utilização do sistema de
compartilhamento NFS, que torna visível para todos os nós os arquivos da
instalação do MATLAB®.

Para que o MATLAB® possa identificar e executar as funções do MatlabMPI,


é preciso adicionar o endereçamento do pacote de instalação do MatlabMPI no
arquivo pathdef.m pertencente a instalação do MATLAB®.

Variáveis de ambiente como PATH, precisam ser configuradas conforme


documentação do MatlabMPI (MATLABMPI, 2008).

5.3. Algoritmo para processamento paralelo

Ian Foster sugere que sejam realizadas algumas fases para analise de um
algoritmo, a fim de expor oportunidades de paralelização. Esta metodologia é
conhecida como PCAM 21 (FOSTER, 1995).

● Particionamento – o algoritmo deve ser quebrado em partes pequenas de


código que podem ser executados de forma independente. Na fase inicial da
metodologia será necessário analisar todo o código fonte a fim de agrupar em
grupos que possam processar em paralelo.

● Comunicação – verificar as dependências de variáveis compartilhadas e o


fluxo de dados entre processos, como variáveis globais e locais do código
original. Com uma visão prática, procura-se estabelecer um caminho de
comunicação entre os pequenos grupos de código particionado.

21 Acrônimo para Particionamento, Comunicação, Aglomeração e Mapeamento.

35
● Aglomeração – a partir do particionamento e da comunicação obtem-se
conjuntos de procedimentos que podem ser aglomerados para formar blocos
sólidos de processamento.

● Mapeamento – destina-se redirecionar onde cada processo será executado,


distribuindo cargas elevadas de processamento para nodos com maior poder
computacional.

Figura 3: Diagrama PCAM

36
No passo 1 da Figura 3 tem-se um problema hipotético para aplicação da
técnica de particionamento, esta técnica procura oportunidades de
paralelização.

No passo 2 o problema está totalmente particionado, e pronto para entrar na


fase de comunicação (passo 3) que irá verificar quais são os melhores
caminhos entre os processos para resolução do problema.

Todos os pequenos grãos de processos estão se comunicando no passo 3, e


no passo 4 tem-se um agrupamento desta comunicação que divide os grupos
que mais se comunicam.

No passo 5 a distribuição dos processos entre os processadores é


estabelecida.

5.4. Testes de Benchmark

Na tentativa de obtenção de desempenho da implementação do Cluster


conforme esta documentação, um simples código, chamado blurimage.m,
disponível em anexo na biblioteca de paralelização MatlabMPI, foi utilizado para
gerar os resultados, o programa é código fonte livre e disponibilizado pelo MIT22 sem
nenhuma garantia ou responsabilidade pelos danos que possa por ventura causar
(MATLABMPI, 2008).

Este script, blurimage.m, implementa um processamento de imagem do


tipo convolução, a imagem é quebrada em vários pedaços, em seguida distribuída
em vários processadores que basicamente executam a função conv2, função
suportada pelo MATLAB®, no pedaço de imagem recebido, e por fim retornam as
imagens processadas para o processador principal, e este retorna o tempo de
execução e o desempenho em GFlops calculado pelo algoritmo interno do próprio
código fonte. O mesmo código encontra-se na seção Anexo.

22 Massachusetts Institute of Technology.

37
6 AMBIENTE PARA TESTES

6.1. Ambiente de Processamento Distribuído

Na Figura 4 tem-se a estrutura em camadas do Cluster. Para a rede local


utilizou-se um HUB de 24 portas Fast Ethernet 3COM.

Neste modelo um servidor NFS é utilizado a fim de compartilhar os arquivos


executáveis do MATLAB, para que todos os nós visualizem-se e possam executar a
partir de um local em comum. Assim os resultados ao término da execução serão
armazenados em um local seguro.

O BCCD trás em sua distribuição um servidor DHCP pré-configurado, um


dos nodos precisa inicializar o modo servidor DHCP, o mesmo faz parte do Cluster
conforme Figura 4.

Figura 4: Estrutura em camadas do Cluster desenvolvido

38
Figura 5: passos da implementação utilizando a Técnica Desenvolvimento e Análise
Estruturada - SADT.
A Figura 5 mostra os passos da implementação do Cluster utilizando a
Técnica Desenvolvimento e Análise Estruturada – SADT, neste diagrama tem-se os
processos principais que se comunicam fornecendo instruções e possíveis resultados.

6.2.Configuração do Cluster

O tempo cronometrado para executar a configuração do Cluster é de


aproximadamente 1 hora e 15 minutos, visto que o servidor NFS já estava em
execução na espera por conexões. Onde apenas um CD da distribuição BCCD é
utilizado na realização desta tarefa, pois o sistema operacional é carregado
diretamente na memória RAM.

No total foram 11 computadores ligados em rede, 10 destes executaram o


sistema operacional BCCD, que ocupava 370MB de 512MB disponível, restou-se
aproximadamente 140MB para execução dos processos em cada nó.

39
Figura 6: Cluster pronto para testes no Labin 09 - UFT
O primeiro computador que carrega o sistema operacional BCCD precisa
inicializar o servidor DHCP, este tem acesso irrestrito aos outros computadores via
ssh, pois na inicialização as chaves de acesso remoto são compartilhadas com o
servidor DHCP.

Em seguida a partição NFS pode ser montada a partir dos nós BCCD. Duas
configurações para montar a partição remota NFS é utilizada no teste do
desempenho no Cluster.

Uma descrição detalhada do hardware que compõe o Cluster esta listada na


Tabela 2. Nenhum dos computadores, a não ser o servidor NFS, sofreu alteração
nos arquivos originais ou instalação de software adicional no disco rígido.

40
Tabela 2: Hardware do Cluster
Memória
No Máquina (MB) Processador Placa Mãe Local Função IP
1 renedet-desktop 512 AMD AthlonXP 2600+ L7VTA (KT400) LABIN 9/UFT Ubuntu/NFS 192.168.1.2
2 host1 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD/DHCP 192.168.1.1
3 host93 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.93
4 host94 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.94
5 host95 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.95
6 host96 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.96
7 host97 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.97
8 host98 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.98
9 host99 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.99
10 host100 512 P4 HT 3,0GHz IBM MT-M 8124-31P LABIN 9/UFT BCCD 192.168.1.100

A executação do script blurimage.m é exemplificada na Figura 6, do


computador renedet-desktop um acesso realizado por ssh no host1 inicializa a
execução do script.

O código fonte blurimage.m faz parte do pacote MatlabMPI, e encontra-se


disponível sobre licença de código livre pelo MIT. Uma cópia está no Anexo.

A execução desta experiência, testes e resultados foi realizada dentro do


laboratório de informática Figura 6 (Bloco III, LABIN 09) da Universidade Federal do
Tocantins, com todo o auxilio e cooperação dos funcionários e Diretor do Campus
de Palmas-TO.

41
Figura 7: Terminal de linha de comando

42
7 RESULTADOS E DISCUSSOES

7.1.Resultados adquiridos

O Figura 8 é baseado nas informações da Tabela 3, neste pode-se observar


que houve um tempo de computação menor quando o mesmo é comparado com o
Figura 8.

Para obter o tempo de acesso a partição remota NFS nos testes da Tabela
4, a montagem da partição remota NFS configurou-se para um valor menor de
tempo de acesso padrão.

Figura 8: Testes com script blurimage.m, tempo de acesso menor ao NFS, fonte Tabela 3

A utilização dessa configuração pode ser uma vantagem quando se pensa


em obter desempenho por meio deste acesso.

Os testes resultados da Figura 9 desencorajam estabelecer um acesso com


tempo de acesso padrão a um servidor de arquivos compartilhados NFS, mas

43
estabelecer um tempo de acesso muito baixo pode ocasionar os resultados como:

● Excesso de colisões entre pacotes.

● Perda de conexão com servidor NFS.

Isto foi verificado no início do processo de execução do script blurimage.m,


pois para cada nó foi preciso uma instância da ferramenta MATLAB® em cada
processo requisitado, assim gerando um atraso no acesso a pasta compartilhada.

Tabela 3: Primeiro teste com tempo de aceso menor ao NFS

44
Figura 9: Testes com script blurimage.m, tempo de acesso padrão ao NFS, fonte Tabela 4

O motivo pelo qual o teste número 34 da Tabela 3 não o suportou, é


explicitado pela Figura 9 que apresenta uma mensagem do sistema operacional que
acusou estouro de memória, pois como uma instância do MATLAB® exige muita
memória principal, no teste número 34 são instanciados 25 processos para 10
processadores, onde 5 processadores se sobrecarregaram com 3 processos
concorrentes cada. Assim os 5 processadores tiveram estouro de memória pelo
excesso de instâncias do MATLAB®. Este erro também é verificado na Tabela 5.

45
Figura 10: Ocorrência de estouro de memória por excessos de processos concorrentes,
referente ao teste 34 da Tabela 3

46
Tabela 4: Segundo teste com tempo de aceso padrão ao NFS

47
Tabela 5: Terceiro teste, poucos testes gerados pelo estouro de memória

50,000

45,000

40,000

35,000

30,000

25,000

20,000

15,000

10,000

5,000

0,000
M édia 1 M édia 2
Tempo de Execução(seg) GigaFlops(Calculado) No de Processos

Figura 11: Testes com script blurimage.m, execução local, fonte Tabela 5

Os resultados obtidos com os testes das Tabelas 5, 6 e 7 foram cruzados e


dispostos nas relações Tempo x Número de Processos e Giga Flops Calculados
x Número de Processos, conforme Figura 12 e Figura 13.

Acompanhando os resultados, nas Figuras 12 e 13, a execução local não


teve continuidade acima de 3 processos porque não foi suportado devido a limitação
de memória (512MB).

48
A execução do Cluster com tempo de acesso alterado (Tabela 5) para o
servidor NFS garantiu um desempenho melhor na comparação com os valores do
Cluster com tempo de acesso padrão (Tabela 6).

Figura 12: Relação Tempo x Número de Processos, referencia Tabelas 5, 6 e 7

Figura 13: Relação GigaFlops x Número de Processos, referencia Tabelas 5, 6 e 7

49
8 CONCLUSÃO E TRABALHOS FUTUROS

8.1. Conclusão

Neste trabalho, verificou-se possibilidade de montagem de um ambiente


expresso para processamento paralelo capaz de resolver problemas que exijam um
tempo de processamento elevado. Com exceção da ferramenta MATLAB®, todas as
ferramentas utilizadas são de código livre.

Os itens de aspectos de projeto de sistemas distribuídos que foram atendidos


são:

Transparência: Após o sistema encontrar-se totalmente configurado e pronto


para o uso, qualquer usuário que utiliza um programa de processamento paralelo a
partir do terminal principal não nota que está também utilizando outros
processadores na rede.

Flexibilidade: A idéia original que implementa este trabalho esta aberta para
mudanças de hardware e software.

Confiabilidade: Neste caso houve a preocupação com vários itens que


englobam este aspecto. Para atender a disponibilidade foi utilizado o sistema de
compartilhamento de arquivos em rede NFS. A segurança estava por conta do
protocolo ssh que foi necessário na invocação de comandos remotos. Na
integridade dos dados o controle de acesso do servidor NFS aplica regras de
acesso a faixa de IP. Caso um nó falhasse, os arquivos executáveis estavam
seguros no servidor NFS, atendendo a tolerância à falhas.

Performance: foi melhorada pelos testes realizados, onde inicialmente o


tempo de acesso ao servidor NFS era tolerável, mas com um pouco mais de
pesquisa em relação ao NFS, obteve-se melhores resultados em relação ao tempo
de acesso, melhorando o throughput do sistema distribuído. Em relação a
granularidade não houve testes, pois o objetivo explicitamente não se tratava em
criar um algoritmo, mas testa-lo.

50
Escalabilidade: por questões de disponibilidade de computadores não foram
criados outros servidores NFS para auxiliar no incremento da escala do Cluster
implementado, mas de forma prática o incremento escalar foi possível com auxilio
de um HUB.

O BCCD mostrou-se útil, pois como trata-se de uma distribuição pequena,


pôde ser carregado para a memória do computador, além de fornecer suporte para
montar um Cluster, seu tamanho limitado reduz a quantidade de drivers disponíveis.

A biblioteca MatlabMPI de programação distribuída para a ferramenta


MATLAB®, possibilitou executar processos em paralelo tanto localmente como em
processadores remotos, mas a sobrecarga da memória em cada instância do
MATLAB® inviabiliza o excesso de processos paralelos em uma unidade de
processamento. Esclarece-se que a capacidade limitada de memória nos
computadores, também impossibilitou a instância de mais que 2 processos do
MATLAB® simultâneos por processador. Observa-se que de 512MB, 370MB foram
utilizados para o sistema operacional BCCD sem memória Swap disponível, o
restante, 142MB, para instâncias dos processos. Observando ainda que, todas as
outras distribuições pesquisadas necessitavam de muito mais memória que o
sistema operacional utilizado.

8.2. Trabalhos Futuros

● Criar uma distribuição Live CD Cluster, que seja pré-configurada e tenha


suporte a uma gama de interfaces de rede, inclusive as populares redes
Wireless. Buscando uma distribuição com o menor tamanho possível, a partir
de uma distribuição GNU/Linux existente.

● Utilizar uma rede com desempenho elevado, incluindo interfaces com


desempenho superior, deste modo diminuindo o gargalo na rede de
comunicação entre os processadores.

● Testar Cluster com um caso real para obter resultados mais práticos da
viabilidade do trabalho.

51
● Implementar melhorias para o código fonte da biblioteca de programação
distribuída MatlabMPI, pois muitas funções padrão MPI não foram
implementadas.

● Comparar implementação do Cluster padrão com Cluster em Live CD.

52
REFERÊNCIAS BIBLIOGRÁFICAS

ATTIYA, Hagit. WELCH, Jennifer. Distributed Computing: Fundamentals,


Simulations, and Advanced Topics. Wiley IEEE. 2004. 432 páginas.

BCCD. Bootable Cluster CD. Desenvolvido por Paul Gray e e Kristina Wanous da
Universidade de Northern Iowa. Disponível em:. <http://bccd.cs.uni.edu>. Acesso
em: 01 de Dezembro de 2007.

BCCD. Index of /BCCD-Images. Lista de imagens em CD da distribuição BDDC.


Disponível em:. <http://bccd.cs.uni.edu/BCCD-Images>. Acesso em: 01 de
Dezembro de 2007.

BEOWULF.ORG. Beowulf Project Overview - History. Autor do artigo: Phil


Merkey, Professor de Matemática e Ciência da Computação na Universidade de
Tecnologia de Michigan. Disponível em: <http://www.beowulf.org/overview/
history.html>. Acesso em: 01 de Dezembro de 2007.

BHATTACHARYA, A; KONAR, A; MANDAL, A K. Parallel and Distributed Logic


Programming: Towards the Design of a Framework for the Next Generation
Database Machines, Holanda: Springer-Verlag. 2006.

CARVALHO, Job P; RODRIGUES, Thiago M. B. Cluster de Alto Desempenho


para Processamento Paralelo de Imagens. Trabalho de Conclusão de Curso.
Universidade Federal do Tocantins, 2007.

CLUSTERIX. Clustrix LiveCD. Disponível em:. <http://clusterix.livecd.net>. Acesso


em: 01 de Dezembro de 2007.

CLUSTERVISION. CLUSTER HARDWARE. Disponível em: <http://www.


clustervision.com/cluster_hardware.html>. Acesso em: 01 de Dezembro de 2007.

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


e Grids Computacionais. Axcel Books. 2005. 288 páginas.

DYNE:BOLIC. d y n e : b o l i c -- a free multimedia studio in a GNU/Linux live


CD. Disponível em: <http://www.dynebolic.org>. Acesso em: 01 de Dezembro de
2007.

FLYNN, M. Some Computer Organizations and Their Effectiveness, IEEE


Transactions on Computers, 1972.

FOKKINK , Wan, Modelling Distributed Systems. New York: Springer-Verlag.


2007. 151 páginas.

FOSTER, I. Designing and Building Parallel Programs: Concepts and Tools for
Parallel Programs. Número da edição. Local de Publicação: Addison-Wesley, 1995.
430 páginas.

53
GRAMACHO, Warley. Paralelização da Heurística de Otimização por Colônia de
Formigas em Ambiente de Programação por Troca de Mensagens. Trabalho de
Conclusão de Curso. Universidade Federal do Tocantins, 2006.

HAHN, Brian D; VALENTINE, Daniel T. Essential MATLAB® for Engineers and


Scientists, 3ª Edição, Butterworth-Heinemann. 2007. 448 páginas.

IBM. IBM Clusters Hardware. Disponível em:. <http://www-03.ibm.com/systems/


clusters/hardware/>. Acesso em: 01 de Dezembro de 2007.

LIVECDLIST. The LiveCD List. Disponível em:. <http://www.livecdlist.com>. Acesso


em: 01 de Dezembro de 2007.

LIVEDISTRO. Remaster : LiveCD : LiveDVD : USB Flash Drive : Build Tool


Script : ISO : Torrent : Download. Disponível em: <http://www.livedistro.org>.
Acesso em: 01 de Dezembro de 2007.

LNX-BBC. LNX-BBC GNU/Linux Bootable Business Card. Disponível em:


<http://www.lnx-bbc.com>. Acesso em: 01 de Dezembro de 2007.

MATLABMPI. Parallel Programming with MatlabMPI, Dr. Jeremy Kepner. MIT -


Massachusetts Institute of Technology. Disponível em:
<http://www.ll.mit.edu/MatlabMPI>. Acesso em: 20 de Janeiro de 2008.

MATHWORKS. The MathWorks - MATLAB and Simulink for Technical


Computing. Disponível em: <http://www.mathworks.com>. Acesso em: 01 de
Dezembro de 2007.

MESSAGE PASSING INTERFACE FORUM. MPI: A Message-Passing Interface


Standard. Disponível em: <http://www-unix.mcs.anl.gov/mpi/mpi-standard/mpi-
report-1.1/mpi-report.htm>. Acesso em: 01 de Dezembro de 2007.

PARALLELKNOPPIX. ParallelKnoppix: Create a HPC cluster in 5 minutes.


Disponível em: <http://pareto.uab.es/mcreel/ParallelKnoppix>. Acesso em: 01 de
Dezembro de 2007.

PETERSEN, W P; ARBENZ, P. Introduction to Parallel Computing. Primeira


edição. New York: Oxford University Press. 2004.

PS3GRID. PS3GRID: PLAYSTATION 3 SERVING SCIENCE. (Copyright © 2007


UPF). Disponível em:. <http://www.ps3grid.net>. Acesso em: 01 de 2007.

SLOAN, Joseph Donald. High Performance Linux Clusters with OSCAR, Rocks,
OpenMosix, and MPI. Número da edição. Local de Publicação: O'Reilly, 2004. 360
páginas.

STERLING, Tomas. Beowulf Cluster Computing with Linux. MIT Press, Outubro
2001. 496 páginas.

TANAKA, H; MURAOKA, Y. The Massively Parallel Processing System JUMP-1.


Amsterdam, Holanda: IOS Press, 1996. 246 páginas.

54
TANENBAUM, Andrew S. Distributed Operating Systems. Prentice Hall. 1995. 648
páginas.

TANENBAUM, Andrew S; STEEN, Maarten. Distributed systems : principles and


paradigms. Segunda edição. Pearson Prentice Hall, 2006. 704 páginas.

TANENBAUM, Andrew S. Sistemas Operacionais Modernos. Prentice Hall do


Brasil, 1992. 487 páginas.

TOMSHARDWARE. Tom's Hardware. Disponível em:


<http://www.tomshardware.com>. Acesso em: 07 de Julho de 2008.

TOP500. TOP500 Supercomputing Sites. Disponível em:.


<http://www.top500.org>. Acesso em: 01 de Dezembro de 2007.

TRUSTEES OF INDIANA UNIVERSITY. LAM/MPI Parallel Computing. Disponível


em:. <http://www.lam-mpi.org>. Acesso em: 01 de Dezembro de 2007.

WITTWER, T. An Introduction to Parallel Programming. Primeira edição.


Holanda: VSSD, 2006. 53 páginas.

55
APÊNDICE A
I - BCCD

Bootable Cluster CD (CD de Inicialização de Cluster) ou simplesmente BCCD,


é uma distribuição GNU/Linux baseada no LNX-BBC, não exige que o computador
tenha disco rígido, pois executa diretamente do CD-ROM, em versão compacta de
aproximadamente 180MB. (BCCD, 2007).

Apesar da distribuição BCCD ter seu kernel23 na versão 2.4.25, é apresentado


com um grande leque de pacotes para programação paralela. Tem suporte para
vários modelos de interfaces de rede, e suporte para dispositivos de
armazenamento USB.

No BCCD traz incluso implementação de segurança com utilização de ssh 24


com chaves criptografadas e compartilhamento de pastas.

O BCCD inclui as seguintes ferramentas para Cluster:

PVM 3.4.4, X-PVM 1.2.5, MPICH 1.2.5, LAM-MPI 6.5.8, C3-tools 3.1

Para programação, BCCD tem-se os seguintes compiladores:

gcc, g++, g77, compilador GNU C, C++, FORTRAN, mpicc, mpi77, mpiCC,
mpic++, hcc, hcp, hf77

Outros utilitários auxiliares do BCCD:

ftp, ssh, rsync, gnupg, wget, tar, gpart, parted, hdparm, raidtools, VNC client,
xterm

II - Adquirir BCCD

23 Núcleo de um sistema operacional, que tem capacidade de alocar recursos básicos de hardware.
24 Secury Shell, protocolo de comunicação que permite a o acesso e a execução de comandos
remotamente, em uma camada segura.

56
A aquisição do BCCD tem-se acesso pela internet a partir do seu repositório.
O BCCD já vem com servidor DHCP (180MB), e pelo site oficial do BCCD o seguinte
arquivo bccd-2.2.1c7.iso está disponível para download, este arquivo é uma
imagem de extensão iso25 que deve ser gravada em CD. (Index of /BCCD-Images,
2007)

No Linux é utilizdo o seguinte comando para gravar em CD:

cdrecord -vvv -eject dev=0,0,0 driveropts=burnfree bccd-2.2.1c7.iso

III - Inicializar BCCD

Com o CD e os computadores configurados para inicializar via CD-ROM,


pode-se iniciar o processo de criação do Cluster.

É recomendado que se utilize uma máquina mais robusta para o nó principal,


em questão de memória aproximadamente entre 512MB ou o máximo possível.

Figura 14: Tela inicial BCCD

O BCCD é uma versão Live CD GNU/Linux, ou seja, não exige instalação e


25 padronização ISO-9660 para arquivos imagens de discos CD e DVD

57
executa diretamente a partir do CD ou na memória RAM do computador(adicionar
se for utilizado o comando runinram, ver referencias BCCD), não será necessário
que a máquina tenha disco rígido, isto significa uma economia no custo de
montagem de um Cluster. Para iniciar o BCCD através do CD é necessário
configurar a BIOS da placa mãe para que inicialize através do CD-ROM.

IV - Inicializar BCCD com servidor DHCP

Na versão bccd-2.2.1c7.iso, vem incluso um servidor DHCP. Para inicializar


este servidor precisa-se passar alguns parâmetros na tela de inicialização do BCCD.

boot: 3 startdhcp

Inicializar Servidor DHCP

Resolução da tela (o parâmetro 3 equivale a resolução 800x600)

Existem outros parâmetros que fazem parte desta pré-configuração, verifique


os referencias BCCD. Por exemplo ao utilizar o parâmetro runinram todo conteúdo
do CD é carregado para a memória, isto será interessante quando tem-se muita
memória.

Nesta solução utilizaremos parâmetros 3 startdhcp no nó principal, assim


como no exemplo. Nos outros nós que farão parte do Cluster, será utilizado o
comando de inicialização 1 nodemode.

A partir deste ponto, para ajudar no entendimento de como configurar o


servidor DHCP utiliza-se o BCCD, as figuras estão ordenadas em seqüencia de
aparecimento conforme o sistema é configurado, esta ordem pode variar em
distribuições futuras.

58
V - Definir Senha

Ao inicializar o servidor tem-se que colocar uma senha para o usuário padrão
bccd, esta senha terá que ter pelo menos 5 caracteres ou no máximo 8, conforme
Figura 15.

Figura 15: Inserir senha padrão para usuário bccd

Depois da senha, algumas telas de boas vindas são apresentadas, e em


seguida será preciso selecionar algumas opções conforme a seqüência de figuras.
A partir deste ponto, Figura 16, o comando trivial-net-setup é executado
automaticamente, e irá auxiliar na configuração da placa de rede.

Figura 16: Configuração da placa de rede

Na Figura 17 tem-se uma previa da placa de rede que foi identificada. E na


Figura 18 o driver26 pode ser escolhido automaticamente ao selecionar a opção
auto, ou ao utilizar as setas seleciona-se o driver.

26Camada entre sistema operacional e o dispositivo de hardware.

59
Figura 17: Aviso: é necessário que o computador tenha pelo menos uma interface de rede

Figura 18: Drivers disponíveis para a interface de rede

60
Figura 19: Interface de rede
configurada corretamente

Figura 20: Mensagem padrão, aviso que


interface de rede eth0 será configurada

Na Figura 21, é necessário escolher a opção No, pois deste modo será
possível definir um IP estático para o nó principal.

Figura 21: Configurar automaticamente via servidor DHCP?


Para definir o IP desejado, é necessário marcar a opção Yes conforme
Figura 22.

61
Figura 22: Confirmar a configuração manual do IP

Figura 23: Aviso sobre a obrigatoriedade do uso de pontos no endereçamento do IP

Figura 24: Inserção do IP desejado, valor


padrão 192.168.1.1

62
Figura 25: Inserção da mascara com a qual se
deseja trabalhar

Figura 26: Definição do Gateway

Figura 27: IP do servidor DNS

63
Figura 28: Rota padrão definida

Figura 29: O nome da maquina no domínio foi


definido para host1, e o arquivo /etc/host foi
atualizado

Figura 30: Responder Yes libera acesso via ssh neste host

Para fazer login no sistema utilize usuário igual a bccd e a senha que foi
definida. O acesso como super usuário é feito com usuário root e a senha letmein,
estes valores são padrões do BCCD.

VI - Configurar IP do servidor DHCP

64
Depois que o servidor DHCP for inicializado, para mudar o IP é necessário
autenticar-se como super usuário com o seguinte comando no console do BCCD: su
em seguida insira a senha letmein. E com o poder administrativo de super usuário
será possível alterar o arquivo dhcpd.conf de configuração do servidor DHCP que
está na pasta /etc, utilize o editor de texto pico, desta seguinte maneira:

pico /etc/dhcpd.conf

Verifica-se na Figura 32 o conteúdo do arquivo dhcpd.conf, na linha em que


se encontra shared-network, em seguida na variável shared onde houver
192.168.1.0 muda-se para o IP A.B.C.D pretendido. É possível alterar a mascara do
endereço IP padrão a ser adotada alterar a variável netmask.

Figura 31: Após tudo configurado corretamente, tem-se a seguinte tela de login

Também é necessário que seja configurado o intervalo de IP que o servidor


irá utilizar. Na linha que tem pool encontra-se a variável range e os valores desta
estão os intervalos padrões de 192.168.1.2 até 192.168.1.101. Para que ocorra uma
boa configuração na rede deste Cluster o IP do nó principal não pode fazer parte

65
deste intervalo.

Figura 32: Conteúdo do arquivo dhcpd.conf

VII - Configurar LAM-MPI

Para configurar a utilização da biblioteca LAM-MPI, edita-se o arquivo bashrc,


com o comando pico ~/.bashrc, não é necessário a autenticação com super
usuário.

Agora com o arquivo bashrc aberto, localiza-se a seguinte linha:

export PATH=$PATH:/mpich/bin

66
Esta linha precisa ser mudada para:

export PATH=/lam-mpi/bin:$PATH

Para salvar com o editor pico, utiliza-se CTRL+o, e CTRL+x para sair.

A validação das configurações estarão definidas ao se executar o comando:

. ~/.bashrc, conforme Figura 33.

Figura 33: Validar configurações

E com o comando which mpirun, podemos verificar se a configurações


foram executadas com sucesso, pois se a resposta for /lam-mpi/bin/mpirun obteve-
se sucesso ao definir valor da variável de ambiente PATH.

Para utilizar a biblioteca LAM-MPI é necessário que o sistema de arquivo das


bibliotecas estejam carregadas, para isso autentica-se como super usuário e
executa-se o comando ldconfig -v | less no console.

Após este comando a seguinte tela com as novas configurações será


mostrada na Figura 35. Utiliza-se Q para sair.

Na Figura 30 o importante é o referencial descrito abaixo, que define a


alteração do sistema de arquivos da biblioteca LAM-MPI.

/lam-mpi/lib:

libmpi.so.0 -> libmpi.so.0.0.0

liblammpi++.so.0 -> liblammpi++.so.0.0.0

liblamf77mpi.so.0 -> liblamf77mpi.so.0.0.0

liblam.so.0 -> liblam.so.0.0.0

67
A partir deste ponto a biblioteca LAM-MPI esta pronta para ser utilizada.

Figura 34: Resposta do comando ldconfig -v | less

VIII - Incluir nó secundário no Cluster BCCD

Para inicializar o nó secundário utiliza-se na tela de inicialização do BCCD


como parâmetro 1 nodemode, conforme Figura 25.

A seqüencia de inicialização é praticamente idêntica ao modo de inicialização


do nó principal.

Com o parâmetro nodemode tem-se o cliente de servidor DHCP pronto para


ser executado. A seqüencia de inicialização é similar ao do servidor DHCP.

68
Figura 35: Inicialização nó secundário

Após inserir o comando na tela de inicialização, o próximo passo é definir a


senha padrão ver Figura 15.

Na Figura 16 até até Figura 19 tem-se a configuração do driver da placa de


rede como foi descrito na inicialização do servidor DHCP.

Com um servidor DHCP em execução em rede local, é possível selecionar a


opção Yes na Figura 21, pois deste modo o nó secundário detectará o servidor
DHCP. Se tudo ocorrer corretamente a mensagem será apresentada na Figura 36.

Figura 36: O nó secundário agora faz parte do domínio,


e seu nome foi definido para host101

69
Para que o nó principal possa visualizar o nó secundário, será preciso fazer o
login com usuário padrão bccd, e aceitar a opção Yes na tela (Figura 30) que será
apresentada. Também será necessário executar o comando bccd-allowall para
aceitar automaticamente todas as chaves ssh publicas, isto é importante para que
todos os nodos se comuniquem livremente com segurança ao utilizar o protocolo
ssh.

Figura 37: Mensagem após executar o comando bccd-allowall

A partir deste ponto o nó secundário já tem um IP definido, e o mesmo


poderá ser acessado do nó principal via ssh. Mas antes é preciso definir a biblioteca
LAM-MPI como padrão, verificar tópico Configurar LAM-MPI.

IX - Verificar conexão do nodo principal com nodos secundários

O pré-requisito para que o nó principal tenha controle dos nodos secundários


é importante que todos os nodos estejam configurados com a biblioteca LAM-MPI
por padrão. Em seguida o comando bccd-allowall precisa ser executado em todos
os nodos, e a opção Yes deve ser aceita, assim permite acesso via ssh a todos os
nodos.

No nodo principal executa-se no console o comando bccd-snarfhosts, isto


para que todos os nodos sejam listados em ~/machines. A visualização dos nodos
se faz com o comando more ~/machines no console.

E com o comando recon -v ~/machines, é possível verificar se a

70
comunicação entre os nodos foi inicializada.

Figura 38: Resposta do comando recon -v ~/machines


Outro comando importante para que a rede de Cluster funcione é lamboot -v
~/machines, este trata-se de um teste para verificar se todos os nodos estão
disponíveis para receber chamadas remotas.

X - Referências BCCD

Parâmetros de inicialização
Primeiro parâmetro refere-se a resolução da tela:

1 framebuffer desativado, sem interface gráfica X11

2 para 640x480

3 para 800x600

4 para 1024x768

5 para 1280x1024

71
Segundo parâmetro referente as pré-configurações:

automode – modo automático para criar Cluster. Todos os nós


precisam inicializar por este modo, mas desativa a personalização de configurações
mais especificas.

nohotplug – desabilita suporte HotPlug para dispositivos USB, PCI e


firewire em computadores que tem esta funcionalidade.

quickboot – modo de inicialização que não exige entrada de


parâmetros na configuração de rede, este modo é apenas para teste.

runinram – carrega toda informação do CD para a memória RAM. Tem


a necessidade de pelo menos 512MB de RAM para funcionar. Este modo de
inicialização é também utilizado quando necessário liberar o Drive de CD-ROM ou
para utilizar a mesma mídia de CD na inicialização de outros nós.

startdhcp – utilizado para criar um servidor DHCP.

nodemoode – este modo atende como cliente de um servidor DHCP,


define automaticamente o nome e o IP do nó.

pxeserver – trata-se de um servidor de boot remoto, ou seja, uma


inicialização remota dos nós pela placa de rede, para este modo é necessário
passar os parâmetros startdahcp e tftpboot, devido a necessidade de um servidor
DHCP e o compartilhamento da imagem do BCCD na rede via TFTP. Exige-se
também neste uma versão servidora BCCD-PXE para o funcionamento.

tftpboot – inicializa automaticamente o servidor de TFTP para


compartilhar a imagem do BCCD na rede, é utilizado com pxeserver.

72
ANEXOS

1 Código fonte C e MPI

#include <mpi.h>
#include <stdlib.h>
using namespace std;
main( int argc, char **argv){
int myrank;
int len;

char name [MPI_MAX_PROCESSOR_NAME];

MPI_Init(&argc, &argv);
MPI_Comm_rank( MPI_COMM_WORLD, &myrank);
MPI_Get_processor_name( name, &len );

cout << name <<": hello from "<< myrank <<"\n";


MPI_Finalize();
}

2 Código fonte blurimage.m

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This script implements a basic image convolution
% across multiple processors.
% To run, start Matlab and type:
%
% eval( MPI_Run('blurimage',2,{}) );
%
% Or, to run a different machine type:
%
% eval( MPI_Run('blurimage',2,{'machine1' 'machine2'}) );
%
% Output will be piped into to
%
% MatMPI/blurimage.0.out
% MatMPI/blurimage.1.out
% ...
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% MatlabMPI
% Dr. Jeremy Kepner
% MIT Lincoln Laboratoy
% kepner@ll.mit.edu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Initialize MPI.

73
MPI_Init;

% Create communicator.
comm = MPI_COMM_WORLD;

% Modify common directory from default for better performance.


% comm = MatMPI_Comm_dir(comm,'/tmp');
% comm = MatMPI_Comm_dir(comm,'/gigabit/node-a');

% Get size and rank.


comm_size = MPI_Comm_size(comm);
my_rank = MPI_Comm_rank(comm);

% Do a synchronized start.
starter_rank = 0;
delay = 30; % Seconds
synch_start(comm,starter_rank,delay);

% Set image size (use powers of 2).


% n_image_x = 2.^17;
% n_image_x = 2.^12;
n_image_x = 2.^(10+1)*comm_size;
n_image_y = 2.^10;

% Number of points to put in each sub-image.


n_point = 100;

% Set filter size (use powers of 2).


n_filter_x = 2.^5;
n_filter_y = 2.^5;

% Set the number of times to filter.


n_trial = 2;

% Computer number of operations.


total_ops = 2.*n_trial*n_filter_x*n_filter_y*n_image_x*n_image_y;

if(rem(n_image_x,comm_size) ~= 0)
disp('ERROR: processors need to evenly divide image');
exit;
end

% Print rank.
disp(['my_rank: ',num2str(my_rank)]);

% Set who is source and who is destination.


left = my_rank - 1;
if (left < 0)
left = comm_size - 1;
end
right = my_rank + 1;
if (right >= comm_size)
right = 0;
end

% Create a unique tag id for this message (very important in Matlab MPI!).
tag = 1;

74
% Create timing matrices.
start_time = zeros(n_trial);
end_time = start_time;

% Get a zero clock.


zero_clock = clock;

% Compute sub_images for each processor.


n_sub_image_x = n_image_x./comm_size;
n_sub_image_y = n_image_y;

% Create starting image and working images..


sub_image0 = rand(n_sub_image_x,n_sub_image_y).^10;
sub_image = sub_image0;
work_image = zeros(n_sub_image_x+n_filter_x,n_sub_image_y+n_filter_y);

% Create kernel.
x_shape = sin(pi.*(0:(n_filter_x-1))./(n_filter_x-1)).^2;
y_shape = sin(pi.*(0:(n_filter_y-1))./(n_filter_y-1)).^2;
kernel = x_shape.' * y_shape;

% Create box indices.


lboxw = [1,n_filter_x/2,1,n_sub_image_y];
cboxw = [n_filter_x/2+1,n_filter_x/2+n_sub_image_x,1,n_sub_image_y];
rboxw = [n_filter_x/2+n_sub_image_x+1,n_sub_image_x+n_filter_x,
1,n_sub_image_y];

lboxi = [1,n_filter_x/2,1,n_sub_image_y];
rboxi = [n_sub_image_x-n_filter_x/2+1,n_sub_image_x,1,n_sub_image_y];

% Set start time.


start_time = etime(clock,zero_clock);

% Loop over each trial.


for i_trial = 1:n_trial

% Copy center sub_image into work_image.


work_image(cboxw(1):cboxw(2),cboxw(3):cboxw(4)) = sub_image;

if (comm_size > 1)
% Create message tag.
ltag = 2.*i_trial;
rtag = 2.*i_trial+1;

% Send left sub-image.


l_sub_image = sub_image(lboxi(1):lboxi(2),lboxi(3):lboxi(4));
MPI_Send( left, ltag, comm, l_sub_image );

% Receive right padding.


r_pad = MPI_Recv( right, ltag, comm );
work_image(rboxw(1):rboxw(2),rboxw(3):rboxw(4)) = r_pad;

% Send right sub-image.


r_sub_image = sub_image(rboxi(1):rboxi(2),rboxi(3):rboxi(4));
MPI_Send( right, rtag, comm, r_sub_image );

% Receive left padding.

75
l_pad = MPI_Recv( left, rtag, comm );
work_image(lboxw(1):lboxw(2),lboxw(3):lboxw(4)) = l_pad;

end

% Compute convolution.
work_image = conv2(work_image,kernel,'same');
% Extract sub_image.
sub_image = work_image(cboxw(1):cboxw(2),cboxw(3):cboxw(4));
end

% Get end time for the this message.


end_time = etime(clock,zero_clock);

% Print the results.


total_time = end_time - start_time

% Print compute performance.


total_ops;
gigaflops = total_ops / total_time / 1.e9;
disp(['GigaFlops: ',num2str(gigaflops)]);

% Write data to a file.


outfile = ['blurimage.',num2str(my_rank),'.mat'];
%
save(outfile,'start_time','end_time','total_time','kernel','sub_image','wor
k_image');
% save(outfile,'start_time','end_time','total_time','kernel');

% Finalize Matlab MPI.


MPI_Finalize;
disp('SUCCESS');

% Don't exist if we are the host.


if (my_rank ~= MatMPI_Host_rank(comm))
exit;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Copyright 2002 Massachusetts Institute of Technology
%
% Permission is herby granted, without payment, to copy, modify, display
% and distribute this software and its documentation, if any, for any
% purpose, provided that the above copyright notices and the following
% three paragraphs appear in all copies of this software. Use of this
% software constitutes acceptance of these terms and conditions.
%
% IN NO EVENT SHALL MIT BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
% SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
% THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF MIT HAS BEEN ADVISED OF THE
% POSSIBILITY OF SUCH DAMAGE.
%
% MIT SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTIES INCLUDING,
% BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
% FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
%

76
% THIS SOFTWARE IS PROVIDED "AS IS," MIT HAS NO OBLIGATION TO PROVIDE
% MAINTENANCE, SUPPORT, UPDATE, ENHANCEMENTS, OR MODIFICATIONS.

77

Você também pode gostar