IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

43
INSTITUTO DE ESTUDOS SUPERIORES DA AMAZÔNIA CURSO DE ENGENHARIA DA COMPUTAÇÃO ROBSON KAWASAKI IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF BELÉM 2005

description

Neste trabalho é apresentado um estudo sobre imagens fractais usando um ClusterBeowulf. Para isto, usou-se o sistema de PVM (Máquina Virtual Paralela). Dessa forma, otrabalho trata da descrição de tópicos tais como: Geometria dos Fractais; paralelização detarefas usando a arquitetura de Cluster do tipo Beowulf e da otimização da geração de imagensusando sistema distribuído.

Transcript of IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Page 1: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

INSTITUTO DE ESTUDOS SUPERIORES DA AMAZÔNIACURSO DE ENGENHARIA DA COMPUTAÇÃO

ROBSON KAWASAKI

IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

BELÉM2005

Page 2: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

NSTITUTO DE ESTUDOS SUPERIORES DA AMAZÔNIACURSO DE ENGENHARIA DA COMPUTAÇÃO

ROBSON KAWASAKI

IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Monografia de conclusão de Curso de

Graduação em Engenharia da Computação

apresentado ao Instituto de Estudos

Superiores da Amazônia, como requisito

parcial para obtenção do grau de

Engenheira da Computação sob orientação

do Prof. Dr. José Felipe de Almeida.

BELÉM2005

Page 3: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

INSTITUTO DE ESTUDOS SUPERIORES DA AMAZÔNIACURSO DE ENGENHARIA DA COMPUTAÇÃO

ROBSON KAWASAKI

IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Esta monografia foi julgada adequada para obtenção do título de Engenheira da Computação, e

aprovada na sua forma final pelo Instituto de Estudos Superiores da Amazônia.

Data: ___/___/___

Conceito: ________

_______________________________________Prof. Dr. José Felipe de Almeida.

Orientador

_______________________________________Prof. Dr. Alex Sandre Guedes Alves

Membro

_______________________________________Prof. M.Sc. Elionai Gomes de Almeida Sobrinho

Suplente

BELÉM2005

Page 4: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

RESUMO

Neste trabalho é apresentado um estudo sobre imagens fractais usando um Cluster

Beowulf. Para isto, usou-se o sistema de PVM (Máquina Virtual Paralela). Dessa forma, o

trabalho trata da descrição de tópicos tais como: Geometria dos Fractais; paralelização de

tarefas usando a arquitetura de Cluster do tipo Beowulf e da otimização da geração de imagens

usando sistema distribuído.

Palavras-chave: Geometria dos Fractais, Cluster BEOWULF, Processamento paralelo, Sistema

distribuído, PVM.

Page 5: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

ABSTRACT

In this work a study on fractals images is presented by Beowulf Cluster. For this, the

PVM (Parallel Virtual Machine) system is used. In order, the work deals to description such as:

Geometry of the Fractals; parallel processing in Beowulf Cluster and the images optimization

using a distributed system.

Keywords: Fractals geometry, Beowulf Cluster, Parallel processing, Distributed system, PVM.

Page 6: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Este trabalho é dedicado à minha esposa, meu pai, minha mãe, meus irmãos e familiares.

Page 7: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

AGRADECIMENTOS

Primeiramente agradeço de coração à minha esposa por sempre ter me dado força, ajuda e motivação durante minha graduação. Agradeço também ao meu pai, minha mãe e meus irmãos, que me ajudaram em todos os sentidos da melhor forma possível. E para finalizar, agradeço aos amigos que me ajudaram no meu trabalho de conclusão: Thiago Coqueiro, Otávio Chase e ao Dr. José Felipe de Almeida, que por nenhum motivo deixaria de citar seu nome, pois no momento em que mais precisei, ele me ajudou e ainda continua me ajudando. Agradecido eternamente.

Page 8: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

LISTA DE FIGURAS

Figura 1 Modelo da geometria dos fractais visto na natureza...................................10

Figura 2 Cluster Beowulf “IESAM MASTER”...............................................................13

Figura 3 Conjunto de Mandelbrot.................................................................................16

Figura 4 Conjunto de Mandelbrot.................................................................................17

Figura 5 Conjunto de Mandelbrot.................................................................................18

Figura 6 Conjunto de Mandelbrot.................................................................................19

Figura 7 Conjunto de Mandelbrot referente à Figura 6...............................................20

Page 9: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

SUMÁRIO

Figura 1 Modelo da geometria dos fractais visto na natureza...................................10 ..................................................................................... 8 Figura 2 Cluster Beowulf “IESAM MASTER”...............................................................13 ....................................................... 8 Figura 3 Conjunto de Mandelbrot.................................................................................16 .................................. 8 Figura 4 Conjunto de Mandelbrot.................................................................................17 .................................. 8 Figura 5 Conjunto de Mandelbrot.................................................................................18 .................................. 8 Figura 6 Conjunto de Mandelbrot.................................................................................19 .................................. 8 Figura 7 Conjunto de Mandelbrot referente à Figura 6...............................................20 ...................................................................................... 8 1 INTRODUÇÃO ................................................................................................................ 9 CAPÍTULO 2 – GEOMETRIA DOS FRACTAIS .............................................................. 10 CAPITULO 3 – CLUSTER BEOWULF ............................................................................ 12

3.1 MONTAGEM FÍSICA E FUNCIONAMENTO DO CLUSTER BEOWULF: “IESAM MASTER” .................................................................................................................................. 12

CAPITULO 4 – PROGRAMAÇÃO PARALELA E PVM ................................................. 14 4.1 PROGRAMAÇÃO PARALELA ......................................................................................... 14 4.2 PVM ...................................................................................................................................... 14

CAPITULO 5 – PROCESSO DE IMAGEM FRACTAL ................................................... 16 6 CONSIDERAÇÕES FINAIS .......................................................................................... 21 REFERÊNCIAS ................................................................................................................ 22 ANEXOS .......................................................................................................................... 23

Page 10: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 11: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

1 INTRODUÇÃO

O processamento paralelo é um método de tecnologias da programação que

permite resolver problemas complexos dividindo-o em pequenas tarefas. A utilização

deste método na computação científica oferece recursos na diminuição do tempo de

processamento e a redução de acúmulo de memória. Um exemplo disso é o

processamento digital de imagens. Dessa forma, podem-se obter resultados em

aplicações complexas como no caso de imagens geradas a partir da geometria de

fractais.

O objetivo deste trabalho é apresentar um estudo sobre imagens geradas a partir

da geometria dos fractais utilizando processamento paralelo. Também é feita uma

abordagem sobre a arquitetura de cluster Beowulf tendo como sistema gerenciador de

rede a biblioteca PVM. Dessa forma, o trabalho trata da descrição de tópicos tais como:

Geometria dos Fractais; paralelização de tarefas usando a arquitetura de Cluster do tipo

Beowulf e da otimização da geração de imagens usando sistema distribuído.

Page 12: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

CAPÍTULO 2 – GEOMETRIA DOS FRACTAIS

Durante séculos, os objetos e os conceitos da geometria euclidiana foram

considerados como os que melhor descreviam o mundo em que vivemos. A descoberta

de geometrias não-euclidianas introduziu novos objetos que representam certos

fenômenos do Universo, tal como se passou com os fractais (MANDELBROT, 1977).

Assim, considera-se hoje que tais objetos retratam formas e fenômenos da Natureza.

A palavra fractal vem do latim fractus. O verbo em latim correspondente é

frangere, que significa quebrar, criar fragmentos irregulares. Além de significar quebrado

ou partido, fractus também significa irregular. Um estudo baseado em definições, modelos

e formas geométricas com essa idealização foi proposto e investigado por Benoît

Mandelbrot (MANDELBROT, 1977). Nesta teoria, fractais são formas geométricas

abstratas, com padrões complexos que se repetem infinitamente, mesmo limitados a uma

área finita. Em sua proposição, Mandelbrot constatou ainda que todas estas formas e

padrões possuíam algumas características comuns e que havia uma curiosa e

interessante relação entre estes objetos e aqueles encontrados na natureza (Figura 1).

Além de se apresentarem como formas geométricas, os fractais representam funções

reais ou complexas e apresentam determinadas características: auto-semelhança, a

dimensionalidade e a complexidade infinita. Com esta geometria, um fractal é gerado a

partir de uma fórmula matemática, muitas vezes simples, mas que aplicada de forma

iterativa, produz resultados em diversas aplicações.

Figura 1 - Modelo da geometria dos fractais encontrado na natureza.Fonte: (TEORIA dos fractais, 2005).

10

Page 13: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Os fractais deram origem a um novo ramo da matemática, muitas vezes designado

como a geometria da natureza (MANDELBROT, 1982). As formas complexas e caóticas

dos fractais descrevem alguns fenômenos naturais, como os sismos, a estrutura da casca

de árvores, a forma de algumas raízes, a linha de costa marítima, as nuvens, entre outros.

Este novo tipo de geometria aplica-se na astronomia, na meteorologia, na economia e na

complexidade da teoria de antenas, por exemplo, (GIANVITTORIO, 2002).

11

Page 14: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

CAPITULO 3 – CLUSTER BEOWULF

O Beowulf (STERLING, 1995) é um cluster de alto desempenho, que foi iniciado

pela NASA em 1994, no Goddard Space Flight Center. Como relato histórico, tem-se que

este centro de pesquisa precisava de um supercomputador que processasse dados na

ordem de Gigaflops (bilhões de operações por pontos flutuantes por segundo). Esta

necessidade surgiu devido ao tratamento de informações conseguidas por satélites.

Porém o custo desse supercomputador (multiprocessado) era em torno de um milhão de

dólares, o que era considerado um custo muito alto para ser usado somente por um grupo

de pesquisadores, na época dois pesquisadores Thomas Sterling e Donald Becker. Em

função disso, decidiram construir um sistema que pudesse processar dados de maneira

semelhante a um supercomputador multiprocessado, mas com um custo financeiro

extremamente baixo. Assim resolveram interligar computadores pessoais (Intel 486) entre

si, utilizando uma rede do tipo Ethernet e usando o sistema operacional Linux. A partir

desse agrupamento de computadores, foi criado então um cluster denominado de

Beowulf.

3.1 MONTAGEM FÍSICA E FUNCIONAMENTO DO CLUSTER BEOWULF: “IESAM MASTER”

O Cluster utilizado, neste trabalho, foi montado no laboratório de Automação e

Controle no IESAM (Instituto de Estudos Superiores da Amazônia). Esse modelo de

arquitetura física de Cluster Beowulf foi denominado IESAM MASTER. O modelo do

Cluster IESAM MASTER é composto de um computador controlador, o qual tem a função

de servidor, e seis nós ligados ao servidor, onde todos possuem a mesma configuração

de máquina e são interconectados em rede, isto é feito através de um switch com

velocidade de 100 Mbits/seg. A Figura 2 ilustra o tipo de arquitetura do IESAM MASTER.

A função do servidor ou controlador é repartir uma tarefa complexa em partes

proporcionais e relativas ao número de nós presentes. Isto é feito para que possam

distribuir cada tarefa a cada nó correspondente. Desse modo, esses nós podem

processar sua parte de maneira sincronizada e simultânea. Em seguida, o resultado do

processamento de todos os nós, é entregue para o computador mestre (servidor) o qual

reunirá esses dados (resultados), transformando-os em informações que serão exibidas

para o usuário.

12

Page 15: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Figura 2 - Cluster Beowulf “IESAM MASTER”.Fonte: (arquivo do autor, 2005).

13

Page 16: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

CAPITULO 4 – PROGRAMAÇÃO PARALELA E PVM

4.1 PROGRAMAÇÃO PARALELA

A Programação Paralela tem como objetivo transformar grandes algoritmos

complexos em pequenas tarefas que possam ser executadas simultaneamente por vários

processadores, reduzindo assim o tempo de processamento (Wall Time Clock). Na

programação paralela, os processos não são realizados de forma sequencial. Muito pelo

contrário, como o próprio nome sugere, ele é executado paralelamente. A paralelização

dos códigos é uma técnica muito comum para escalonar tais processos. Ela consiste em

transformar um programa sequencial em paralelo para que partes do código possam ser

executadas independentemente. Mas leva-se um grande tempo para analisar o código a

ser paralelizado, recodificar a aplicação, depurar e encontrar a melhor solução para a

resolução do problema. Faz-se necessário, em alguns casos, mudar o próprio algoritmo

para que a paralelização do código seja bem sucedida.

4.2 PVM

O Sistema PVM foi especialmente desenhado para interligar recursos

computacionais em rede. Isso fornece ao usuário uma plataforma paralela para

desenvolver aplicações. Esta configuração de rede independentemente da localização, da

quantidade ou das diferenças entre os computadores interligados. No PVM, a

programação é feita de tal forma que se pode usar um conjunto heterogêneo de

computadores, de um modo uniforme como se tratasse de um único computador paralelo.

Dessa forma, esse sistema é instalado para criar uma máquina paralela virtual cuja

finalidade é inspecionar a execução de um processo, manipulado pelo usuário, o qual

contém uma aplicação PVM. Isto é feito, por uma biblioteca de rotinas. A biblioteca PVM

contém rotinas que devem ser acessadas pelo usuário para codificação, envio e

recebimento de mensagem. Também, a criação e eliminação de processos, sincronização

de tarefas e modificações de máquina virtual. Dessa forma, todas as aplicações devem

corresponder a essa biblioteca para que o ambiente paralelo criado pelo PVM seja

utilizado.

O Cluster PVM adquire as características SSI (Single System Image) onde todos

os nós do cluster se tornam uma única máquina virtual. Para que haja a comunicação

entre os nós, em cada um haverá um processo chamado pvmd3 que efetua a troca de

14

Page 17: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

mensagens entre os nós. O diretório em comum e especifico entre as máquinas da rede

no cluster IESAM MASTER é “/usr/share/pvm3/bin/LINUXI386”. No servidor do cluster

deve estar o programa mestre e escravo, e nos nós escravos devem estar residentes os

programas escravos.

15

Page 18: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

CAPITULO 5 – PROCESSO DE IMAGEM FRACTAL

Neste trabalho foi feita a execução de um código fonte para gerar uma imagem de

geometria de Fractais em ambiente PVM. Como exemplo, usou-se o conjunto de

Mandelbrot mostrado na Figura 3.

Figura 3 – Conjunto de Mandelbrot.Fonte: (TEORIA dos fractais, 2005).

O algoritmo para geração dessa imagem foi implementado em Linguagem C e

executado a partir de um arquivo PVM. Dessa forma, a seqüência a ser algoritmizada é

descrita por: o conjunto de Mandelbrot é obtido por um processo iterativo de números

complexos do tipo a + jb. Esse processo é feito repetidamente e se obtém uma seqüência

de números Zn. O módulo |Zn| é a distância ao centro zero do plano complexo. Esta

distância pode se manter finita ou tender para infinito. Esta fronteira irá delimitar a imagem

a ser criada. Assim, o processo iterativo é dado por:

Zn + 1 = Zn + w

Na qual w é um número complexo constante.

A partir da observação do comportamento de Zn +1, ou seja, do seu módulo |

Zn+1|, temos as seguintes possibilidades:

|Zn| se mantém sempre finito - Atribui-se uma cor preta a z.

16

Page 19: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

|Zn| tende para infinito - Atribuem-se diferentes cores à z, dependendo do

comportamento de |Zn|. A classificação é definida por quem desenha o fractal. Um ponto

é marcado neste fractal não quando satisfaz a equação, mas sim segundo certo tipo de

comportamento. Um dos comportamentos possíveis pode ser um estado estacionário;

outro pode ser a convergência para uma repetição periódica de estados; ou ainda pode

ser uma corrida descontrolada para o infinito. As imagens mostradas nas Figuras 4, 5, 6 e

7, visualizam vários processos gerados ao conjunto de Mandelbrot.

Figura 4 – Conjunto de Mandelbrot.Fonte: Cluster Beowulf “IESAM MASTER”, 2005.

17

Page 20: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Figura 5 – Conjunto de Mandelbrot.Fonte: Cluster Beowulf “IESAM MASTER”, 2005.

18

Page 21: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Figura 6 – Conjunto de Mandelbrot.Fonte: Cluster Beowulf “IESAM MASTER”, 2005.

19

Page 22: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Figura 7 – Conjunto de Mandelbrot referente à Figura 6.Fonte: Cluster Beowulf “IESAM MASTER”, 2005.

20

Page 23: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

6 CONSIDERAÇÕES FINAIS

Este tratou sobre a geração de imagens geométricas de fractais. Usou-se um

cluster de computadores ligados em rede utilizando a arquitetura Beowulf. O sistema

gerenciador usado foi à biblioteca PVM. No caso, usou-se como exemplo dessa aplicação

o conjunto de Mandelbrot. A contribuição desse trabalho pode ser reforçada para o caso

de aplicações referentes à engenharia, por exemplo. Com essa descrição, o processo

dessa geometria pode estar associado à teoria de antena ou até mesmo a sistemas de

aterramento para o controle de suas características. Dessa forma, este trabalho é o início

de um desenvolvimento no que se refere à computação aplicada com a utilização de

processamento paralelo.

21

Page 24: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

REFERÊNCIAS

GIANVITTORIO, J. P.; RAHMAT-SAMII, Y. Fractal Antenna: a Novel Antenna

miniaturization technique and application. IEEE Ant. and Propagation, v. 44, n.1, Feb

2002.N.J.

MANDELBROT, B. Fractais: Forma, Hipóteses e Dimensão. Ed. Gradiva, 1977.

MANDELBROT, B. A Geometria Fractal da Natureza. Ed. Gradiva, 1982.

PITANGA, M. Construindo Supercomputadores com Linux. Rio de Janeiro: 2 ed.

Brasport, 2004.

STERLING, T. et. al. Beowulf: A Parallel Workstation for Scientitific Computation,

January, 1995. Disponível em:

<http://beowulf.es.embnet.org/papers/ICPP95/icpp95.html>. Acesso em: 16 de out. 2005.

22

Page 25: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

ANEXOS

23

Page 26: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 27: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Código em C para Geometria dos Fractais usando processamento paralelo na

plataforma PVM/LINUX:

Programa Mestre:

* Mandelbrot Program with PVM

* and zooming capability

* MASTER PROGRAM

*/

#include <stdlib.h>

#include <iostream.h>

#include "glaux.h" //For auxiliary functions.

#include "gltk.h" //For mouse functions.

#include "/usr/pvm3/include/pvm3.h"

const int PIXELS = 600; //Holds the size of the window

const int NPROCESS = 20; //Holds the number of PVM slaves

int NumberDone[NPROCESS]; //A record of the progress of each slave

float X1,Y1, X2,Y2; //Define the viewing rectangle

/* A palette of colors */

float palette[17][3] = {{0.1,0.2,0.3}, {0.5,0.2,0.7}, {0.3,0.8,0.1}, {0.9,0.3,0.5},

{0.8,0.6,0.5}, {0.1,0.7,0.4}, {0.5,0.8,0.3}, {0.7,0.4,0.8},

{0.1,0.2,0.3}, {0.5,0.2,0.7}, {0.3,0.8,0.1}, {0.9,0.3,0.5},

{0.8,0.6,0.5}, {0.1,0.7,0.4}, {0.5,0.8,0.3}, {0.7,0.4,0.8},

{1.0,1.0,1.0} };

static void SetArray(float yarray[]) {

/* Initializes the arrays */

int i;

//Divides the window into areas for each slave

for (i=0;i<NPROCESS+1;i++) {

yarray[i] = Y1 + ((float)i/NPROCESS)*(Y2-Y1);

}

//Clears the progress record

Page 28: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 29: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

for (i=0;i<NPROCESS;i++)

{ NumberDone[i] = 0; }

}

static void DrawRow(int data[], int who) {

/* Draws one row using data from a slave program */

int ypos,i;

//Get the y position of the row

ypos = who*(PIXELS/NPROCESS) + NumberDone[who];

//Draw the points

for (i=0;i<PIXELS;i++) {

glColor3fv(palette[data[i]]);

glBegin(GL_POINTS);

glVertex2i(i,ypos);

glEnd();

}

glFlush();

//Increment the progress record

NumberDone[who] += 1;

}

static void DrawStuff() {

/* Broadcasts window data to PVM slaves,

Receives the appropriate colors back

And draws the Mandelbrot set */

int mytid,who,i,nhost,narch,msgtype,numt,nproc,

tids[NPROCESS], data[PIXELS];

float yarray[NPROCESS+1];

struct pvmhostinfo *hostp[NPROCESS];

mytid = pvm_mytid();

//Request NPROCESS slaves

if ( pvm_parent() != PvmNoParent) {

pvm_config( &nhost, &narch, hostp );

nproc = nhost;

if (nproc > NPROCESS) nproc = NPROCESS;

}

Page 30: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 31: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

//If problems, quit the program

numt = pvm_spawn("mandslave", (char**)0,0,"",NPROCESS,tids);

if (numt < NPROCESS) {

cout << "MandMaster: PVM error\n";

for (i=0; i<numt; i++) {

pvm_kill(tids[i]);

}

pvm_exit();

exit(0);

}

SetArray(yarray);

/*Start PVM stuff*/

pvm_initsend(PvmDataDefault);

pvm_pkint(tids,NPROCESS,1); //Send task ID's

pvm_pkfloat(&X1,1,1);

pvm_pkfloat(&X2,1,1); //Send the x positions

pvm_pkfloat(yarray,NPROCESS+1,1); //Send the y positions

pvm_mcast(tids, NPROCESS, 0);

msgtype=5;

for (i=0;i<PIXELS;i++) { //Get an array of

pvm_recv( -1, msgtype); //color values back,

pvm_upkint( &who, 1, 1);

pvm_upkint(data, PIXELS, 1);

DrawRow(data,who); //Draw them on screen.

}

pvm_exit();

}

static void SmallZoom(int x,int y) {

/* Zooms in on a relatively small area of the viewing window. */

int zm = PIXELS/60; //The size of the zoom

glColor3f(1.0,0.0,0.0);

glBegin(GL_QUADS);

glVertex2i(x-zm,(PIXELS-y)-zm); //Draw a red rectangle to indicate

glVertex2i(x-zm,(PIXELS-y)+zm); //where zooming is taking place

Page 32: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 33: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

glVertex2i(x+zm,(PIXELS-y)+zm);

glVertex2i(x+zm,(PIXELS-y)-zm);

glEnd;

double Xsave,Xavg,Ysave,Yavg;

Xsave = X1;

Xavg = (X2 - X1);

Ysave = Y1;

Yavg = (Y2 - Y1);

X1 = Xsave+(x-zm)*((Xavg)/PIXELS); //Set new viewing rectangle

X2 = Xsave+(x+zm)*((Xavg)/PIXELS); //By converting from pixel

Y1 = Ysave+((PIXELS-y)-zm)*((Yavg)/PIXELS); //coords to real coords.

Y2 = Ysave+((PIXELS-y)+zm)*((Yavg)/PIXELS);

}

static void LargeZoom(int x,int y) {

/* Zooms in on a relatively large area of the viewing window. */

int zm = PIXELS/12; //Size of the zoom

glColor3f(1.0,0.0,0.0);

glBegin(GL_QUADS);

glVertex2i(x-zm,(PIXELS-y)-zm); //Draw a red rectangle to indicate

glVertex2i(x-zm,(PIXELS-y)+zm); //where zooming is taking place

glVertex2i(x+zm,(PIXELS-y)+zm);

glVertex2i(x+zm,(PIXELS-y)-zm);

glEnd;

double Xsave,Xavg,Ysave,Yavg;

Xsave = X1;

Xavg = (X2 - X1);

Ysave = Y1;

Yavg = (Y2 - Y1);

X1 = Xsave+(x-zm)*((Xavg)/PIXELS); //Set new viewing rectangle

X2 = Xsave+(x+zm)*((Xavg)/PIXELS); //by converting from pixel

Y1 = Ysave+((PIXELS-y)-zm)*((Yavg)/PIXELS); //coords to real coords

Y2 = Ysave+((PIXELS-y)+zm)*((Yavg)/PIXELS);

}

static GLenum MousePressed(int x,int y, GLenum button) {

Page 34: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 35: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

/* This procedure manages the mouse calls */

if (button & TK_LEFTBUTTON)

{ SmallZoom(x,y); } //Left button activates a small zoom.

if (button & TK_RIGHTBUTTON)

{ LargeZoom(x,y); } //Right button activates a large zoom.

return GL_TRUE; //The mouse toolkit wants a boolean return.

}

static void Restore(...) {

/* Resets the viewing window to its initial values */

/* Used to zoom back out once you have zoomed in. */

X1 = -2; //These coordinates are a good window

X2 = 0.6; //for the Mandelbrot set.

Y1 = -1.5;

Y2 = 1.5;

}

static void Init() {

/* Sets initial viewing window, and clears the screen */

X1 = -2;

Y1 = -1.5;

X2 = 0.6;

Y2 = 1.5;

glClearColor(0.0, 0.0, 0.0, 1.0);

glClear(GL_COLOR_BUFFER_BIT);

}

static void DisplayStuff(...) {

/* Calls the drawing function, then displays the result to the screen. */

DrawStuff();

glFlush();

auxSwapBuffers();

}

static void Reshape(int w, int h) {

/* Mystical Magical stuff */

glViewport(0,0,(GLint)w,(GLint)h);

Page 36: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 37: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(0,PIXELS,0,PIXELS,-1,1);

glMatrixMode(GL_MODELVIEW);

}

int main(int argc, char **argv) {

/* Window Initialization and Main Loop */

auxInitDisplayMode(AUX_RGBA);

auxInitPosition(100,50,PIXELS,PIXELS);

if (auxInitWindow("Mandelbrot Set") == GL_FALSE)

{ auxQuit(); }

Init();

auxExposeFunc(Reshape);

auxReshapeFunc(Reshape);

auxKeyFunc(AUX_r,Restore);

tkMouseDownFunc(MousePressed);

auxMainLoop(DisplayStuff);

}

Page 38: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 39: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

Programa Escravo:

* Mandelbrot Program with PVM

* and zooming capability

* SLAVE PROGRAM

*/

#include <stdlib.h>

#include "/usr/pvm3/include/pvm3.h" //PVM header file

const int PIXELS=600; //Holds the size of the window

const int NPROCESS=20; //Holds the number of PVM slaves

static float X1,X2,Y1,Y2; //Define the viewing rectangle

static void SetWindow(int me, float yarray[]) {

/* Sets the upper and lower Y coords of

the particular window handled by the slave */

Y1 = yarray[me];

Y2 = yarray[me+1];

}

static float ConvertX(int x) {

/* Converts from pixel coordinates to real coordinates */

return X1 + ((float)x/PIXELS)*(X2-X1);

}

static float ConvertY(int y) {

/* Converts from pixel coordinates to real coordinates */

return Y1 + ((float)y/(PIXELS/NPROCESS))*(Y2-Y1);

}

static void CalculateRow(int ypos, int data[] ) {

/* The mandelbrot algorithm.

Color values are saved in an array. */

float j,x1,y1,x,y,r,b;

int n,i;

j = ConvertY(ypos);

for (i = 0; i<PIXELS; i++) {

b = ConvertX(i);

x = b;

y = j;

Page 40: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 41: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

n = 0;

r = 0;

while (n<64 && r<4) {

x1 = x*x - y*y + b;

y1 = 2*x*y + j;

r = x1*x1 + y1*y1;

x = x1;

y = y1;

n++;

}

//If the point escaped, save white

//Else save an indexed color value

if (r < 4)

{ data[i] = 16; }

else

{ data[i] = n/4;}

}

}

int main() {

/* Sets up PVM, receives window data,

Calculates color values for the mandelbrot

set within a specific window, and returns the data. */

int mytid,n,me,i,master,msgtype,

tids[NPROCESS],data[PIXELS];

float yarray[NPROCESS+1];

mytid = pvm_mytid();

//Receive data

msgtype = 0;

pvm_recv(-1,msgtype);

pvm_upkint(tids,NPROCESS,1); // Task ID's

pvm_upkfloat(&X1,1,1);

pvm_upkfloat(&X2,1,1); // X coordinates

pvm_upkfloat(yarray,NPROCESS+1,1); // Y coordinates

for (i=0;i<NPROCESS;i++)

Page 42: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF
Page 43: IMAGENS FRACTAIS OBTIDAS POR PROCESSAMENTO PARALELO USANDO UM CLUSTER BEOWULF

if (mytid == tids[i]) { // get my number

me = i; // (0..NPROCESS-1)

break;

}

SetWindow(me,yarray); // Set up the window

msgtype = 5;

master = pvm_parent();

for (i=0;i<PIXELS/NPROCESS;i++) { //Send back arrays of data

CalculateRow(i,data); //containing color index values

pvm_initsend(PvmDataDefault);

pvm_pkint(&me,1,1); //also send my process number

pvm_pkint(data,PIXELS,1);

pvm_send(master,msgtype);

}

pvm_exit();

}