Buscar

Arquitetura de Sistemas Distribuídos Bibliotecas Material Teórico

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
 
Parallel Virtual Machine (PVM) e Message Passing Interface (MPI) 
 
A abstração não existe no MPI, pois não possui o conceito de máquina virtual 
paralela. Na verdade, o MPI está mais voltado para o conceito de message 
passing. 
 
No PVM, ao contrário, é possível considerar a coleção de máquinas como um 
único recurso computacional. 
 
O controle de processos é muito maior no PVM, já que se permite iniciar, 
interromper e controlar processos em tempo de execução, ao passo que, no 
MPI, o controle é bastante restrito – permite-se somente o controle de grupo 
de tarefas. 
 
Quanto aos recursos, o PVM torna-se bastante dinâmico pelo próprio conceito 
de máquina virtual paralela, permitindo uma abstração que não é suportada 
pelo MPI, no qual o controle de recursos é totalmente estático. 
 
Quanto à topologia, o PVM exige que o programador arranje, manualmente, 
tarefas em grupos, obedecendo a uma determinada organização diferente do 
MPI, que, embora não possua o conceito de PVM, provê um alto nível de 
abstração em termos de topologia. 
 
O MPI inclui conceitos como rank1, group2 e communicator3, que permitem um 
gerenciamento do uso de cada máquina do cluster. 
 
1 
Rank 
 
Cada processo tem uma identificação única e crescente. 
 
2 Group 
 
Conjunto ordenado de processos. 
 
3 Communicator 
 
 
2 
 
 
Veja, a seguir, um exemplo de um programa em C que cria dois grupos de 
processos diferentes que requerem a criação de novos comunicadores: 
 
#include "mpi.h" 
#include <stdio.h> 
#define NPROCS 8 
 
int main(argc, argv) 
 int argc;char *argv[]; { 
 int rank,new_rank,sendbuf,recvbuf,numtasks,ranks1[4] = {0,1,2,3}, 
 ranks2[4] = {4,5,6,7}; 
 MPI_Group orig_group, new_group; 
 MPI_Comm new_comm; 
 
 MPI_Init(&argc, &argv); 
 MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
 MPI_Comm_size(MPI_COMM_WORLD, &numtasks); 
 
 if (numtasks != NPROCS) { 
 printf("Deve especificar MP_PROCS= %d. Terminando.\n", NPROCS); 
 MPI_Finalize(); 
 exit(0); 
 } 
 
 sendbuf = rank; 
 
 /* Extrai o grupo original */ 
 MPI_Comm_group(MPI_COMM_WORLD, &orig_group); 
 
 /* Divide tarefas em dois grupos distintos baseados no ''rank'' */ 
 if (rank < NPROCS / 2) { 
 MPI_Group_incl(orig_group, NPROCS/2, ranks1, &new_group); 
 } else { 
 MPI_Group_incl(orig_group, NPROCS/2, ranks2, &new_group); 
 } 
 
/* Cria novos comunicadores e então realiza comunicação coletiva. */ 
 MPI_Comm_create(MPI_COMM_WORLD, new_group, &new_comm); 
 MPI_Allreduce(&sendbuf, &recvbuf, 1, MPI_INT, MPI_SUM, new_comm); 
 
 MPI_Group_rank(new_group, &new_rank); 
 
 
Coleção de grupos. 
 
 
3 
 
 printf("rank= %d newrank= %d recvbuf= %d\n", rank, new_rank, recvbuf); 
 
 MPI_Finalize(); 
} 
 
Fonte: http://pt.wikipedia.org/wiki/Message_Passing_Interface. 
 
Pthreads – POSIX Threads 
 
Bibliotecas que implementam o padrão de POSIX threads – Portable Operating 
System Interface (POSIX) – são normalmente chamadas de Pthreads. 
 
O pacote de threads POSIX fornece funções para criação e exclusão dinâmicas 
de threads. Dessa forma, não é necessário informar, inicialmente, o número 
de threads até a execução da aplicação. 
 
O exemplo a seguir mostra duas threads executando ao mesmo tempo, ou 
seja, realizando um trabalho concorrente: 
 
include <pthread.h> 
#include <stdlib.h> 
#include <stdio.h> 
 
typedef struct 
{ 
 int id; 
} thread_arg; 
 
void *thread(void *vargp); 
 
 
 
4 
 
int main() 
{ 
 pthread_t tid[2]; 
 thread_arg a[2]; 
 int i = 0; 
 int n_threads = 2; 
 
 
 //Cria as threads 
 for(i=0; i<n_threads; i++) 
 { 
 a[i].id = i; 
 pthread_create(&(tid[i]), NULL, thread, (void *)&(a[i])); 
 } 
 
 // Espera que as threads terminem 
 for(i=0; i<n_threads; i++) 
 { 
 pthread_join(tid[i], NULL); 
 } 
 
 pthread_exit((void *)NULL); 
} 
 
void *thread(void *vargp) 
 
 
5 
 
{ 
 int i = 0; 
 thread_arg *a = (thread_arg *) vargp; 
 
 printf("Comecou a thread %d\n", a->id); 
 // Faz um trabalho qualquer 
 for(i = 0; i < 1000000; i++); 
 printf("Terminou a thread %d\n", a->id); 
 
 pthread_exit((void *)NULL); 
} 
 
 
 
Fonte: 
http://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Paralela_em_Arquiteturas_Multi-
Core/Programa%C3%A7%C3%A3o_em_Pthreads.

Outros materiais