MPI (Message Passing Interface)
|
|
|
- Martín Leveck Cipriano
- 7 Há anos
- Visualizações:
Transcrição
1 MPI (Message Passing Interface) Standard desenvolvido por académicos e indústria. Define rotinas, não a implementação. Não define como se criam os processos (depende da implementação) Existem várias implementações open source. 2.1
2 Communicators Definem o âmbito de uma operação de comunicação. Cada processo tem um identificar associado (rank) com o communicator. Inicialmente todos os processos pertencem a um universo designado MPI_COMM_WORLD, e cada processo tem um rank único de 0 a p - 1, com p processos. Podem ser criados outros communicators para grupos de processos. 2.2
3 Modelo de computação SPMD main (int argc, char *argv[]) { MPI_Init(&argc, &argv); // Inicializa o MPI.. MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* obtém o identificador do processo */ if (myrank == 0) else master(); slave();.. MPI_Finalize(); } // termina o mpi O código de master() e de slave() são executados pelos processos master e slave respetivamente. 2.3
4 Modelo de computação SPMD Exemplo em Python: # helloworld.py from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.get_rank() print ("hello world from process ", rank) Notas: MPI_Init é invocado quando o módulo MPI é importado do package mpi4py; MPI_Finalize() é invocado quando o processo python termina. 2.4
5 Modelo de computação SPMD Se executarmos o programa anterior com: mpiexec np 4 python helloworld.py em msmpi Output: 2.5
6 Modelo de computação SPMD Exemplo em Python: # variables.py from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.get_rank() # variável global, vai ser replicada em cada processo if rank!= 0: x = 123 # variável local print ("I'm process %s, my variable is %d" % (rank, x )) else: x = 321 print ("I'm process %s, my variable is %d" % (rank, x ) ) 2.6
7 Modelo de computação SPMD Se executarmos o programa anterior com: mpiexec np 6 python variables.py em msmpi Output: 2.7
8 Comunicação não segura - Example Process 0 Process 1 Destination send(,1, ); lib() send(,1, ); Source (a) Comportamento desejado recv(,0, ); lib() recv(,0, ); Process 0 Process 1 send(,1, ); lib() (b) Comportamento possível send(,1, ); recv(,0, ); lib() recv(,0, ); 2.8
9 Solução em MPI: Communicators Definem um domínio de comunicação conjunto de processos que podem comunicar entre si. Domínio de comunicação das bibliotecas pode ser diferente do domínio do programador Usados em todas as comunicações ponto a ponto e coletivas 2.9
10 Default Communicator MPI_COMM_WORLD Existe como primeiro comunicador para todos os processos de uma aplicação. Existe um conjunto de rotinas MPI para formar communicators. Os processos têm um rank num communicator. Existem communicators para comunicar dentro de um grupo e communicators para comunicar entre grupos 2.10
11 Comunicação MPI Point-to-Point Rotinas de send e receive com message tags e communicator. É possível usar wild cards, para o identificador do processo e para a tag 2.11
12 Rotinas MPI bloqueantes Retornam quando estão completas localmente. isto é, quando a localização usada para guardar a mensagem pode ser usada novamente ou alterada sem afetar a mensagem enviada. Send bloqueante vai enviar a mensagem e retorna - - não significa que a mensagem foi recebida, apenas que o processo emissor pode prosseguir. 2.12
13 Blocking send MPI_Send(buf, count, datatype, dest, tag, comm) Address of Datatype of Message tag send b uff er each item Number of items Rank of destination Comm unicator to send process Em python: Send(self, buf, int dest, int tag=0) Exemplo: comm.send(data, dest=1, tag=11) 2.13
14 Parameters of blocking receive MPI_Recv(buf, count, datatype, src, tag, comm, status) Address of receiv e b uff er Maxim um n umber of items to receiv e Datatype of each item Message tag Rank of source process Status after oper ation Comm unicator Em Python: Recv(self, buf, int source=any_source, int tag=any_tag, Status status=none) Exemplo: data = comm.recv(source=0, tag=11) 2.14
15 Example To send an integer x from process 0 to process 1, MPI_Comm_rank(MPI_COMM_WORLD,&myrank); /* find rank */ if (myrank == 0) { int x = 100; MPI_Send(&x, 1, MPI_INT, 1, msgtag, MPI_COMM_WORLD); } else if (myrank == 1) { int x; MPI_Recv(&x, 1, MPI_INT, 0,msgtag,MPI_COMM_WORLD,status); } 2.15
16 Example em python: from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.get_rank() if rank == 0: x = 100 comm.send(x, dest=1, tag=11) print ("I'm process %s " % rank ) elif rank ==1 : x = comm.recv(source=0, tag=11) print ("I'm process %s receive data: %s" % (rank, x)) 2.16
17 Example em python: Executando: mpiexec np 2 python exemplo.py 2.17
18 MPI Nonblocking Routines Nonblocking send - MPI_Isend() retorna imediatamente mesmo antes de ser seguro altera a localização. Nonblocking receive - MPI_Irecv() retorna mesmo que não haja mensagem para aceitar 2.18
19 Nonblocking Routine Formats MPI_Isend(buf,count,datatype,dest,tag,comm,request) MPI_Irecv(buf,count,datatype,source,tag,comm, request) Para detetar se a operação já completou: MPI_Wait() and MPI_Test(). MPI_Wait() Bloqueia até que a operação esteja concluída. MPI_Test() Retorna uma flag que indica se a operação já está completa ou não. MPI_Wait e MPI_Test são operações do parâmetro request. 2.19
20 Em Python Isend(self, buf, int dest, int tag=0) Irecv(self, buf, int source=any_source, int tag=any_tag) if rank == 0: data = {'a': 7, 'b': 3.14} req = comm.isend(data, dest=1, tag=11)... req.wait() elif rank == 1: req = comm.irecv(source=0, tag=11)... data = req.wait() print (data) 2.20
21 Example To send an integer x from process 0 to process 1 and allow process 0 to continue, MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */ if (myrank == 0) { int x; MPI_Isend(&x,1,MPI_INT, 1, msgtag, MPI_COMM_WORLD, req1); compute(); MPI_Wait(req1, status); } else if (myrank == 1) { int x; MPI_Recv(&x,1,MPI_INT,0,msgtag, MPI_COMM_WORLD, status); } 2.21
22 Modos de comunicação (Send) Standard Mode Send - Não assume que o método receive tenha começado. O MPI não define um buffer. Dependendo da implementação, o send pode terminar antes do receive começar se existir um buffer. Buffered Mode O Send pode começar e retornar antes do receive correspondente. É cecessário fornece o tamanho do buffer com a rotina MPI_Buffer_attach(). Pode ser removido com MPI_Buffer_detach() 2.22
23 Modos de comunicação (Send) Synchronous Mode - Send e receive podem começar antes um do outro, mas só podem completar ao mesmo tempo. Ready Mode O send só pode começar quando o receive correspondente é atingido. - Qualquer do 4 modos pode ser aplicado aos dois sends, bloqueante ou não bloqueante - Os modos não standard são identificados pelas letras, buffered: -b; synchronous s; ready: -r MPI_Issend() nonblocking synchronous send routine 2.23
24 Comunicação Coletiva Envolve um conjunto de processos definidos por um intracomunicador. Não existem tags nas mensagens. Operações principais: MPI_Bcast() - Broadcast from root to all other processes MPI_Gather() - Gather values from group of processes MPI_Scatter() - Scatters buffer in parts to group of processes MPI_Alltoall() - Sends data from all processes to all processes MPI_Reduce() - Combine values on all processes to single value MPI_Reduce_scatter() - Combine values and scatter results MPI_Scan() - Compute prefix reductions of data on processes 2.24
25 Barreira (Barrier) Quando cada processo atinge a barreira, é suspenso até que todos atinjam o ponto de sincronização. Em python: Barrier(self) 2.25
26 #include mpi.h #include <stdio.h> #include <math.h> #define MAXSIZE 1000 void main(int argc, char *argv) { int myid, numprocs; int data[maxsize], i, x, low, high, myresult, result; char fn[255]; char *fp; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if (myid == 0) { /* Open input file and initialize data */ strcpy(fn,getenv( HOME )); strcat(fn, /MPI/rand_data.txt ); if ((fp = fopen(fn, r )) == NULL) { printf( Can t open the input file: %s\n\n, fn); exit(1); } for(i = 0; i < MAXSIZE; i++) fscanf(fp, %d, &data[i]); } } MPI_Bcast(data, MAXSIZE, MPI_INT, 0, MPI_COMM_WORLD); /* broadcast data */ x = n/nproc; /* Add my portion Of data */ low = myid * x; high = low + x; for(i = low; i < high; i++) myresult += data[i]; printf( I got %d from %d\n, myresult, myid); /* Compute local sum */ MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf( The sum is %d.\n, result); MPI_Finalize(); Sample MPI program 2.26
27 Avaliação de programas paralelos 2.27
28 Tempo de execução sequencial, t s : Estimado contando o número de passos computacionais do melhor algoritmo sequencial Tempo de execução paralela, t p : Além do número de passos computacionais, t comp, é necessário estimar o tempo de comunicação, t comm : t p = t comp + t comm 2.28
29 Tempo de computação Contar o número de passos computacionais. Quando mais do que um processo executa simultaneamente, contar apenas as instruções do processo mais complexo. Geralmente é função do n e p. (n número de itens de dados, p número de processos) t comp = f (n, p) Geralmente este tempo é dividido em vários componentes: t comp = t comp1 + t comp2 + t comp3 + A análise geralmente é feita que os processadores são iguais e operam a igual velocidade 2.29
30 Tempo de comunicação Depende do tipo de rede ou redes utilizada. Como primeira aproximação usa-se t comm = t startup + n t data t startup - tempo de startup, corresponde ao tempo necessário para enviar uma mensagem sem dados. Assume-se constante. t data tempo de transmissão de um item de dados (data word) n número de itens de dados 2.30
31 Tempo ideal de comunicação Star tup time Number of data items ( n ) 2.31
32 Tempo final de comunicação, t comm Soma dos tempos de comunicação de todas as mensagens sequenciais enviadas por um processo. t comm = t comm1 + t comm2 + t comm3 + Assume-se que o padrão de comunicação é igual para todos os processos e ocorre em simultâneo. Basta considerar um processo. Se t startup e t data, forem medidos em unidades de passos computacionais, podemos adicionados t comp com t comm e obter o tempo de execução paralela. 2.32
33 Fatores de Benchmark Com t s, t comp, and t comm, podemos calcular o speedup e rácio computação/comunicação: Ambos são função do número de processadores, p, e do número de itens de dados, n. 2.33
34 Estes fatores dão indicação da escalabilidade da solução paralela com o aumento do número de processadores e do tamanho do problema. Exemplo: Processador de 1 GFLOPS (10 9 operações de virgula flutuante por segundo e um tempo de startup de 1µs (10-6 ) - Quantos operações pode fazer no tempo de startup? 2.34
35 Ferramentas de visualização Programas que permitem analisar a execuçao de um programa paralelo num diagrama processo/tempo Process 1 Process 2 Process 3 Computing Time W aiting Message-passing system routine Message 2.35
36 Avaliar empiricamente os programas Medindo o tempo de execução. Para medir o tempo de execução entre os pontos L1 e L2 do código, usamos uma construção do tipo:. L1: time(&t1); /* start timer */.. L2: time(&t2); /* stop timer */. elapsed_time = difftime(t2, t1); /* elapsed_time = t2 - t1 */ printf( Elapsed time = %5.2f seconds, elapsed_time); MPI fornece a rotina MPI_Wtime() que devolve o tempo (em segundos). 2.36
Computação por Passagem de Mensagens
Computação por Passagem de Mensagens Programação por passagem de mensagens Programação de multiprocessadores conectados por rede pode ser realizada: criando-se uma linguagem de programação paralela especial
Message Passing Interface - MPI
Message Passing Interface - Pedro de Botelho Marcos Maio/2008 1 Sumário Introdução; Conceitos básicos; Comunicação; Principais rotinas; Compilando e executando códigos ; Exemplos; Referências; 2 Introdução
Programação Paralela com Troca de Mensagens. Profa Andréa Schwertner Charão DLSC/CT/UFSM
Programação Paralela com Troca de Mensagens Profa Andréa Schwertner Charão DLSC/CT/UFSM Sumário Modelo de programa MPI Comunicação em MPI Comunicadores Mensagens Comunicação ponto-a-ponto Comunicação coletiva
EXERCÍCIO 1 MUDANDO AS CORES
EXERCÍCIO 1 MUDANDO AS CORES O código abaixo ilustra o uso da comunicação ponto-a-ponto e a comunicação coletiva. Nesse código, uma matriz de três cores (verde, branco, vermelho e) é distribuída para todos
Parte da Tarefa. Parte da Tarefa. Parte da Tarefa SEND RECEIVE SEND RECEIVE
Produto Escalar com MPI-2 (C++) Aula Sistemas Distribuídos Prof. Dr. Marcelo Facio Palin [email protected] 1 1 O que é Paralelismo? Conceitos Paralelismo é uma técnica usada em tarefas grandes e complexas
Arquitecturas Paralelas I Computação Paralela em Larga Escala. Passagem de Mensagens
Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI/LMCC - 4º/5º Ano Passagem de Mensagens João Luís Ferreira Sobral Departamento do Informática Universidade do Minho Novembro 2004 Passagem
Introdução a Computação Paralela: Rotinas MPI em Clusters Beowulf
Introdução a Computação Paralela: Rotinas MPI em Clusters Beowulf Miguel Dias Costa João Viana Lopes Centro de Física do Porto Estrutura do Curso Motivação Estrutura do Curso Motivação Conceitos de Computação
Introdução. Programação Paralela. Motivação. Conhecimento do Hardware. Análise de Desempenho. Modelagem do Problema
Introdução Programação Paralela Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Programação paralela é a divisão de um problema em partes, de maneira que essas partes possam ser executadas paralelamente
Programação Paralela. Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes
Programação Paralela Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes Introdução Programação paralela é a divisão de um problema em partes, de maneira que essas partes possam ser executadas paralelamente
Algoritmos Paralelos usando CGM/MPI. Edson Norberto Cáceres e Siang Wun Song DCT/UFMS e DCC/IME/USP Aula 05
Algoritmos Paralelos usando CGM/MPI Edson Norberto Cáceres e Siang Wun Song DCT/UFMS e DCC/IME/USP Aula 05 Algoritmos Paralelos BSP/CGM Objetivos Descrever algumas das principais técnicas para o desenvolvimento
QUEBRA DE SENHAS MD5 UTILIZANDO MDCRACK E MPI
UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TÉCNOLOGIA CURSO DE CIÊNCIA DA COMPUTAÇÃO QUEBRA DE SENHAS MD5 UTILIZANDO MDCRACK E MPI Cicero Augusto de Lara Pahins, Cristiano Reis dos Santos. Professora:
Programação Paralela. Simone de Lima Martins Agosto/2002
Programação Paralela Simone de Lima Martins Agosto/2002 Computação por Passagem de Mensagens Arquitetura de computadores que utilizam passagem de mensagens Computadores conectados por uma rede estática
Programação Paralela em Memória Compartilhada e Distribuída
Programação Paralela em Memória Compartilhada e Distribuída Prof. Claudio Schepke [email protected] Prof. João V. F. Lima [email protected] (baseado em material elaborado por professores
PROGRAMAÇÃO PARALELA USANDO MPI
PROGRAMAÇÃO PARALELA USANDO MPI Maurílio Boaventura DCCE/IBILCE/UNESP São José do Rio Preto - SP Nos computadores convencionais, um programa é um conjunto de instruções que são transmitidas à unidade de
Universidade de Coimbra - Faculdade de Ciências e Tecnologia Departamento de Matemática
Universidade de Coimbra - Faculdade de Ciências e Tecnologia Departamento de Matemática COMPUTAÇÃO PARALELA - 2005/2006 4ºANO PROBLEMA 1 DETERMINAÇÃO DOS NÚMEROS PRIMOS *** RELATÓRIO *** Sara Catarina
Paralela e Distribuída. com o MPI e o OpenMP
Programação Paralela e Distribuída Programação Híbrida com o e o OpenMP e OpenMP Uma forma de executar um programa em paralelo num cluster multiprocessor é criar um processo por cada processador. Nesse
Programação Paralela Avançada. N. Maillard - M. Cera
Programação Paralela Avançada N. Maillard - M. Cera Programação Paralela Avançada Introdução Geral 2 Programação Paralela é crítica 3 Programação Paralela é difícil Em nível conceitual + em nível técnico.
Clusters de Alto Desempenho e programação distribuída
Roteiro da apresentação Clusters de Alto Desempenho e programação distribuída Nicolas Maillard Instituto de Informática UFRGS 2008 O contexto: do Processamento de Alto Desempenho à programação paralela...
2 Arquitetura Paralela
1 Resumo Esta monografia tem como objetivo o desenvolvimento de uma ferramenta para auxiliar no desenvolvimento de programa que utilizam a biblioteca MPI Esta ferramenta mostra ao usuário qual a carga
Programação em Paralelo OpenMP
Programação em Paralelo OpenMP N. Cardoso & P. Bicudo Física Computacional - MEFT 2012/2013 N. Cardoso & P. Bicudo Programação em Paralelo: OpenMP 1 / 15 Introdução Potencial do GPU vs CPU Cálculo: 367
SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos
Funções SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves ICMC/USP São Carlos Slides baseados no material gentilmente cedido pela Profa Simone Senger Souza 2 MODULARIZAÇÃO Um
Relatório Trabalho 1 Programação Paralela
Relatório Trabalho 1 Programação Paralela Gustavo Rissetti 1 Rodrigo Exterckötter Tjäder 1 1 Acadêmicos do Curso de Ciência da Computação Universidade Federal de Santa Maria (UFSM) {rissetti,[email protected]
Programação de Computadores II
Programação de Computadores II 1. Programação Básica 2019.1 Slides adaptados do material de Karina Mochetti Problema, Algoritmo, Programa Um programa de computador é a implementação de um algoritmo para
TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI
Anais do Conic-Semesp. Volume 1, 2013 - Faculdade Anhanguera de Campinas - Unidade 3. ISSN 2357-8904 TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI CATEGORIA: CONCLUÍDO ÁREA:
Computação 2. Aula 8. Profª. Fabiany Arquivos
Computação 2 Aula 8 Arquivos Profª. Fabiany [email protected] E/S com Arquivos A linguagem C não possui nenhum comando de E/S. Todas as operações de E/S ocorrem mediante chamadas a funções de biblioteca
1 - CONCEITOS BÁSICOS
1 ÍNDICE Capítulo 1 - CONCEITOS BÁSICOS 1.1 - O QUE É PARALELISMO?... 1.2 - PRA QUE PARALELIZAR?... 1.3 - TIPOS DE PARALELISMO... 1.4 - AMBIENTE PARALELO... 1.5 PROGRAMAÇÃO PARALELA... 1.6 - COMO PROGRAMAR
Linguagem Chapel. Walter Perez Urcia. Universidade de São Paulo Instituto de Matemática e Estadística Departamento de Ciências da Computação
Linguagem Chapel Walter Perez Urcia Universidade de São Paulo Instituto de Matemática e Estadística Departamento de Ciências da Computação 17 de junho de 2015 Walter Perez (IME - USP) Linguagem Chapel
Comunicação entre Processos Memória Compartilhada
Comunicação entre Processos Memória Compartilhada 3/23/17 1 Métodos de comunicação entre processos Memória compartilhada Sinais Pipes Troca de mensagens Memória Compartilhada Memória compartilhada Permite
Comunicação Interprocessos
Comunicação Interprocessos Programação Paralela e Distribuída Conceito de Programa e Execução Graduação em Ciência da Computação Universidade do Vale do Rio dos Sinos Prof. Gerson Cavalheiro Programação
Programação: Vetores
Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia
Criação de Processos Fork( ) Exec( )
Criação de Processos Fork( ) Exec( ) 8/23/18 1 Chamadas de Sistema: Process Management 2 Chamada fork( ) / exec( ) 3 Esboço de uma shell while (TRUE) { /* repeat forever */ type_prompt( ); /* display prompt
Linguagem C. André Tavares da Silva.
Linguagem C André Tavares da Silva [email protected] Variáveis Posição nomeada de memória que é usada para guardar um valor que pode ser modificado pelo programa. Todas as variáveis devem ser
Programação Estruturada
Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada
FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara
Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos
Métodos Computacionais
Métodos Computacionais Objetivos da Disciplina e Introdução a Linguagem C Construções Básicas Objetivos da Disciplina Objetivo Geral Discutir técnicas de programação e estruturação de dados para o desenvolvimento
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C 1 2 Condicional 1 Se 'C' é verdadeira Então?; 3 Condicional 1 Se 'C' é verdadeira Então? if (C)?; 4 Condicional 2 Se 'C' é verdadeira Então? Senão?? 5 Condicional
Introdução à Programação
Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C
PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C 1 Instruções de Entrada Entrada/Leitura de dados Introduzir um valor inteiro/real para X 2 Instruções de Entrada Entrada/Leitura de dados Introduzir um valor inteiro/real
ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza
ESTRUTURAS CONDICIONAIS Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURA CONDICIONAL ESTRUTURA DE REPETIÇÃO 2 Estruturas Condicionais
5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.
3636363636363636363636363636363636363636363636363636 5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios. 5.1 - Comandos
Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas
Programação MEAer e LEE Bertinho Andrade da Costa 2010/2011 1º Semestre Instituto Superior Técnico Argumentos da linha de comando Funções recursivas Programação 2010/2011 DEEC-IST Arg. da linha de comando;
Comunicação orientada a mensagens
Comunicação orientada a mensagens críticas a RPC sincronismo modelo um a um dificuldades de tratamento de falhas dificuldades com arquiteturas não clienteservidor volta ao modelo de troca de mensagens
Ponteiros e Tabelas. K&R: Capítulo 5
Ponteiros e Tabelas K&R: Capítulo 5 Ponteiros e Tabelas Ponteiros e endereços Ponteiros e argumentos de funções Ponteiros e tabelas Alocação dinâmica de memória Aritmética de ponteiros Tabelas de ponteiros
COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0
COMPUTAÇÃO PARALELA uma visão geral Guilherme Galante v.2.0 Guilherme Galante Bacharel em Informática Unioeste (2003) Mestre em Ciência da Computação UFRGS (2006) Professor Assistente do curso de Informática/Ciência
