Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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)].
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
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
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
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
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
FI
FI
..
.
F.I
Arquiteturas
Sncronas
Processadores Vetoriais
Processadores Matriciais (Arquiteturas SIMD)
Arquiteturas Sistlicas
Arquiteturas
MIMD
Arquiteturas
Assncronas
Memria Compartilhada
Memria Distribuda
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
Memria
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
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
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
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
A
cobegin
C
begin
B
cobegin
C
D
E
F
coend
G
end
H
coend
H
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
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.
transmissor
send
receptor
mensagem
Tempo
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.
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.
(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.
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);
}
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
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);
98
99
100
101
102
103
104
105
106
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.
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