Você está na página 1de 36

INTRODUO COMPUTAO DE ALTO DESEMPENHO

Paulo Srgio Lopes de Souza


Universidade Estadual de Ponta Grossa UEPG
Departamento de Informtica - DeInfo
pssouza@uepg.br

Resumo
Este trabalho uma introduo computao de alto desempenho, com o objetivo
de apresentar os conceitos bsicos da rea, incluindo questes pertencentes s
arquiteturas paralelas e programao concorrente. Explorando o tema de uma
forma mais abrangente que especfica, este trabalho discute maneiras viveis de
realizar computao de alto desempenho baseada em plataformas distribudas e com
ambientes de passagem de mensagens portteis, discutindo tambm questes
relacionadas obteno ou perda de desempenho. Por fim, apresentado um
exemplo de aplicao, utilizando o PVM (Parallel Virtual Machine) como
ferramenta de apoio.

1. Introduo
Computao paralela (ou processamento paralelo) consiste basicamente em um conjunto
de elementos de processamento, que cooperam e comunicam-se entre si para solucionarem
grandes problemas, de maneira mais rpida do que se estivessem sendo solucionados
seqencialmente [Almasi; Gottlieb (1994)].
Por mais que as arquiteturas seqenciais de von Neumann (tradicionalmente aceitas)
tenham conseguido nos ltimos anos um grande avano tecnolgico, permitindo maiores
desempenhos, sempre haver uma demanda por desempenho maior que a oferecida pela
tecnologia atual da poca. Tanenbaum (1999) afirma em seu livro de Organizao Estruturada
de Computadores que sempre teremos usurios como os astrnomos, simulando o que ocorreu
no primeiro microsegundo aps o big-bang; os economistas, modelando a economia mundial e
os adolescentes com seus jogos interativos pela internet com imagens em trs dimenses.
A motivao para o surgimento da computao paralela foi, portanto, a necessidade de
aumentar o desempenho em uma nica mquina. Entre as principais vantagens destacam-se:
ganho de desempenho em programas lentos, a soluo mais natural para problemas
intrinsecamente paralelos e a maior tolerncia a falhas.
Embora a computao de alto desempenho seja uma necessidade real da sociedade e
empregada em vrias reas do conhecimento, dois fatores ainda so preocupantes: sua
complexidade e seu alto custo. O desenvolvimento de computadores paralelos envolve uma

grande quantidade de recursos, gerando produtos finais caros e normalmente deixando o


usurio final dependente de apenas um fabricante. Atualmente, propostas alternativas buscam
inverter essa situao, utilizando plataformas computacionais mais baratas, com uma relao
custo x benefcio mais vantajosa e com um grau de complexidade menor.
Nesse sentido, este texto aborda a computao de alto desempenho vivel, ou seja, a
computao que fornea os ganhos de desempenho necessrios aplicao, porm, com um
custo e complexidade reduzidos. Para tanto, so discutidos aspectos importantes dos ambientes
de passagem de mensagens, como o PVM (Parallel Virtual Machine) e de plataformas
distribudas alternativas, como as NOWs (Network of Workstations). A unio desses recursos
de hardware e software permite um uso mais abrangente da computao paralela, como por
exemplo: por alunos de cursos de graduao e de ps-graduao, por profissionais da
engenharia e da matemtica, na simulao, processamento de imagens e de sinais, entre outros.
Faz-se importante destacar que este texto no tem o objetivo de abordar todas as questes
pertinentes Computao de Alto Desempenho, mas sim de servir como uma iniciao ao
assunto. Maiores informaes podem ser adquiridas em Almasi; Gottlieb (1994), Hwang;
Briggs (1984), Hwang (1998), Navaux (1989) e Patterson; Hennessy (1998).
2. Conceitos Bsicos
A computao paralela apresenta inmeras caractersticas no encontradas na computao
seqencial pois, alm das inmeras maneiras de se organizar os processadores, h tambm a
necessidade de um gerenciamento complexo dos elementos de processamento, bem como
manuteno da coerncia da informao que trafega pela mquina [Navaux (1989)]. Esta seo
descreve alguns dos principais conceitos da computao paralela, necessrios continuidade
deste curso: plataformas distribudas, heterogeneidade, NOWs, paralelismo, concorrncia,
nveis de paralelismo (ou granulosidade), speedup/eficincia e pipeline.
2.1. Plataformas Distribudas, Heterogeneidade e NOWs
Uma plataforma computacional distribuda formada por um conjunto de elementos de
processamento fisicamente distribudos, conectados por uma rede de comunicao e utilizada
com objetivos especficos. Esses objetivos podem variar desde o simples compartilhamento de
recursos (comum em Sistemas Distribudos) at a busca por melhor desempenho (empregada
na Computao Paralela). A definio acima, apesar de assemelhar-se definio de redes de
computadores, mais abrangente, pois os elementos de processamento podem pertencer desde
a uma rede de microcomputadores ou at a computadores paralelos, todos podendo estar

interligados e formando uma nica plataforma computacional distribuda [Anderson et al.


(1995)].
Um exemplo importante de plataforma distribuda, na atualidade, a NOW (Network of
Workstations). Nessas plataformas, computadores pessoais e/ou estaes de trabalho
interligados so utilizados como base para a realizao da computao paralela. Outra
caraterstica marcante das NOWs (como plataformas distribudas aplicadas computao
paralela) a sua relao custo x benefcio atrativa. Autores como Russ et al. (1997) citam que a
principal razo para a grande utilizao das NOWs o seu baixo custo relativo e no o seu
desempenho. No entanto, se forem consideradas as NOWs j instaladas, essa grande quantidade
de recursos oferece um grande potencial para processamento. Anderson et al. (1995)
demonstraram em seus estudos que mesmo em horrios normais de trabalho, mais de 60% dos
computadores estavam 100% disponveis, tornando as NOWs fortes candidatas ao
processamento paralelo. A utilizao das NOWs para o processamento paralelo agregou novos
fatores computao paralela, os quais no apresentavam a mesma importncia tanto na
computao seqencial feita em plataformas distribudas, quanto na computao paralela feita
em computadores "realmente" paralelos. As caractersticas multiusuria e heterognea das
NOWs so bons exemplos desses fatores.
A heterogeneidade das plataformas distribudas pode ser configuracional ou arquitetural. A
primeira ocorre quando computadores de mesma arquitetura apresentam: diferentes velocidades
de processamento, diferentes quantidades de memria disponvel, entre outras. A
heterogeneidade arquitetural, por sua vez, ocorre quando as diferenas esto na prpria
arquitetura dos elementos de processamento utilizados, como por exemplo processadores
CISC, RISC e paralelos [Mehra; Wah (1993) e Schnor et al. (1996)].
A presena de multiusurios em uma plataforma altera o desempenho das aplicaes
executadas. Quando as plataformas so "monopolizadas" por um usurio possvel antever
com mais facilidade um comportamento futuro. Isso acontece porque as cargas de trabalho so
internas, isto , esto relacionadas exclusivamente aos processos dessa aplicao em execuo.
Quando so usadas plataformas multiusurias devem-se considerar as variaes na carga
computacional externas aplicao [Krone et al. (1998)].
2.2. Paralelismo e Concorrncia
A concorrncia existe quando, em um determinado instante, dois ou mais processos
comearam a sua execuo, mas no terminaram [Almasi; Gottlieb (1994)]. Por essa definio,

concorrncia pode ocorrer tanto em sistemas com um nico processador, quanto em sistemas
com mltiplos processadores.
Afirmar que processos esto sendo executados em paralelo implica na existncia de mais
de um processador, ou seja, paralelismo (ou paralelismo fsico) ocorre quando h mais de um
processo sendo executado no mesmo intervalo de tempo e em sistemas com
multiprocessadores.
Quando vrios processos so executados em um nico processador, sendo que somente um
deles executado a cada vez tem-se um pseudo-paralelismo. O usurio tem a falsa impresso
de que suas tarefas so executadas em paralelo, mas, na realidade, o processador
compartilhado entre os processos. Isto significa que, em um determinado instante, somente um
processo executado, enquanto que os outros que j foram iniciados aguardam a liberao do
processador para continuarem.
Entende-se por processo um programa em execuo. Um processo consiste do programa
executvel, seus dados, a pilha e o ponteiro para a pilha, o contador de instrues, os
registradores e todas as informaes de que necessita para ser executado.
2.2.1. Nveis de Paralelismo
O nvel do paralelismo ou granulosidade indica o tamanho da tarefa executada pelo
processador. Vrias granulosidades so sugeridas na literatura [Almasi; Gottlieb (1994),
Hwang; Briggs (1984), Navaux (1989)]. Resumidamente, podem ser classificadas em fina,
mdia e grossa.
Uma granulosidade fina indica que o paralelismo feito em nvel de operaes e
geralmente implementada no hardware. Na granulosidade mdia o paralelismo atingido
entre os blocos ou subrotinas do programa. Em uma granulosidade grossa so paralelizados os
processos.
A granulosidade est diretamente relacionada ao hardware. A granulosidade fina requer um
maior nmero de processadores e tambm mais especficos. Na granulosidade grossa tem-se
um nmero menor de processadores, podendo ser mais genricos.
2.2.2. Speedup e Eficincia
Um dos fatores mais importantes da computao paralela o aumento de velocidade de
processamento obtida com o paralelismo. Para se calcular o aumento obtido, dois parmetros
so abordados na literatura: speedup e eficincia [Almasi; Gottlieb (1994)].

Speedup (SP) utilizado para determinar o aumento de velocidade obtido durante a


execuo de um programa em um computador paralelo, em relao ao nmero de elementos de
processamento.
SP = t1 / tp
onde t1 o tempo que o programa (utilizando o algoritmo paralelo) gastou ao ser
executado em um processador e tp o tempo com p processadores.
O caso timo obtido quando Sp = p, ou seja, na medida em que se aumenta o nmero de
processadores, aumenta-se diretamente a velocidade de processamento. Sistemas onde Sp = p
so conhecidos como Sistemas Escalares [McBryan (1994)]. Fatores que influenciam a
obteno do caso timo esto relacionados principalmente com a comunicao entre os
processadores e a parte seqencial (aquela que no pode ser paralelizada) do algoritmo.
A eficincia (Ep) determina o quanto que est sendo utilizado dos processadores, ou
seja, quando Sp no diretamente proporcional a p, h uma perda de desempenho.
Ep = Sp / p
onde p o nmero de processadores.
A variao de Ep entre 0 e 1, sendo que o valor 1 indica uma eficincia de 100%.
2.2.3. Pipeline
O pipeline obtido dividindo-se o processo em uma seqncia de sub-processos onde cada
um ser executado por um estgio de hardware especfico, que trabalhar concorrentemente
com os outros estgios do pipeline [Navaux (1989)].
e s t g io s
E1
E4

P1

P2

...

P1

P2

P3

...

P2

P3

P4

...

P4

P5

...

E2
E3
E3
E2

P1

E4
E1

P1
T1

( a )

P2
T2

P3
T3

T4

T5

...

( b )
E = E s t g io s

P = P ro c e sso s e m E x e c u o

Figura 2.1 - Execuo de um Pipeline.

T = T em po

te m p o

Conforme mostra a Figura 2.1, para a execuo do pipeline, o primeiro estgio (E1)
executa um pedao do processo P1. Ao terminar, entrega os seus resultados para o segundo
estgio (E2) do pipeline, que dar continuidade ao processamento. O segundo estgio (E2) no
poder executar nada referente quele processo enquanto no receber o sub-processo do
primeiro estgio (E1). Com isso pode-se observar que a execuo do processo feita
seqencialmente pelos estgios. O paralelismo ocorre porque, quando o processo est em um
estgio (por exemplo E2), outro processo (P2) j pode ser executado no estgio anterior (E1).
Esse paralelismo chamado de temporal.
Os microprocessadores recentes empregam tcnicas de pipeline para resolver os problemas
de desempenho dos computadores seqenciais. Esse nvel de paralelismo com granulosidade
fina no implica que esses computadores sejam paralelos, visto que a mquina considerada
ainda como possuindo apenas um processador.
3. Arquiteturas Paralelas
Por arquitetura paralela entende-se a mquina capaz de executar mais de uma tarefa ao
mesmo tempo, excluindo-se o paralelismo de baixo nvel. Com o avano do processamento
paralelo, foram propostas inmeras arquiteturas, cada uma apresentando caractersticas
diferentes.
Para acompanhar o desenvolvimento das arquiteturas e para agrupar equipamentos com
caractersticas comuns, foram propostas algumas classificaes. A classificao de Flynn
(1972), embora muito antiga, amplamente adotada e baseia-se no fluxo de instrues e no
fluxo de dados. Duncan (1990) apresenta uma classificao com o objetivo de acabar com a
dificuldade de acomodar as novas arquiteturas dentro da classificao de Flynn.
3.1. Classificao de Flynn
A classificao de Flynn (1972), embora antiga, ainda muito utilizada. A mesma divide
as arquiteturas em quatro categorias de mquinas, conforme a quantidade de fluxo das
instrues e dos dados. As categorias so: SISD (Single Instruction Single Data Stream), SIMD
(Single Instruction Multiple Data Stream), MISD (Multiple Instruction Single Data Stream),
MISD (Multiple Instruction Single Data Stream) e MIMD (Multiple Instruction Multiple Data
Stream) [Flynn (1972), Hwang; Briggs (1984), Navaux (1989), Almasi; Gottlieb (1994),
Duncan (1990)].
A categoria SISD possui apenas um fluxo de instrues e um fluxo de dados.
Compreendem as mquinas de von Neumann, largamente utilizadas (Figura 3.1). A execuo

seqencial, embora uma possvel execuo pipeline possa existir dentro do processador. Pode
haver mais de uma unidade funcional (como co-processadores), mas mesmo assim todos esto
subordinados a uma nica unidade de controle.
FI

FI

UC

FD

UP

F I - F lu x o d e in s t r u e s

F D - F lu x o d e d a d o s

M - M e m r ia

U P - U n id a d e d e P r o c e s s a m e n t o

U C - U n id a d e d e C o n t r o le

Figura 3.1 - Exemplo de Arquitetura SISD.


A categoria SIMD apresenta um nico fluxo de instrues atuando sobre vrios fluxos de
dados. Conforme mostra a Figura 3.2, esta arquitetura possui vrias unidades de processamento
supervisionadas por uma nica unidade de controle. Isso faz com que todos os elementos de
processamento executem as mesmas instrues sobre dados diferentes. Processadores
matriciais so exemplos dessa categoria. A memria utilizada pode ser compartilhada, ou
seja, comum a todas as unidades de processamento; ou distribuda, onde cada unidade de
processamento possui o seu prprio espao para endereamento da memria.
FI
FI

UP

FI
UC

FI

FD

FD
UP

..
.

..
.

UP

FD

M
M em ria

FI-F lu xo de instru es

M -M em ria

FD -F lu xo de dado s

U C -U nidade de C o ntro le U P -U nidade de P ro cessamento

Figura 3.2 - Exemplo de Arquitetura SIMD.


A categoria MISD caracterizada por apresentar mltiplos fluxos de instrues para um
nico fluxo de dados, conforme mostra a Figura 3.3. O fluxo de dados passaria por todas as

unidades de processamento, sendo que o resultado de uma seria a entrada para a prxima
unidade. No h, na literatura disponvel, exemplos de mquinas MISD. Contudo, alguns
autores [Almasi; Gottlieb (1994), Navaux (1989)] citam a possibilidade de encaixar o pipeline
como representante dessa categoria.

FD
FI

FI

UP

UC
FI

FI

..
.

UC

UP

..
.

..

FI

FI

UP

UC

M e m r ia
FD
F I - F lu x o d e in s t r u e s

F D - F lu x o d e d a d o s

U P - U n id a d e d e P r o c e s s a m e n t o

U C - U n id a d e d e C o n t r o le

M - M e m r ia

Figura 3.3 - Exemplo de Arquitetura MISD.


A categoria MIMD composta por mltiplos fluxos de instrues e mltiplos fluxos de
dados. Cada unidade de processamento atua sobre um conjunto de dados diferente e possui
uma unidade de controle que a supervisiona (Figura 3.4).

UC

FI

UP

FI

FD

FD

UC

UP

..
.

.
.
.

..
.

FI

UC

UP

FD

M
M e m r ia

F I-F lu xo d e instru es

F D -F lu xo d e d ad o s

U P -U n id ad e d e P ro ce ssa m e n to

U C -U n id ad e d e C o ntro le

M -M e m r ia

Figura 3.4 - Exemplo de Arquitetura MIMD.

FI

FI

..
.
F.I

3.2. Classificao de Duncan


A classificao proposta por Duncan (1990) teve o objetivo de incluir novas propostas
arquiteturais em uma taxonomia que considerasse os seguintes aspectos bsicos: (1) manter os
elementos da classificao de Flynn, devido sua ampla utilizao; (2) incluir as arquiteturas
criadas depois da classificao de Flynn (como as sistlicas e hipercbicas); e (3) excluir
arquiteturas que apresentam apenas paralelismo de baixo nvel, como por exemplo, as vrias
unidades funcionais e a execuo decomposta do processador em estgios autnomos
(pipeline).
A classificao composta de dois grandes grupos: arquiteturas sncronas e assncronas. A
Figura 3.5 mostra a classificao inteira, com as suas subdivises; nela pode-se notar que,
atravs de termos mais genricos, foi possvel agrupar as principais arquiteturas existentes.

Arquiteturas
Sncronas

Processadores Vetoriais
Processadores Matriciais (Arquiteturas SIMD)
Arquiteturas Sistlicas
Arquiteturas
MIMD

Arquiteturas
Assncronas

Memria Compartilhada
Memria Distribuda

Arquiteturas Hbridas (MIMD / SIMD)


Arquiteturas no Arquiteturas a Fluxo de Dados
Convencionais Arquiteturas de Reduo
Arquiteturas de Frente de Onda
Figura 3.5 - Classificao de Duncan

Nas arquiteturas sncronas as operaes concorrentes so coordenadas por uma unidade


de controle central e por um relgio comum ao sistema. Pertencem a esta categoria:
Processadores Vetoriais: possuem um hardware especfico, o qual permite que sejam
feitas seqncias de instrues idnticas sobre vetores de forma mais rpida do que uma
seqncia de operaes escalares [Almasi; Gottlieb (1994)]. Os processadores vetoriais
utilizam pipeline (paralelismo temporal) para agilizar a execuo das operaes (Figura 3.6).
Arquiteturas SIMD: como j descrito anteriormente, as mquinas SIMD so
compostas por um nico fluxo de instrues atuando sobre diferentes dados. Os processadores

matriciais so exemplos dessa categoria sncrona, onde a unidade de controle supervisiona e


sincroniza as unidades de processamento (Figura 3.2).

U n id a d e d e
b u sca d e
in s tru o

U P V e to r ia l
UP
e s c a la r

c o n tro la d o r
v e to ria l

ULA
v e to ria l

c o n tro la d o r
d e m e m ria
v e to ria l

m e m ria p rin c ip a l

re g is tr a d o re s
v e to ria is

Figura 3.6 - Exemplo de um Processador Vetorial


Arquiteturas Sistlicas: essas arquiteturas possuem vrios processadores enfileirados
(pipeline), sendo que a informao trafega por vrios processadores antes de retornar
memria (Figura 3.7). Segundo Almasi; Gottlieb (1994), o nome sistlicas vem do fato das
informaes pulsarem sincronamente entre os processadores como o sangue pulsando no
corao. Apresentando alto grau de paralelismo (com uma granulosidade baixa), arquiteturas
sistlicas apresentam alto desempenho e so empregadas em problemas especficos (como
processamento de sinais) [Duncan (1990)].

Memria

Figura 3.7 - Exemplo de uma Arquitetura Sistlica


As arquiteturas assncronas so caracterizadas principalmente por um controle de
hardware descentralizado, onde cada unidade de processamento executa diferentes instrues
sobre diferentes dados. Essa a definio da categoria MIMD, na classificao de Flynn.
Arquiteturas MIMD convencionais: nessas arquiteturas a comunicao e o
sincronismo necessrios so feitos de acordo com a organizao da memria, podendo ser, ou

compartilhada (comum a todos os processadores), ou distribuda (cada processador possui sua


prpria memria, sendo que ela utilizada apenas por ele), conforme mostra a Figura 3.8.

Rede de Conexo

Rede de Conexo
P

(a)

(b)

Figura 3.8 - Arquitetura MIMD. (a) Mem. Compartilhada (b) Mem. Distribuda
As

arquiteturas

MIMD

com

memria

compartilhada

(tambm

chamadas

de

multiprocessadores) possuem uma nica memria, onde todos os processadores tm acesso


(vide Figura 3.8-a). A memria no necessita estar agrupada fisicamente, podendo ser
constituda por vrias unidades independentes, ou seja, distribuda, mas agrupadas logicamente
(endereamento de memria comum a todos os processadores). O simples acesso aos dados
permite a comunicao e o sincronismo, embora sejam necessrios critrios adicionais para que
acessos concorrentes no tornem as informaes inconsistentes.
Os multiprocessadores so considerados fortemente acoplados, devido grande troca de
informao existente entre os elementos de processamento. A rede de conexo deve ter bom
desempenho e alta confiabilidade, o que torna seu custo mais elevado (em relao rede de
conexo para memria distribuda). Essa arquitetura deve ser empregada em situaes onde o
nvel de paralelismo mais fino necessitando, assim, maior troca de informaes.
Nas arquiteturas MIMD com memria distribuda cada processador possui a sua prpria
memria (seu prprio espao de endereamento), no tendo acesso memria dos outros
processadores. A comunicao e o sincronismo ocorrem por troca de mensagens atravs da
rede de conexo. O problema de inconsistncia devido ao acesso concorrente das informaes
na memria desaparece. Porm, o tempo de latncia na troca de mensagens um dos fatores
que prejudicam o desempenho desses sistemas.
Tambm chamadas de multicomputadores, as arquiteturas MIMD com memria
distribuda so sistemas fracamente acoplados, cujas aplicaes procuram evitar a troca de

mensagens entre os processadores devido ao tempo de latncia existente. Portanto, a


granulosidade deve ser de mdia a grossa, a fim de permitir que o cdigo paralelizado supere o
tempo adicional gasto com a comunicao.
O projeto para implementao desses sistemas , normalmente, mais fcil de ser
desenvolvido e mais barato que o projeto das arquiteturas MIMD com memria compartilhada.
A Figura 3.8-b apresenta uma topologia hipottica de rede de conexo para arquiteturas MIMD
com memria distribuda. As linhas tracejadas da Figura 3.8 indicam o espao de
endereamento usado pelos processadores.
Arquiteturas MIMD no Convencionais: As arquiteturas no convencionais
agrupam todos os sistemas que no se encaixam em nenhuma das categorias anteriores.
Mquinas hbridas (MIMD/SIMD), a fluxo de dados, reduo e de frente de onda so exemplos
dessas arquiteturas. Elas apresentam aspectos MIMD, pois so assncronas e com mltiplos
fluxos de instrues e de dados, mas possuem caractersticas prprias, impedindo que sejam
classificadas apenas como MIMD [Duncan (1990)].
As Arquiteturas hbridas (MIMD/SIMD) so compostas basicamente por uma arquitetura
MIMD que possui algumas partes controladas por arquiteturas SIMD.
As Arquiteturas a Fluxo de Dados (dataflow) possuem como caracterstica fundamental o
modelo de execuo, no qual as instrues tornam-se habilitadas para a execuo somente
quando seus operandos estiverem disponveis. Com isso, a seqncia de instrues a ser
executada baseada na dependncia dos dados, permitindo a essas arquiteturas explorarem a
concorrncia em nvel de tarefas, rotinas e instrues [Duncan (1990)].
As Arquiteturas de Reduo so tambm conhecidas como arquiteturas dirigidas por
demanda, visto que os processadores s executam os comandos quando as expresses
necessitam do seu clculo. O conceito de reduo est na substituio de pores do cdigo
fonte original de um programa pelo seu significado. Estruturas em rvore podem ser utilizadas
em arquiteturas de reduo, onde as folhas possuem os itens do programa mapeado e os outros
ns realizam os procedimentos necessrios.
As Arquiteturas de Frente de Onda combinam as estruturas pipeline sistlicas com a
execuo assncrona a fluxo de dados. O objetivo conservar as vantagens das arquiteturas
sistlicas e eliminar algumas das suas desvantagens. Ambas as arquiteturas, sistlicas e frente
de onda, possuem uma rede de conexo regular interligando os processadores. Porm, as
arquiteturas de frente de onda no possuem um relgio global com atrasos explcitos, usados
para manter a sincronizao das estruturas pipeline. Protocolos assncronos so usados para

coordenar os movimentos dos dados entre os processadores fazendo com que as frentes de
ondas computacionais passem pela matriz de processadores sem causar interferncia [Duncan
(1990)].
Outra classificao bastante empregada para arquiteturas paralelas, alm das de Flynn e
Duncan, a que considera o acesso memria nas arquiteturas MIMD. Considerando o acesso
nos multiprocessadores, as arquiteturas pode ser classificadas em: UMA (Uniform Memory
Access) ou com Acesso Uniforme Memria e em NUMA (Non-Uniform Memory Access)
ou com Acesso no Uniforme Memria.
Uma mquina UMA tem um tempo de acesso memria constante para todos os
processadores da plataforma. A Figura 3.8-a ilustra essa arquitetura. Observe que as memria
podem estar fisicamente agrupadas ou no. A questo pertinente aqui se o espao de
endereamento comum e o tempo de acesso o mesmo para todos os processadores.
Assim como ocorre com os multicomputadores, uma mquina NUMA tambm utiliza
memria distribuda, porm, diferentemente desses as mquinas NUMA possuem um espao
de endereamento nico e todos os processadores tm acesso a todas as memrias disponveis
na plataforma (este endereamento nico est indicado pelas linhas tracejadas na Figura 3.9).
No entanto, o tempo de acesso memria local menor que o acesso memria remota e,
portanto, h um tempo de acesso no uniforme.

Rede de Conexo

Figura 3.9 - Arquitetura NUMA e a representao de um espao de endereamento nico.


Considerando o acesso memria nos multicomputadores, as arquiteturas so classificadas
apenas em NORMA (Non-Remote Memory Access) ou sem Acesso a Memrias Remotas.
Visto que o espao de endereamento de cada processador limitado sua memria local, para
que os multicomputadores tenham acesso a dados localizados remotamente, estes precisam ser
solicitados explicitamente via troca de mensagens.

4. Programao Concorrente
A programao estruturada seqencial utilizada nas arquiteturas de von Neumann possuem
basicamente: instrues executadas seqencialmente, desvios condicionais e incondicionais,
estruturas de repetio e subrotinas. Para determinadas aplicaes esses recursos implicam em
processamento lento e em sub-utilizao dos recursos de hardware.
A programao concorrente tem por objetivo otimizar o desempenho dessas aplicaes,
explorando a concorrncia em arquiteturas monoprocessadoras ou multiprocessadoras,
permitindo assim uma melhor utilizao dos recursos de hardware disponveis.
A idia bsica da programao concorrente, portanto, que determinadas aplicaes sejam
divididas em partes menores e que cada parcela resolva uma poro do problema. Para essa
diviso, h a necessidade de certos recursos adicionais que so responsveis, por exemplo, pela
ativao e finalizao dos processos concorrentes, e que no esto disponveis na programao
seqencial.
Segundo Almasi; Gottlieb (1994), trs fatores so essenciais para a execuo paralela: (1)
definir um conjunto de subtarefas para serem executadas em paralelo; (2) capacidade de iniciar
e finalizar a execuo das subtarefas; e (3) capacidade de coordenar e especificar a interao
entre as subtarefas enquanto estiverem executando.
Para que os processos concorrentes sejam ativados, faz-se necessrio um conjunto de
ferramentas que determine exatamente que poro do cdigo ser paralela e qual ser
seqencial.
A coordenao e especificao da interao entre os processos concorrentes feita pela
comunicao e pela sincronizao entre eles. A comunicao permite que a execuo de um
processo interfira na execuo de outro e pode ser feita ou pelo uso de variveis compartilhadas
(quando se tem memria compartilhada), ou pelo uso de passagem de mensagens (quando se
tem memria distribuda).
A sincronizao se faz necessria para que o acesso simultneo no torne inconsistentes os
dados que so compartilhados e para que seja possvel o controle na seqncia da execuo
paralela.
4.1. Declarao de Processos Paralelos
Vrias notaes tm sido propostas para a ativao de processos concorrentes. FORK /
JOIN foi uma das primeiras a ser criada, apresentando a caracterstica de no separar a
definio de ativao dos processos da definio de sincronizao [Andrews; Schineider

(1983)]. Outras propostas (como PARBEGIN/PAREND, DOALL, CO-ROTINAS)


distinguem bem o conceito de sincronizao e ativao de processos e possuem restries
sintticas que impedem algumas das execues possveis com FORK/JOIN.

A
B
C

G
H

A
m=2
for k
B
n= 3
for k
for k
D
j o in
g :G
j o in
h: H
q u it
c: C
j o in
e: E
j o in
f: F
j o in

e
f
m ,g ;
n ,h ;

m ,g ;

q u it
q u it

q u it

n ,h ;

q u it

n ,h ;

q u it

Figura 4.1 - Exemplo da Utilizao do FORK/JOIN.

4.1.1. Declarao FORK/JOIN


O comando FORK inicia a execuo de um processo (chamado processo filho),
concorrentemente ao processo que est sendo executado (chamado de processo pai). Quando os
processos executam a operao JOIN, ocorre a sincronizao (Figura 4.1) [Andrews;
Schineider (1983), Hwang; Briggs (1984), Almasi; Gottlieb (1994)]. As sintaxes dos comandos
FORK/JOIN so:
FORK endereo - Executa o processo que est em endereo concorrentemente ao processo
atual, que continua normalmente sua execuo;
JOIN var, end1, end2 - Decrementa var em uma unidade e depois verifica o seu valor. Se
for igual a 0 (zero), desvia a execuo para end1. Caso contrrio, desvia para end2, o qual
normalmente utilizado para finalizar o processo atravs da instruo quit.
FORK/JOIN apresentam a vantagem de serem mais flexveis que as outras notaes (como
por exemplo PARBEGIN/PAREND e DOALL), permitindo a representao de qualquer

execuo paralela/seqencial. No entanto, falta estruturao, tornando o cdigo difcil de ser


entendido.
4.1.2. Declarao PARBEGIN/PAREND
Tambm chamadas de COBEGIN/COEND, essas declaraes formam uma maneira mais
estruturada de especificar qual ser a execuo concorrente no cdigo. Todos os comandos
entre o PARBEGIN e o PAREND so executados em paralelo (Figura 4.2) [Andrews;
Schineider (1983), Hwang; Briggs (1984), Almasi; Gottlieb (1994)].
PARBEGIN/PAREND so menos flexveis que as declaraes FORK/JOIN, visto que
todos os processos ativados devem terminar antes de ser possvel a execuo dos prximos
processos.

A
cobegin

C
begin

B
cobegin
C

D
E
F
coend

G
end
H

coend
H

Figura 4.2 - Exemplo da Utilizao do PARBEGIN/PAREND.

4.1.3. Declarao DOALL


Aplica-se nos casos onde o paralelismo de um programa pode ser obtido atravs de
ciclos, que possuem alguma relao entre as iteraes de cada um [Almasi; Gottlieb (1994)]. A
Figura 4.3 mostra a execuo de uma estrutura de repetio normal e uma estrutura DOALL.

doall i=0 to 2
a[i] = ...

for i=0 to 2 do
a[i] = ...

a[0]=...
a[0]=...

a[1]=...

a[2]=...
a[1]=...

tempo
tempo

loop seqencial

a[2]=...
loop paralelo

Figura 4.3 - Exemplo da Utilizao do DOALL.


4.2. Comunicao e Sincronizao
Observa-se da literatura disponvel [Hwang; Briggs (1984), Navaux (1989), Almasi;
Gottlieb (1994)], que os mecanismos de coordenao (ou seja, comunicao e sincronizao)
foram desenvolvidos para atuar em um dos dois grandes grupos: nas arquiteturas com memria
compartilhada ou nas arquiteturas com memria distribuda.
Para a coordenao de processos utilizando memria compartilhada, foram criados alguns
mecanismos como busy-waiting, semforos e monitores, os quais utilizam variveis de
memria para o controle necessrio.
Para a coordenao de processos em arquiteturas com memria distribuda, podem ser
utilizados mecanismos como a comunicao ponto-a-ponto e rendezvous.
4.2.1. Via Memria Compartilhada
A sincronizao de processos concorrentes, utilizando memria compartilhada, tem dois
objetivos. O primeiro o controle de seqncia onde, para determinados trechos do programa,
estabelecida a ordem de execuo dos processos. O segundo objetivo a excluso mtua, ou
seja, estabelecer um controle de acesso a determinadas reas do programa (chamadas regies
crticas), para que dois ou mais processos no tenham acesso simultaneamente, por exemplo, a
variveis de memria, tornando-as potencialmente inconsistentes.
Busy-waiting uma das possveis formas de sincronizao na qual, para o processo ter
acesso regio crtica, deve primeiro passar por um protocolo de entrada. O protocolo assegura
que somente um processo utilize a regio crtica a cada vez. Caso o processo no tenha acesso,
ele permanece em uma estrutura de repetio tentando obter permisso para prosseguir. Vrias
abordagens foram desenvolvidas (como por exemplo instrues test and set, soluo de

Peterson, entre outras) e so bastante discutidas na literatura [Almasi; Gottlieb (1994), Hwang;
Briggs (1984)].
Busy-waiting apresenta as desvantagens de manter o processo ocupado enquanto espera,
utilizando para isso tempo de processamento, alm de possibilitar a entrada de mais de um
processo ao mesmo tempo na regio crtica, caso no se utilize protocolos mais complexos que
garantam a excluso mtua.
Semforo um mecanismo de sincronizao genrico composto por duas operaes
atmicas (indivisveis); down (ou p) e up (ou v). Essas operaes atuam sobre uma varivel
compartilhada S inteira e no negativa, tanto para permitir a excluso mtua (quando S
iniciado com o valor 1), quanto para permitir o controle de acesso (quando S iniciado com um
valor maior que 1). Down o protocolo de entrada na regio crtica, verificando o valor de S e
bloqueando, quando S for 0 (zero) e decrementando S de uma unidade quando S for maior que
0 (zero). Up o responsvel por liberar a regio crtica quando o processo a estiver deixando.
Resumidamente, um cdigo para down e up seria:
down(S) {
up(S) {
se S=0
se h processo bloq. esperando sinal
ento bloqueia processo
ento passe sinal para o processo
seno S = S - 1
seno S = S + 1
}
}

Monitor uma estrutura de dados compartilhada e um conjunto de funes que tem acesso
a essa estrutura. Seu objetivo controlar o acesso a essa estrutura pelos processos concorrentes.
Basicamente, um monitor consiste de algumas variveis permanentes que armazenam o estado
do recurso compartilhado e de alguns procedimentos, responsveis pelas operaes no recurso.
Para se ter acesso ao monitor, deve ser especificado o seu identificador (seu nome),
seguido do nome do procedimento desejado. Ao chamar o monitor, o processo poder passar
por uma fila de entrada (caso o monitor esteja ocupado) e quando estiver executando a
operao, poder permanecer algum tempo nas filas de condio, caso precise de alguma
condio para prosseguir.
Monitor uma estrutura utilizada para sincronizao, bem elaborada, de alto nvel e que
protege e disciplina o uso de recursos compartilhados os quais so executados em excluso
mtua.

4.2.2. Via Memria Distribuda


Quando a passagem de mensagens usada para a comunicao e sincronizao, os
processos enviam e recebem informaes ao invs de compartilhar variveis. A troca de
mensagens feita atravs das primitivas send/receive [Hwang; Briggs (1984), Almasi; Gottlieb
(1994)]. A sintaxe das primitivas send/receive :
send lista de expresses to destino
receive lista de expresses from origem
A comunicao pode ser sncrona ou assncrona. Na comunicao sncrona o comando
send aguarda que o comando receive seja executado, permitindo assim que a mensagem seja
enviada (Figura 4.4-a). Na comunicao assncrona, o comando send no necessita esperar o
comando receive, utilizando um buffer onde deposita temporariamente o contedo da

transmissor
send

receptor

mensagem

Tempo

mensagem para que o receive, quando pronto, a receba (Figura 4.4-b).

transmissor
send

receptor

mensagem

receive
(a)
processo em execuo

receive
(b)
processo bloqueado

transferncia de mensagem
Figura 4.4 - Send/Receive. (a) Bloqueante (b) No Bloqueante
No mecanismo de comunicao ponto-a-ponto dois processos concorrentes executam as
primitivas send/receive (Figura 4.5-a). Esse mecanismo caracterizado por apresentar
comunicao sncrona e unidirecional. No mecanismo rendezvous dois processos concorrentes
executam as primitivas send/receive duas vezes (Figura 4.5-b), apresentando comunicao
sncrona e bidirecional.

transmissor

receptor
Tempo

send

transmissor

receive

receptor

send
receive
receive
send

(a)
processo em execuo

(b)
processo bloqueado

transferncia de mensagem
Figura 4.5 - Mecanismos de Comunicao. (a) Ponto-a-Ponto (b) Rendezvous.

4.3. Suporte Obteno de Algoritmos Paralelos


O desenvolvimento de algoritmos paralelos requer ferramentas eficazes para ativar os
mecanismos que iniciam/paralisam e coordenam processos concorrentes, descritos na seo
anterior. Essas ferramentas podem ser implementadas de duas maneiras distintas: ou como
linguagens de programao concorrente ou como ambientes de passagem de mensagens.
As linguagens de programao concorrente contm os comandos especficos que os
algoritmos paralelos necessitam. Os ambientes de passagem de mensagens (ou interfaces de
passagem de mensagens) so compostos por bibliotecas de comunicao que implementam os
mecanismos necessrios execuo paralela, agindo como extenses das linguagens
seqenciais existentes [Almasi; Gottlieb (1994)].
4.3.1. Linguagens de Programao Concorrente
Observa-se na literatura disponvel que as linguagens de programao concorrente podem
ser classificadas atravs de diversas formas. Andrews; Schineider (1983) classificam essas
linguagens em trs grupos: orientadas a procedimento (baseadas em variveis compartilhadas),
orientadas a mensagens e a operaes (ambas baseadas em passagem de mensagens). A
diferena bsica entre as orientadas a mensagens e a operaes que as primeiras utilizam
send/receive para a comunicao e as ltimas utilizam RPC (Remote Procedure Call).
Almasi; Gottlieb (1994) agrupam as linguagens em imperativas e declarativas. As
imperativas so a grande maioria das linguagens disponveis (como Fortran, C, Pascal, entre

outras) caracterizadas principalmente pela seqncia de comandos, os quais so os


responsveis pela manuteno dos dados manipulados pelo programa. As linguagens
imperativas analisam como um determinado problema pode ser resolvido.
As linguagens declarativas so projetadas para enfatizar o que o problema quer resolver,
tentando com isso deixar a aplicao menos voltada para o equipamento que est sendo
utilizado e mais para o problema em si. Linguagens para programao funcional (como a Fluxo
de Dados) e para programao lgica (como o Prolog e o Prolog Concorrente) so exemplos
dessa categoria [Almasi; Gottlieb (1994)].
Como a maioria das linguagens utilizadas so as imperativas, o maior nmero de verses
paralelas tambm so dessa categoria. O Fortran e a linguagem C possuem vrias verses e/ou
extenses paralelas (como Fortran90, Fortran D, e PVM para C e Fortran, entre outras) visto
que so utilizadas principalmente no meio cientfico, onde so encontradas vrias aplicaes
paralelizveis [Almasi; Gottlieb (1994)]. Essas verses paralelas tm, portanto, o objetivo de
preservar o investimento feito no desenvolvimento das aplicaes, proporcionando uma
maneira mais rpida e mais barata de aumentar o desempenho dos algoritmos. Outras
linguagens como ADA e OCCAM, embora apresentem as caractersticas imperativas
(seqncia de comandos), foram projetadas para tornarem-se linguagens concorrentes.
4.3.2. Ambientes de Passagem de Mensagem
Um ambiente de passagem de mensagem consiste basicamente de uma biblioteca de
comunicao que, atuando como uma extenso das linguagens seqenciais (como C e Fortran),
permite a elaborao de aplicaes paralelas.
Os ambientes de passagem de mensagem foram desenvolvidos inicialmente para mquinas
com processamento maciamente paralelo (Massively Parallel Processing - MPP) onde, devido
ausncia de um padro, cada fabricante desenvolveu seu prprio ambiente, sem se preocupar
com a portabilidade do software gerado. Com o passar dos anos, muita experincia foi
adquirida, pois os diferentes projetos de ambientes de passagem de mensagens enfatizavam
aspectos diferentes para o seu sistema. Exemplos desses sistemas so nCUBE PSE, IBM EUI,
Meiko CS System e Thinking Machines CMMD [McBryan (1994)].
Na atualidade, os ambientes de passagem de mensagens foram remodelados e/ou
desenvolvidos com trs grandes objetivos: 1)utilizar o potencial dos sistemas distribudos para
o desenvolvimento de aplicaes paralelas; 2)permitir a unio de plataformas heterogneas e
3)permitir a portabilidade das aplicaes paralelas desenvolvidas.

Baseados nesses objetivos principais, vrios grupos de pesquisa desenvolveram ambientes


de passagem de mensagens independentes da mquina a ser utilizada. Esses ambientes foram
chamados de ambientes de passagem de mensagem com plataforma porttil e puderam ser
implementados em vrias plataformas de hardware e sistemas operacionais.
As aplicaes puderam, portanto, ganhar a portabilidade perdida e serem executadas em
todos os equipamentos para os quais o ambiente foi desenvolvido (separadamente ou
concomitantemente). Exemplos de plataformas portteis para equipamentos heterogneos so:
P4, PARMACS, Express, PVM, MPI, Linda, entre outros [McBryan (1994), Carriero et al.
(1994), Walker (1994), Butler; Lusk (1994), Calkin et al. (1994), Flower; Kolawa (1994)] .
importante salientar que normalmente esses ambientes utilizam a passagem de
mensagens como mecanismo de comunicao (visto que formam uma arquitetura MIMD com
memria distribuda). Entretanto possvel que seja simulada uma memria compartilhada
distribuda fisicamente nos vrios elementos de processamento. Linda um exemplo de
ambiente que utiliza memria compartilhada virtual [Carriero et al. (1994)].
Considerando que diversas plataformas portteis atuais apresentam, ainda, alguns dos
problemas identificados nos ambientes de passagem de mensagens propostos inicialmente,
desenvolvidos por fabricantes para execuo apenas nas suas mquinas. A maioria das
plataformas portteis existentes possui apenas um subconjunto das caractersticas necessrias
para os mais diversos equipamentos fabricados [McBryan (1994)], dificultando a tarefa de
implementao em diferentes mquinas.
Devido a esses problemas foi criado o Comit MPI (em 1992), para definir um padro para
os ambientes de passagem de mensagens denominado MPI (Message Passing Interface). Os
principais objetivos so a padronizao para a maioria dos fabricantes de hardware e
plataformas portteis, e eficincia.
O comit MPI rene membros de aproximadamente 40 instituies e inclui quase todos os
fabricantes de mquinas com MPP, universidades e laboratrios governamentais pertencentes
comunidade envolvida na computao paralela mundial [McBryan (1994), Walker (1994)].
O MPI um padro de interface de passagem de mensagens para aplicaes que utilizam
computadores MIMD com memria distribuda. Ele no oferece nenhum suporte para
tolerncia a falhas e assume a existncia de comunicaes confiveis. O MPI no um
ambiente completo para programao concorrente, visto que ele no implementa: I/O paralelos,
depurao de programas concorrentes, canais virtuais para comunicao e outras caractersticas
prprias de tais ambientes [Walker (1994)].

Um conjunto de rotinas responsveis pela comunicao ponto-a-ponto entre os pares de


processos forma o ncleo do MPI. So implementadas rotinas bloqueantes e no bloqueantes
para enviar e receber mensagens.
A rotina que envia a mensagem no modo bloqueante no retorna enquanto a mensagem
contida no buffer no estiver segura. No modo no bloqueante a rotina que envia a mensagem
pode retornar enquanto a mensagem ainda est voltil.
Para receber uma mensagem no modo bloqueante, a rotina no retorna at que a mensagem
seja inserida no buffer. No modo no bloqueante a rotina pode retornar antes da mensagem ter
chegado.
MPI possui grupos de processos e rotinas para o gerenciamento dos grupos. Os grupos
podem ser usados para duas funes distintas. Na primeira os grupos especificam os processos
envolvidos em uma operao de comunicao coletiva, como um broadcasting. Toda a
comunicao ocorre dentro e atravs dos grupos. Na segunda eles podem ser usados para
introduzir o paralelismo dentro da aplicao, onde diferentes grupos realizam diferentes tarefas.
Cada grupo pode possuir cdigos executveis diferentes ou o mesmo cdigo. Quando
utilizado o mesmo cdigo est sendo utilizado o paradigma SPMD [Walker (1994)].
5. Computao Paralela sobre Sistemas Distribudos
O motivo principal para a criao e desenvolvimento de sistemas distribudos foi,
inicialmente, a necessidade de se compartilhar recursos, normalmente de alto custo e separados
fisicamente [Coulouris et al. (2000)]. A computao paralela, entretanto, teve como objetivo
fundamental aumentar o desempenho observado na implementao de problemas especficos
[Zaluska (1991)]. Embora as duas reas tenham surgido por razes diferentes, observou-se
uma rpida convergncia ao longo da ltima dcada, culminando atualmente com um forte
inter-relacionamento caracterizado por muitos aspectos em comum.
Essa convergncia deve-se principalmente ao avano tecnolgico e s linhas de pesquisa
ocorridos a partir da dcada de 80. A computao paralela que empregava quase que na
totalidade arquiteturas SIMD, comeou tambm a utilizar (devido sua versatilidade e alto
desempenho) mquinas MIMD com memria distribuda. Essas mquinas passaram a contar
com processadores de propsito geral, tornando possvel a sua visualizao como um conjunto
de computadores autnomos (com Unidade de Controle, Unidade de Processamento e
Memria), interligados por uma rede de comunicao.

Os sistemas distribudos, por sua vez, foram cada vez mais aperfeioados, destacando-se
como mudanas significativas: maior eficcia dos meios de comunicao e protocolos, e
computadores com maior potncia computacional.
Escalonamento de Processos e perda de desempenho devido ao congestionamento no meio
de comunicao so exemplos de problemas comuns s duas reas e que so, ainda,
amplamente pesquisados [Zaluska (1991)].
Devido s caractersticas em comum, vrios trabalhos foram desenvolvidos com o objetivo
de utilizar a computao paralela sobre sistemas distribudos onde, a idia bsica ter um
grupo de computadores interligados, funcionando como os elementos de processamento de uma
mquina paralela.
Para a realizao da computao paralela sobre sistemas distribudos so utilizados os
ambientes de passagem de mensagens citados anteriormente. Esses ambientes so
aperfeioados constantemente, permitindo assim a unio de uma quantidade de computadores
cada vez mais significativa.
Apesar de possuirem um meio de comunicao mais lento, tornando-se um fator que
degrada rapidamente o desempenho, tais sistemas tm sido utilizados com sucesso para
paralelizar aplicaes que possuem granulosidade grossa e pouca necessidade de comunicao
entre os processos [Zaluska (1991)].
5.1. Problemas e Vantagens da Computao Paralela sobre Sistemas Distribudos
Em uma arquitetura maciamente paralela, todos os processadores so iguais em
capacidade, recursos, software e velocidade de comunicao. Isso no acontece em uma rede.
Os computadores disponveis em uma rede podem ser de diferentes fabricantes com diferentes
compiladores. Portanto, quando se deseja explorar um conjunto de computadores interligados
por uma rede, poder haver vrios tipos de heterogeneidade, como por exemplo [Geist et al.
(1994)]: arquiteturas; formato de dados; potncia computacional e carga de trabalho em cada
mquina e na(s) rede(s).
O conjunto de computadores disponveis pode incluir vrios tipos arquiteturais tais como:
computadores pessoais (PC 386/486/pentium), computadores RISC (Sun SPARCstations,
DECstation, entre outros), multiprocessadores, etc. Cada tipo de arquitetura tem suas prprias
caractersticas para o desenvolvimento de aplicaes. A mquina paralela virtual pode ser
composta por computadores paralelos e mesmo que sejam empregados apenas computadores
seriais, haver ainda o problema da incompatibilidade nos cdigos binrios, sendo preciso
compilar uma tarefa paralela em cada mquina diferente.

Computadores diferentes podem possuir formatos de dados incompatveis. Isso um ponto


importante para os sistemas distribudos visto que o dados enviados de um computador podem
no ser reconhecidos por outro. Assim, para viabilizar a comunicao h necessidade de
ambientes de passagem de mensagens que traduzam os formatos de dados incompatveis.
Mquinas com potncias computacionais diferentes podem gerar desempenhos fracos.
Como exemplo disso pode-se considerar o problema de executar tarefas paralelas em uma
mquina virtual, composta por um supercomputador e uma estao de trabalho. O projeto da
aplicao deve assegurar que o supercomputador no fique ocioso aguardando o processamento
da estao de trabalho para poder continuar.
Como sistemas distribudos normalmente possuem vrios usurios, cada um executando
suas aplicaes, a carga de trabalho atribuda a cada mquina e (s) rede(s) podem variar muito,
afetando aplicaes que desejam explorar o paralelismo no sistema.
Apesar de algumas dificuldades, a computao paralela sobre sistemas distribudos (e
principalmente sobre sistemas heterogneos) oferece potencialmente muitas vantagens: (1)
custo reduzido, devido a utilizao do hardware j existente, o qual era empregado apenas para
a execuo de aplicaes seqenciais; (2) desempenho alto, por atribuir cada tarefa para a
arquitetura mais apropriada; (3) explora a heterogeneidade natural de certas aplicaes,
permitindo acesso a bancos de dados diferentes e a processadores especiais para determinadas
partes do problema; (4) os recursos da mquina virtual podem aumentar gradativamente
permitindo a assimilao de tecnologias de ponta mais facilmente (com custo menor); (5)
utilizao de recursos conhecidos para o desenvolvimento de aplicaes. Programadores podem
utilizar editores, compiladores e perifricos disponveis para os equipamentos seriais; e (6) a
computao distribuda pode facilitar o trabalho corporativo.
Todos esses fatores tm por objetivo reduzir o tempo de desenvolvimento e de depurao,
otimizar a utilizao dos recursos, reduzir custos e tornar as aplicaes mais eficientes. Esses
so os benefcios que todos os ambientes de passagem de mensagens devem explorar.
6. PVM - Parallel Virtual Machine
O PVM um conjunto integrado de bibliotecas e de ferramentas de software, cuja
finalidade emular um sistema computacional concorrente heterogneo, flexvel e de propsito
geral [Geist et al. (1994)].
O projeto PVM teve incio em 1989 no Oak Ridge National Laboratory - ORNL. A verso
1.0 (prottipo), foi implementada por Vaidy Sunderam e Al Geist (ORNL) sendo direcionada
ao uso em laboratrio. A partir da verso 2 (1991), houve a participao de outras instituies

(como a University of Tennessee, Carnegie Mellon University, entre outras), quando comeou a
ser utilizado em muitas aplicaes cientficas. A verso 2 deu incio distribuio gratuita do
PVM. Depois de vrias revises (PVM 2.1 - 2.4), o PVM foi completamente reescrito, gerando
a verso 3.0 (em fevereiro de 1993). Vrias mudanas foram feitas na verso 3.0 com objetivo
de retirar erros de programao e ajustar pequenos detalhes, como oferecer uma melhor
interface para o usurio e aumentar o desempenho de certas comunicaes (como em
multiprocessadores).
Atualmente (agosto de 2001) o PVM encontra-se na sua verso 3.4 (release 3.4.3), a qual
adicionou novas caractersticas antiga verso 3.3. Dentre essas caractersticas encontram-se:
(1) contextos de comunicao, onde mensagens podem ser enviadas e recebidas com maior
segurana, visto que no h a possibilidade de outras tarefas receberem mensagens que no as
de seu contexto; (2) suporte a mensagens ativas, onde so definidos manipuladores de
mensagens que tratam automaticamente mensagens que chegam aplicao (a verificao
dessas mensagens feita atravs da tupla: source, tag e context); (3) caixas de correio de
mensagens (message mailboxes), onde as mensagens podem ser inseridas e recuperadas pelas
tarefas sem a necessidade do servidor dinmico de grupos (pvmgs). As mensagens na caixa
podem ser persistentes ou no, em funo do fato de ficarem diponveis para acesso mesmo
aps o trmino da sua tarefa criadora [Geist et al. (1997)].
6.1. O Modelo PVM
Para o desenvolvimento das aplicaes concorrentes, o PVM possibilita que sejam
utilizadas as linguagens Fortran, C e C++. A escolha por esse conjunto de linguagens deve-se
ao fato de que a maioria das aplicaes passveis de paralelizao esto escritas nessas
linguagens.
Diferente de outros ambientes portteis desenvolvidos inicialmente para mquinas com
multiprocessadores (como o P4, Express e outros), o PVM nasceu com o objetivo de permitir
que um grupo de computadores conectados, possivelmente com diferentes arquiteturas, possa
trabalhar cooperativamente formando uma mquina paralela virtual [Geist et al. (1994)].
Atualmente o PVM est disponvel para uma grande variedade de plataformas computacionais
distribudas, as quais vo desde as NOWs, at processadores vetoriais como o Cray. A tabela
6.1 relaciona apenas algumas plataformas utilizadas pelo PVM.
Das plataformas utilizadas pelo PVM, as mais populares so as NOWs baseadas em PCs,
usando tanto o sistema operacional Linux quanto o Windows. Essas plataformas apresentam
uma tima relao custo x benefcio Computao Paralela, visto que utilizam softwares de

domnio pblico e/ou j instalados nas organizaes. Embora apresentem potencialmente uma
reduo de desempenho quando comparadas a mquinas verdadeiramente paralelas, essas
plataformas tornam-se teis em cursos de graduao e ps-graduao, assim como na execuo
de certas aplicaes que se adequam s possveis limitaes do hardware.
Alliant FX/8
DEC Alpha
Sequent Balance
Bbn Butterfly TC2000
Plataforma Intel (386/486/Pentium) com Linux, BSD ou
Windows
Thinking Machines CM2 CM5
Convex C-series
C-90, Ymp, Cray-2, Cray S-MP
HP-9000 modelo 300, Hp-9000 PA-RISC
Intel iPSC/860, Intel iPSC/2 386 host
Intel Paragon
DECstation 3100, 5100
IBM/RS6000, IBM RT
Silicon Graphics
Sun 3, Sun 4, SPARCstation, Sparc multiprocessor
DEV Micro VAX
Tabela 6.1 - Alguns dos principais equipamentos que executam o PVM
Atravs do PVM uma coleo de computadores heterogneos desempenham as funes de
um computador com memria distribuda e com alto desempenho. O PVM fornece as funes
que permitem ao usurio iniciar, comunicar e sincronizar tarefas (tasks) na mquina virtual.
Uma tarefa definida como uma unidade computacional em PVM anloga aos processos
UNIX (freqentemente um processo UNIX) [Geist et al. (1994)].
O modelo computacional do PVM , portanto, baseado na noo de que uma aplicao
consiste de vrias tarefas. Cada tarefa responsvel por uma parte da carga de trabalho da
aplicao.
Uma aplicao pode ser paralelizada por dois mtodos: o paralelismo funcional e o
paralelismo de dados. No paralelismo funcional a aplicao dividida atravs das suas funes,
isto , cada tarefa desempenha um servio diferente, como por exemplo entrada, processamento
e sada.
O paralelismo de dados refere-se ao paradigma SPMD descrito anteriormente. O PVM
permite qualquer um dos mtodos, como tambm um mtodo hbrido (uma mistura dos dois).

A Figura 6.1 mostra um exemplo do modelo computacional do PVM e uma viso arquitetural
destacando a heterogeneidade do sistema.

Entrada e
Particionamento
Computador 1

Grupo 1

Ponte /
Roteador

Computador 2

MPP

SPMD

SPMD

Sada dos
Dados

Grupo 2
PVM:
Grupo 3
Viso
Uniforme de
uma Mquina
Virtual
Multiprogramada

Figura 6.1 - Sistema PVM. (a) Modelo Computacional (b) Viso Arquitetural. [Geist et al. (1994)]

6.2. Componentes
O sistema PVM composto por um processo daemon chamado Pvmd e por uma biblioteca
de rotinas conhecida como Libpvm. O Pvmd executado em cada host que compe a mquina
virtual atuando como gerenciador da mquina e roteador de mensagens. O termo mquina
virtual utilizado para designar um computador lgico com memria distribuda e o termo host
para designar um dos computadores que formam a mquina virtual.
A Libpvm contm um conjunto de primitivas que atuam como elo de ligao entre uma
tarefa e a mquina virtual (o Pvmd e as outras tarefas).
6.2.1. PVM Daemon (Pvmd)
O Pvmd pode ser instalado por qualquer usurio com um login vlido. Quando um usurio
deseja executar uma aplicao PVM, ele primeiro deve criar a mquina virtual iniciando-a com
o Pvmd. A aplicao pode ento ser iniciada a partir do prompt do sistema operacional, em
qualquer computador pertencente mquina virtual. Pode haver mais de uma mquina virtual
utilizando os mesmos equipamentos simultaneamente, sendo que uma aplicao no interfere
nas demais.

O Pvmd no faz nenhum processamento da aplicao paralela, atuando como um roteador


de mensagens, agindo como um ponto de contato entre cada host, fazendo o controle de
processos e detectando falhas.
O primeiro Pvmd (iniciado pelo usurio) designado como mestre (master), enquanto os
outros (iniciados pelo mestre) so chamados escravos (slaves). Durante a maioria das operaes
os Pvmds no possuem diferena. Apenas quando h necessidade de operaes de
gerenciamento, como criar novos Pvmds escravos e adicion-los mquina virtual, que essa
diferena aparece, pois somente o Pvmd mestre pode fazer isso.
6.2.2. Biblioteca de Comunicao (Libpvm)
A biblioteca Libpvm foi desenvolvida com o intuito de torn-la to pequena quanto
possvel, visto que compartilha o espao de endereamento com o cdigo desenvolvido pelo
usurio (a aplicao paralela).
As rotinas pertencentes Libpvm podem ser chamadas pelo usurio para efetuar passagem
de mensagens, solicitar a gerao de processos, coordenao de tarefas e solicitar modificaes
na mquina virtual.
As funes de mais alto nvel da Libpvm so as responsveis pela interface com o usurio
e so escritas de forma independente da mquina onde o PVM est executando. J as funes
de mais baixo nvel, que so dependentes da plataforma escolhida, foram separadas para
permitir a sua substituio quando h a necessidade de portabilidade.
Cada processo executado sob o controle do PVM (tarefas, PVMDs e gerenciadores de
grupos) recebem um identificador nico, conhecido como TID (Task Identifiers).
6.3. Grupos Dinmicos de Tarefas
H aplicaes onde natural o agrupamento de tarefas em grupos e h casos onde o
usurio gostaria de identificar suas tarefas por nmeros (de 0 at p-1), onde p o nmero de
tarefas. O PVM inclui o conceito de grupos dinmicos, criados pelo usurio em tempo de
execuo. Quando uma tarefa une-se a um grupo, ela recebe um nmero nico para aquele
grupo, sendo que esses nmeros comeam no 0 (zero) e aumentam gradativamente.
As funes de manipulao dos grupos foram desenvolvidas inteiramente sobre a Libpvm
e projetadas para serem transparentes para o usurio (prejudicando a eficincia). Uma tarefa
pode unir-se e deixar qualquer grupo, em qualquer instante, sem precisar comunicar outra
tarefa dos grupos afetados. Grupos podem ser sobrepostos e tarefas podem enviar mensagens
para grupos aos quais elas no pertencem.

Uma biblioteca separada (libgpvm3.a) deve ser montada com as aplicaes que fazem uso
de qualquer funo para grupos de tarefas. O Pvmd no possui nenhuma funo para grupos.
Essa tarefa manipulada por um servidor de grupos (Pvmg) iniciado automaticamente quando
a primeira funo para grupos for solicitada [Geist et al. (1994)].
7. Um Exemplo de Aplicao com o PVM
A aplicao descrita nesta seo baseada no cdigo apresentado em Geist et al. (1994) e
demonstra claramente a flexibilidade que o PVM fornece a uma aplicao concorrente. Este
exemplo permite que a aplicao, em tempo de execuo, possa: constituir a mquina virtual
paralela, inlcuir novos hosts, criar um grupo de tarefas, criar processos concorrentes (tarefas
PVM) e realizar a troca de mensagens entre essas tarefas. Embora esta aplicao no tenha a
inteno explcita de melhorar o desempenho de uma computao expecfica, ela didtica e
suficientemente completa para demonstrar vrios recursos disponveis para os usurios do
PVM.
Neste exemplo, chamado TokenRing, as tarefas formam um anel lgico que permite o
envio de uma mensagem por todas as tarefas, at que a mesma retorne tarefa inicial. A
mensagem iniciada pela 1 tarefa executada (aquela iniciada pelo usurio), denominada de
tarefa pai, passando por todas as outras at chegar novamente tarefa pai. Essa tarefa pai cria a
mquina virtual dinamicamente (linhas 27 - 39). Atravs dos argumentos na linha de comando,
uma tarefa consegue distinguir seu status (pai ou filha).
Depois de criada a mquina virtual a tarefa pai registra-se no PVM-W95 atravs da funo
pvm_mytid( ) (linha 40). A finalidade da funo pvm_mytid( ) no registrar tarefas e sim
apenas fornecer o TID da tarefa. Porm, como ela a primeira funo a ser chamada neste
algoritmo, ela realiza tambm o registro da tarefa, retornando em seguida o TID solicitado.
Pvm_setopt( ) (linha 41) permite que as mensagens entre as tarefas sejam enviadas
diretamente por uma conexo TCP, ou seja, sem que as mensagens sejam enviadas atravs dos
Pvmds.
A funo pvm_joingroup( ) (linha 42) permite que a tarefa pai crie um grupo dinmico de
tarefas (chamado anel) e permite que as tarefas filhas unam-se a este grupo. A funo
pvm_lvgroup( ) (linha 63) permite que as tarefas deixem o grupo.
Verificando o valor retornado pela funo pvm_joingroup( ), a tarefa determina se ela
uma tarefa filha ( me > 0) ou uma tarefa pai ( me == 0). Caso seja a tarefa pai, ela gera as
outras tarefas criando mltiplas cpias dela mesma (paradigma SPMD).

Todas as instncias criadas executam a funo dowork( ) sendo que a tarefa pai a
primeira a passar o token e esperar que ele passe por todo o anel lgico e retorne para ela. As
demais tarefas esperam receber o token, passando-o adiante. Os endereos para enviar e receber
o token (linhas 84 - 88) so determinados pela funo pvm_gettid( ) a qual, atravs do nmero
da tarefa no grupo, fornece o respectivo TID da tarefa desejada. O cdigo fonte deste exemplo
est descrito abaixo:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <dos.h>
#include "pvmw95.h"
#define NTAREFAS 4 // numero total de tarefas no anel logico
#define NUM_HOSTS_ESCRAVOS 3 // numero de hosts escravos
// prototipacoes
// -----------------------------------------------void dowork( int, int );
void main( int argc );
// -----------------------------------------------void main(int argc)
{
int mytid;
// identificador de tarefa local
int tid_tarefas[NTAREFAS];
// vetor de identificadores de tarefas
int me;
// numero do processo no grupo dinamico
int tid_escravos[NUM_HOSTS_ESCRAVOS]; // tid dos pvmds escravos
int block = 1;
// Pvmd mestre bloqueia ate configurar
char *hosts[] = { "host01",
"host02",
"host03 };
// se tarefa mestre, cria a maquina virtual
if(argc > 1) {
if (pvm_start_pvmd (0, (char **) 0, block) != 0)
exit (0);

// Inicia PVMD Mestre

// criando os Pvmds escravos


if( pvm_addhosts (hosts, NUM_HOSTS_ESCRAVOS,
tid_escravos) < NUM_HOSTS_ESCRAVOS)
printf("SPMD erro em pvm_addhosts ! \n");
pvm_halt();
exit(0);
}

}
mytid = pvm_mytid();
// Obtm TID da Tarefa. Registra tarefa no PVM
pvm_setopt(PvmRoute, PvmRouteDirect); // roteamento direto das mensagens
me = pvm_joingroup( anel ); // cria grupo (se no estiver criado) e/ou junta-se a ele.

44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

printf("me = %d mytid = %x \n", me, mytid);


// se tarefa mestre, cria tarefas escravas
if(me == 0)
{
if ( pvm_spawn("spmdg.exe", NULL,
PvmTaskDefault, "", NTAREFAS-1,
&tid_tarefas[1]) < (NTAREFAS-1) )
printf("SPMD erro em pvm_spawn ! \n");
}
pvm_barrier( "anel", NTAREFAS); // permite a sincronizacao das tarefas do grupo
// Todas as NTAREFAS estao sincronizadas e agora
// tero acesso s outras pelos TIDs
//--------------------------------------------------------dowork( me, NTAREFAS );
pvm_lvgroup("anel");
// desliga-se do grupo
if (me == 0)
pvm_halt();
else
pvm_exit();

// tarefa mestre, desfaz a mquina paralela virtual


// desvincula apenas a tarefa do PVM.

exit(1);
} // final da funcao main
void dowork( int me, int ntarefas)

int token;
int src, dest;
int count = 1;
int stride = 1;
int msgtag = 4;
// Determina os vizinhos no anel
src = pvm_gettid("anel", me - 1);
dest = pvm_gettid("anel", me + 1);

// obtem TID de quem receber mensagem


// obtem TID para quem enviar mensagem

if (me == 0) src = pvm_gettid("anel", ntarefas -1); // corrige extremos do anel


if (me == ntarefas-1) dest = pvm_gettid("anel", 0);
if( me == 0 ) { // tarefa mestre
token = dest;
pvm_initsend( PvmDataRaw );
pvm_pkint( &token, count, stride );
pvm_send( dest, msgtag );
pvm_recv( src, msgtag );
printf("Circuito feito ! \n");
}

// cria o buffer para transmisso


// empacota os dados para
// envia mensagem
// recebe mens.

98
99
100
101
102
103
104
105
106

else { // tarefas escravas recebem o token, passando-o adiante


pvm_recv( src, msgtag );
// recebe mensagem
pvm_upkint( &token, count, stride ); // desempacota dados
pvm_initsend( PvmDataRaw );
// cria um novo buffer
pvm_pkint( &token, count, stride ); // empacota dados
pvm_send( dest, msgtag );
// envia mensagem
}
return;
} // final da funcao dowork

8. Concluses
A computao paralela surgiu principalmente para suprir a necessidade de se aumentar a
potncia computacional. Como o aumento do desempenho nas arquiteturas de von Neumann
uma tarefa rdua e cara, devido limitao tecnolgica da poca, a computao paralela
compe uma alternativa mais barata e mais elegante, principalmente para problemas
intrinsecamente paralelos.
Vrias mquinas paralelas foram desenvolvidas com o objetivo de alcanar melhores
resultados para determinadas aplicaes e, conseqentemente, vrias classificaes foram
propostas. Em uma delas, Flynn (1972) considera os fluxos de instrues e de dados criando-se
assim quatro grupos: SISD, SIMD, MISD e MIMD. Essa classificao, embora antiga ainda
empregada.
As arquiteturas MIMD, amplamente utilizadas na atualidade, despertam grande interesse
devido sua versatilidade e alto desempenho. Os mdulos independentes de processamento
podem ser dispostos de vrias maneiras, adequando-se ao problema desejado e realizando
paralelismo em vrios nveis (normalmente granulosidade mdia ou grossa).
Por outro lado, o desempenho dos computadores pessoais e das estaes de trabalho vem
aumentando significativamente nos ltimos anos. Quando esses computadores so interligados
por uma rede de alta velocidade e alta confiabilidade, podem ser aplicados para solucionar uma
variedade de aplicaes que necessitam de grande potncia computacional.
A crescente utilizao de sistemas distribudos, com conceitos tambm utilizados pela
computao paralela (como concorrncia, tolerncia a falhas e aumento da potncia
computacional), fez com que trabalhos fossem desenvolvidos para explorar o grande potencial
da computao paralela (com baixos custos) utilizando os sistemas distribudos.
Com base nesses princpios, ambientes de passagem de mensagem foram aperfeioados
e/ou criados. Atravs de computadores autnomos e heterogneos, interligados por uma rede de
comunicao, formou-se uma arquitetura MIMD virtual, com memria distribuda que, entre
outras caractersticas, oferece melhores recursos para a execuo de aplicaes paralelas.

Quando se discute os ambientes de passagem de mensagens, os principais fatores


considerados so simplicidade, eficcia e economia. O grande objetivo permitir que
aplicaes paralelas sejam executadas em um hardware eficiente e barato (quase sempre j
instalado) e com software j conhecido pela equipe de desenvolvimento.
Com o amadurecimento dos ambientes desenvolvidos, a preocupao voltou-se para uma
padronizao geral. A padronizao visa tornar as aplicaes independentes da mquina,
permitindo que essas sejam executadas em qualquer plataforma utilizada pelo ambiente.
Permite tambm que elas sejam executadas simultaneamente em vrias plataformas, incluindo
computadores seriais, vetoriais, multiprocessadores, entre outros.
Apresentando caractersticas como simplicidade, robustez e portabilidade, o PVM destacase na literatura e na comunidade de computao paralela, como um ambiente de passagem de
mensagens amplamente discutido e utilizado. Entre alguns dos usurios PVM esto a Ford,
Boeing, Texaco, General Electric, Siemens, Mobil Oil, Cray Research, Shell Oil, IBM, entre
outros [Geist (2001)].

Referncias Bibliogrficas
ALMASI, G. S., Gottlieb A., Highly Parallel Computing, 2a. ed., The Benjamin Cummings
Publishing Company, Inc., 1994.
ANDERSON, T.E.; CULLER, D.E.; PATTERSON, D.A. A Case for Now (Networks of
Workstations). IEEE Micro, p.54-64, fevereiro, 1995.
ANDREWS, G. R., Schineider, F. B., Concepts and Notations for Concurrent Programming,
ACM Computing Survey, v. 15, no.1, pp. 3-43, 1983.
BUTLER, R. M., LUSK, E. L., Monitors, messages and clusters: The P4 parallel
programming system, Parallel Computing, v. 20, pp. 547-564, 1994.
CALKIN, R., HEMPEL, R., HOPPE, H.-C, WYPIOR, P., Portable programming with the
PARMACS message-passing library, Parallel Computing, v. 20, pp. 615-632, 1994.
CARRIERO, N. J., GELERNTER, D., MATTSON, T.G., SHERMAN, A.H. The Linda
alternative to message-passing systems, Parallel Computing, v. 20, pp. 633-655, 1994.
COULOURIS, G.; DOLLIMORE, J.; KINDBERG, T., Distributed Systems Concepts and
Design, 3a. ed., Addison-Wesley Publishing Company, 2000.
DUNCAN, R., A Survey of Parallel Computer Architectures, IEEE Computer, pp.5-16,
Fevereiro, 1990.

FLOWER, J., KOLAWA, A., Express is not just a message passing system. Current and
future directions in Express, Parallel Computing, v. 20, pp. 597-614, 1994.
FLYNN, M. J., Some Computer Organizations and Their Effectiveness, IEEE Transactions
on Computers, v. C-21, pp.948-960, 1972.
GEIST, A., BEGUELIN, A.; DONGARRA J.J.; JIANG, W; MANCHEK, R.; SUNDERAM,
R. PVM 3 Users Guide and Reference Manual, Oak National Laboratory, Setembro,
1994.
GEIST, A., PVM HOME PAGE, Recent PVM Highlights, pgina html,
http://www.epm.ornl.gov/pvm/highlight.html/, em 27 de agosto de 2001.
GEIST, G.A.; KOHL, J.A.; PAPADOPOULOS, P.M.; SCOTT, S.L. Beyond PVM 3.4: What
We've Learned What's Next, and Why. Fourth European PVM-MPI Conference - Euro
PVM/MPI'97, Lecture Notes in Computer Science v.1332, Cracow, Polnia, p.116-126,
novembro, 1997.
HWANG, K., BRIGGS, F. A., Computer Architecture and Parallel Processing, McGraw-Hill
International Editions, 1984.
HWANG, K. Scalable Parallel Computing, McGraw-Hill International Editions, 1 ed., 1998.
KRONE, O.; RAAB, M.; HIRSBRUNNER, B. Load Balancing for Network Based Multithreaded Applications. In: 5th European PVM/MPI User' s Group Meeting, Lecture Notes
in Computer Science v.1497, Liverpool, UK, p.206-214, setembro, 1998.
MCBRYAN, O. A., An overview of message passing environments, Parallel Computing, v.
20, pp. 417-444, 1994.
MEHRA, P.; WAH, B.W. Automated Learning of Load-Balancing Strategies for a Distributed
Computer System. University of Illinois at Urbana-Champaign, 1993. Disponvel em
ftp.ibr.cs.tu-bs.de
NAVAUX, P. O. A., Introduo ao processamento paralelo, RBC- Revista Brasileira de
Computao, v. 5, no 2, pp.31-43, Outubro, 1989.
RUSS, S.H.; MEYERS, B.; ROBINSON, J.; GLEESON, M.; RAJAGOPALAN, L.; TAN, CH.; HECKEL, B. User-Transparent Run-Time Performance Optimization. In: EHPC' 97 the 2nd International Workshop on Embedded HPC Systems and Applications at the 11th
IEEE International Parallel Processing Symposium, 1997.
SCHNOR, B.; PETRI, S.; LANGENDRFER, H. Load Management for Load Balancing on
Heterogeneous Plataforms: A Comparison of Traditional and Neural Network Based

Approaches. In: Second International Euro-Par Conference - Euro-Par'96, Lecture Notes


in Computer Science v.1124, Lyon, France, p.611-614, agosto, 1996.
TANENBAUM, A. S., Structured Computer Organization, 4a. ed., Prentice Hall International
Inc., 1999.
WALKER, D. W., The design of a standard message passing interface for distributed memory
concurrent computers, Parallel Computing, v. 20, pp. 657-673, 1994.

ZALUSKA E. J., Research lines in distributed computing systems and concurrent


computation, Anais do Workshop em Programao Concorrente, Sistemas
Distribudos e Engenharia de Software, pp. 132-155, 1991.

Você também pode gostar