Aula 5 Computação Distribuída de Alto Desempenho

Tamanho: px
Começar a partir da página:

Download "Aula 5 Computação Distribuída de Alto Desempenho"

Transcrição

1 CBPF Centro Brasileiro de Pesquisas Físicas Aula 5 Computação Distribuída de Alto Desempenho Marcelo Portes de Albuquerque Nilton Alves Marcelo Giovanni Rio de Janeiro 17 a 28 de julho de 2006

2 Sumário Aula Programa C++ (Orientação Objeto) 2. Laboratórios rios MPI Básico e Avançado ado 3. Charm++ Rio de Janeiro 2

3 Exemplo em C++ 1. Programação Estruturada x OO // // classe contador class contador{ private: unsigned int valor; public: contador( ){ ){ // // --- Construtor valor = 0; 0; OK! // // Programa principal void main(){ contador cont; unsigned int x; x; cout << << \nvalor inicial:"; cin >> >> x; x; cont.inicializa(x); void inicializa(unsigned int val){ valor = val; void incremento( ){ ){ if if (valor < 65535) valor++; void decremento( ) { if if (valor > 0) 0) valor--; cont.incremento(); cont.incremento(); cout << << \nvalor final: << << cont.get_valor(); ; ; unsigned int get_valor( ){ ){ return valor; Rio de Janeiro 3

4 Como Utilizar o MPI? Bibliotecas Adicione em seus programas o seguintes include para programas em C #include mpi.h Rotinas MPI Escreva seu programa fazendo chamadas às rotinas MPI Para a compilação e linkedição utilizar os comandos: mpicc [fonte.c] -o [executável] [parâmetros] Obs: O comando mpicc aceita os argumentos de compilação do compilador C Execução mpirun -[argumentos] [executável] Exemplo: mpirun -np 5 a.out (executa a.out em 5 processadores) Nomenclatura das Rotinas MPI rc = MPI_Xxxxx(parâmetros,...); rc é uma variável inteira que recebe um código de erro Exemplo: MPI_Init (int *argc, char *argv[ ]) Exemplos usando o MPICH, desenvolvido pelo ARNL - Argonne National Laboratory e pelo MSU Mississipi State University. 4

5 MPI_Init Inicia um processo MPI Inicializa o processo MPI no processador Deve ser a primeira rotina a ser chamada por cada processo Estabelece o ambiente necessário para executar o MPI Sincroniza a inicialização de todos os processos Sintaxe (em C): int MPI_Init (int *argc, char *argv[]) Parâmetros: argc Quantidade de parâmetros da linha de comando argv ponteiro para os parâmetros da linha de comando #include <stdio.h> #include "mpi.h main(int argc, char *argv[]){ int ret; ret = MPI_Init(&argc, &argv); if (ret < 0){ printf ("Nao foi possivel inicializar o processo MPI!\n"); return; else... 5

6 MPI_Comm_rank Identifica um processo MPI dentro de um determinado grupo Retorna sempre um valor inteiro entre 0 e n-1, onde n é o número de processos Sintaxe (em C) : int MPI_Comm_rank (MPI_Comm comm, int *rank) Parâmetros: comm - Comunicador do MPI rank - Variável inteira com o número de identificação do processo #include <stdio.h> #include "mpi.h" main(int argc, char *argv[]){ int mpierr, rank; mpierr = MPI_Init(&argc, &argv); if (mpierr < 0){ printf ("Nao foi possivel inicializar o processo MPI!\n"); return; else{ MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf ("Minha identificação no MPI e':%d\n",rank);... 6

7 MPI_Comm_Size Retorna o número de processos dentro de um grupo Sintaxe (em C): int MPI_Comm_size (MPI_Comm comm, int *size) Parâmetros: comm: Comunicador do MPI size: Variável interna que retorna o número de processos iniciados pelo MPI #include <stdio.h> #include "mpi.h" main(int argc, char *argv[]){ int mpierr, rank, size; mpierr = MPI_Init(&argc, &argv); if (mpierr < 0){ printf ("Nao foi possivel inicializar o processo MPI!\n"); return; else{ MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf ("Minha identificação no MPI e':%d\n",rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf("o numero de processos e': %d\n",size);... 7

8 MPI_Send Rotina para envio de mensagens no MPI utiliza o modo de comunicação "blocking send" (envio bloqueante), o que traz maior segurança na transmissão da mensagem Sintaxe (em C): int MPI_Send (void *sndbuf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm) Parâmetros: Sndbuf count dtype dest tag comm - Identificação do buffer (endereço de onde os dados serão enviados) - Número de elementos a serem enviados - Tipo de dado - Identificação do processo destino - Rótulo (label) da mensagem - MPI Communicator 8

9 MPI_Send #include <stdio.h> #include "mpi.h" main(int argc, char *argv[]){ int mpierr, rank, size, tag=100, i; char message[20]; mpierr = MPI_Init(&argc, &argv); if (mpierr < 0){ printf ("Nao foi possivel inicializar o processo MPI!\n"); return; else { MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf ("Minha identificação no MPI e':%d\n",rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf("o numero de processos e': %d\n",size); if (rank == 0){ // strcpy(message,"ola', Mundo!\n"); for (i=1; i<size; i++) MPI_Send(message, 13, MPI_CHAR, i, tag, MPI_COMM_WORLD); else... int MPI_Send (void *sndbuf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm) 9

10 MPI_Recv Rotina para recepção de mensagens no MPI utiliza o modo de comunicação "blocking receive" (recepção bloqueante), de forma que o processo espera até que a mensagem tenha sido recebida Sintaxe (em C): int MPI_Recv (void *sendbuf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Status status) Parâmetros: sndbuf - Identificação do buffer de onde os dados serão armazenados count - Número de elementos a serem recebidos dtype - Tipo de dado source - Identificação do processo emissor tag - Rótulo (label) da mensagem comm - MPI Communicator status - Vetor de informações envolvendo os parâmetros source e tag 10

11 MPI_Recv #include <stdio.h> #include "mpi.h main(int argc, char *argv[]){ int mpierr, rank, size, tag=100, i; MPI_Status status; char message[20]; mpierr = MPI_Init(&argc, &argv); if (mpierr < 0){ printf ("Nao foi possivel inicializar o processo MPI!\n"); return; else{ MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf ("Minha identificação no MPI e':%d\n",rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf("o numero de processos e': %d\n",size); if (rank == 0){ strcpy(message,"ola', Mundo!\n"); for (i=1; i < size; i++) MPI_Send(message, 13, MPI_CHAR, i, tag, MPI_COMM_WORLD); else{ MPI_Recv(message, 20, MPI_CHAR, 0, tag, MPI_COMM_WORLD, &status); printf("mensagem do no' %d : %s\n", rank, message);... int MPI_Recv (void *sendbuf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Status status) 11

12 MPI_Finalize Finaliza um processo MPI Última rotina a ser chamada por cada processo. Sincroniza todos os processos na finalização de uma aplicação MPI Sintaxe (em C) int MPI_Finalize (void) Parâmetros: (Nenhum) 12

13 MPI_Finalize #include <stdio.h> #include "mpi.h OK! main(int argc, char *argv[]){ int mpierr, rank, size, tag=100, i; MPI_Status status; char message[20]; mpierr = MPI_Init(&argc, &argv); if (mpierr < 0){ printf ("Nao foi possivel inicializar o processo MPI!\n"); return; else{ MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf ("Minha identificação no MPI e':%d\n",rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf("o numero de processos e': %d\n",size); if (rank == 0){ strcpy(message,"ola', Mundo!\n"); for (i=1; i < size; i++) MPI_Send(message, 13, MPI_CHAR, i, tag, MPI_COMM_WORLD); else MPI_Recv(message, 20, MPI_CHAR, 0, tag, MPI_COMM_WORLD, &status); printf("mensagem do no' %d : %s\n", rank, message); MPI_Finalize(); 13

14 MPI_Finalize Output OK! Job started at Mon Jul 17 16:56:31 BRST 2006 Minha identificação no MPI e':1 O numero de processos e': 4 Mensagem do no' 1 : Ola', Mundo! Minha identificação no MPI e':3 O numero de processos e': 4 Mensagem do no' 3 : Ola', Mundo! Minha identificação no MPI e':2 O numero de processos e': 4 Mensagem do no' 2 : Ola', Mundo! Minha identificação no MPI e':0 O numero de processos e': 4 Mensagem do no' 0 : Ola', Mundo! Job ended at Mon Jul 17 16:56:31 BRST

15 MPI_Bcast Enviando dados para todos os processos Diferentemente da comunicação ponto-a-ponto, na comunicação coletiva é possível enviar/receber dados simultaneamente de/para vários processos. Sintaxe (em C) int MPI_Bcast (void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) Parâmetros: buffer - Endereço do dado a ser enviado count - Número de elementos a serem enviados datatype - Tipo do dado root - Identifica o processo que irá efetuar o broadcast (origem) tag - Variável inteira com o rótulo da mensagem comm - Identifica o Communicator Dados Dados processadores A0 Bcast processadores A0 A0 A0 A0 15

16 MPI_Bcast #include <stdio.h> #include "mpi.h" OK! main(int argc, char *argv[]){ int mpierr, rank, size, *index; char message[20]; mpierr = MPI_Init(&argc, &argv); if (mpierr < 0){ printf ("Nao foi possivel inicializar o processo MPI!\n"); return; else{ MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); if (rank==0) Rank 0 define a mensagem a ser enviada strcpy(message,"mensagem do no 0\n"); MPI_Bcast(message, 20, MPI_CHAR, 0, MPI_COMM_WORLD); printf("a mensagem recebida pelo rank (%d) foi: %s", rank, message); MPI_Finalize(); Rank 0 envia para os os outros ranks int MPI_Bcast (void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) 16

17 MPI_Bcast Output OK! Job started at Mon Jul 17 18:29:40 BRST 2006 A mensagem recebida pelo rank (1) foi: Mensagem do no 0 A mensagem recebida pelo rank (3) foi: Mensagem do no 0 A mensagem recebida pelo rank (0) foi: Mensagem do no 0 A mensagem recebida pelo rank (2) foi: Mensagem do no 0 Job ended at Mon Jul 17 18:29:40 BRST 2006 Dados Broadcast Dados r0 Mensagem do no 0\n message [] Mensagem do no 0\n message [] r0 processadores r1 r2 message [] message [] Mensagem do no 0\n message [] Mensagem do no 0\n message [] r1 r2 processadores r3 message [] Mensagem do no 0\n message [] r3 17

18 MPI_Scatter Envia mensagens coletivamente Envio de mensagens para um subgrupo de processos. A mensagem pode ser segmentada e enviada para processos diferentes Sintaxe (em C): int MPI_Scatter (void *sbuf,int scount,mpi_datatype stype, void *rbuf, int rcount,mpi_datatype rtype,int root, MPI_Comm comm) Parâmetros: sbuf scount stype rbuf rcount rtype root comm - Endereço dos dados a serem distribuídos - Número de elementos enviados para cada processo - Tipo do dado a ser enviado - Endereço onde os dados serão armazenados - Quantidade de dados recebidos - Tipo do dado recebido - Identifica o processo que irá distribuir os dados - Identifica o Communicator Dados Dados processadores A0 A1 A2 A3 Scatter processadores A0 A1 A2 A3 18

19 MPI_Scatter #include "mpi.h" #include <stdio.h> #define SIZE 4 OK! int main(int argc, char *argv[]) { int numtasks, rank, sendcount, recvcount, source; float sendbuf[size][size] = { {1.0, 2.0, 3.0, 4.0, {5.0, 6.0, 7.0, 8.0, {9.0, 10.0, 11.0, 12.0, {13.0, 14.0, 15.0, 16.0; float recvbuf[size]; buffer de envio buffer de recepção MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); if (numtasks == SIZE){ source = 0; Rank 0 distribui para todos sendcount = SIZE; recvcount = SIZE; MPI_Scatter(sendbuf, sendcount, MPI_FLOAT, recvbuf, recvcount, MPI_FLOAT, source, MPI_COMM_WORLD); printf(" Results (%d): %3.0f %3.0f %3.0f %3.0f\n",rank, recvbuf[0], recvbuf[1], recvbuf[2], recvbuf[3]); else printf("must specify %d processors. Terminating.\n",SIZE); MPI_Finalize(); int MPI_Scatter (void *sbuf,int scount,mpi_datatype stype, void *rbuf, int rcount,mpi_datatype rtype,int root, MPI_Comm comm) 19

20 MPI_Scatter Output OK! Job started at Mon Jul 17 18:38:05 BRST 2006 Results (1): Results (3): Results (2): Results (0): Job ended at Mon Jul 17 18:38:05 BRST 2006 processadores Dados r sendbuf r1 r2 Scatter Dados 2 3 recvbuf 6 7 recvbuf recvbuf r0 r1 r2 processadores r recvbuf 16 r3 20

21 MPI_Gather Coleta mensagens dos processos Sintaxe: int MPI_Gather (void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int root, MPI_Comm comm) Parâmetros: sbuf scount stype rbuf rcount rtype root comm - Endereço inicial do dado a ser coletado - Número de dados a serem coletados - Tipo do dado a ser coletado - Endereço onde os dados serão armazenados - Número de elementos recebidos por processo - Tipo do dado recebido - Identifica o processo que irá efetuar a coleta - Identifica o Communicator Dados Dados processadores A0 A1 A2 A3 Gather processadores A0 A1 A2 A3 21

22 MPI_Gather #include <stdio.h> #include "mpi.h" #define SIZE 4 OK! int main(int argc, char *argv[]) { int numtasks, rank, sendcount, recvcount, source, i; float recvbuf[size][size]; float sendbuf[size]; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); if (numtasks == SIZE){ for (i=0;i<size;i++) sendbuf[i]=(float) rank * SIZE + i; Prepara buffer de envio Rank 0 recebe de todos source = 0; sendcount = SIZE; recvcount = SIZE; MPI_Gather(sendbuf, sendcount, MPI_FLOAT, recvbuf, recvcount, MPI_FLOAT, source, MPI_COMM_WORLD); if (rank==source) for (i=0;i<size;i++) printf("results (%d): %3.0f %3.0f %3.0f %3.0f\n", rank, recvbuf[i][0], recvbuf[i][1], recvbuf[i][2], recvbuf[i][3]); else printf("especifique %d processadores. Abortado.\n",SIZE); MPI_Finalize(); int MPI_Gather (void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int root, MPI_Comm comm) 22

23 MPI_Gather Output OK! Job started at Mon Jul 17 19:24:01 BRST 2006 Results (0): Results (0): Results (0): Results (0): Job ended at Mon Jul 17 19:24:02 BRST 2006 Dados Gather Dados processadores r0 r1 r Sendbuf 5 6 Sendbuf 9 10 Sendbuf recvbuf r0 r1 r2 processadores r sendbuf 15 r3 23

24 MPI_Reduce Realiza uma computação de todos os processos Todos os processos executam uma operação, onde o resultado parcial de cada processo é combinado e retornado para um processo específico Sintaxe (em C) int MPI_Reduce (void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) Parâmetros sbuf rbuf count datatype op root comm - Endereço do dado a ser enviado; - Endereço do dado a ser recebido; - Número de elementos a serem distribuídos; - Tipo do dado a ser computado; - Operaçâo a ser executada; - Processo que irá receber o resultado da operação; - Identifica o Communicator; 24

25 MPI_Reduce Operações Possíveis Função MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND MPI_BAND MPI_LOR MPI_BOR MPI_LXOR MPI_BXOR MPI_MAXLOC MPI_MINLOC Significado Valor máximo Valor mínimo Somatório dos valores Produtório dos valores E (AND) lógico E (AND) lógico a nível de BIT OU (OR) lógico OU (OR) lógico a nível de BIT OU-EXCLUSIVO (XOR) lógico OU-EXCLUSIVO (XOR) lógico a nível de BIT Valor máximo de maior índice Valor mínimo de menor índice C int, float int, float int, float int, float int int int int int int int, float int, float 25

26 MPI_Reduce #include "mpi.h" #include <stdio.h> #define SIZE 4 int main(int argc, char *argv[]){ int numtasks, rank; int recvbuf, sendbuf; Em cada processo sendbuf recebe o valor de rank OK! MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); sendbuf=rank; Rank 0 recebe o valor máximo if (numtasks == SIZE){ MPI_Reduce(&sendbuf, &recvbuf, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD); if (rank==0) printf("maior = %d\n", recvbuf); else printf("especifique %d processadores. Abortado.\n",SIZE); MPI_Finalize(); int MPI_Reduce (void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) 26

27 MPI_Reduce Output OK! Job started at Mon Jul 17 19:21:59 BRST 2006 Maior = 3 Job ended at Mon Jul 17 19:21:59 BRST 2006 r0 Dados 0? sendbuf recvbuf Reduce MAX 0 1 r0 Dados 0 3 sendbuf recvbuf processadores r1 r2 1 sendbuf 2 sendbuf? recvbuf? recvbuf 2 3 processadores r1 r2 1 sendbuf 2 sendbuf? recvbuf? recvbuf r3 3 sendbuf? recvbuf r3 3 sendbuf? recvbuf 27

28 Outras Rotinas Avançadas MPI_Wtime Retorna (em precisão numérica dupla) o número de segundos decorridos desde algum tempo no passado MPI_Wtick Retorna (em valor real) a precisão de tempo computada pelo comando MPI_Wtime MPI_Get_processor_name Retorna o nome da máquina onde um dado processo está executando... 28

29 4. Laboratórios Organização dos Labs Local: Prédio Min. João Alberto, 4º Andar, Laboratórios 1 e 3 Divisão da Turma em 2 Grupos Grupo 1: 14h 15h A até J Grupo 2: 15h 16h L até Z Cluster dedicado à VI Escola: 6 CPUs Login: esc1 Password: cbpf Quinta (19/07) Equação do segundo grau Compilação Script pbs Sexta (19/07) MPI básico MPI avançado Integral em mpi charm++ Cluster do CBPF andar térreo do prédio anexo 29

30 4. Laboratórios Integração Numérica O conceito de integral está ligado ao problema da determinação da área de uma figura plana qualquer Integral de uma função f(x) no intervalo [a,b] f(x) F ( x) f ( x) dx Em determinados casos não = b a podemos calcular F(x) ou a sua obtenção não é simples Em situações práticas nem sempre se tem a forma analítica da função f(x) a ser integrada, mas sim uma tabela de pontos que descreve o comportamento da função a b x Nestes casos, utilizamos a integração numérica 30

31 4. Laboratórios Regra dos Trapézios A idéia básica é a substituição da função f(x) por uma aproximação no intervalo [a,b] Integrando no intervalo [x 0, x 1 ] teremos x x 0 1 f h ( x) dx [ f ( x ) + f ( x )] h = x 1 x onde 0 f(x) O que é a fórmula da área do trapézio, como mostrado na figura b B A = (B + b) * h / 2 x 0 h x 1 x 31

32 4. Laboratórios Regra dos Trapézios... Quanto maior for o intervalo, maior será o erro do método O que se utiliza é subdividir o intervalo em vários pedaços, calcular a área de cada um deles e em seguida somar todos F( x) F( x) n 1 i= 0 h 2 h ( f ( x 2 [ f ( x ) + f ( x )] 0 i ) + f ( x 1 i+ 1 )) + h ( f 2 ( x 1 ) + f ( x 2 )) h ( f ( x 2 n 1 ) + f ( x n )) f(x) n = 8 i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 x 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 32

33 Implementação em MPI 4. Laboratórios Passo p Cálculos parciais Σ r1 rank 0 f(x) Σ r2 Σ r3 + Resultado Final Σ r4 Atenção rank 1 rank 2 rank 3 rank 4 x 0 x 1 x 2 x 3 = x4 x 0 # P x 4 x x 0 precisão x 0 + p result_parcial=0; for ( i = (rank-1)*delta; i+p-precisao < (rank)*delta; i+=p ){ ){ result_parcial += += p * 0.5 * ( f(i)+ f(i+inc-precisao) ); ); 33

34 Exemplo 4. Laboratórios Cálculo da integral com f(x) = x no intervalo [ 0,10 ] 1 = x dx 0 = 50 Cálculo da integral com f(x) = e x no intervalo [ 0,1 ] h F F F = b a 10 = 0,1 ( x ) h ( f (0 ) + 2 ( x ) h 0 ( e + 2 e 2 ( x ) 1,72 2 f (0,1) 0, e + 0, f e 1 (0,9 ) + f (1)) Resultado = > mpicc mpi_integral.c -o mpi_integral.x -lm 34

35 Hello Charm++ (Objects Array) # processadores = 6 2 Classes Main e Hello nelements = 10 objetos Hello (array objetos) Main Main done Main Main done Main.done() Hello Hello SayHi(int n) arr[0].sayhi(17) Hello SayHi(n) arr[1].sayhi(17+1) Hello SayHi(n)... arr[9].sayhi(17+9) Hello SayHi(n) arr[0] arr[1] 35 arr[9]

36 Charm++ Hello with Array Obj 3. Charm++ #include <stdio.h> #include "hello.decl.h" CProxy_Main mainproxy; /*readonly*/ int int nelements; /*readonly*/ class Main : public Chare{ /*mainchare*/ public: Main(CkArgMsg* m) m) { nelements=5; //Process command-line arguments if(m->argc >1 >1 ) nelements=atoi(m->argv[1]); delete m; m; /*array [1D]*/ class Hello : public CBase_Hello{ public: Hello(){ CkPrintf("Hello %d %d created\n",thisindex); Hello(CkMigrateMessage *m) *m) { { void SayHi(int hino){ //Start the the computation CkPrintf("Running Hello on on %d %d processors for for %d %d elements\n", CkNumPes(),nElements); mainproxy = thishandle; CProxy_Hello arr arr = CProxy_Hello::ckNew(nElements); arr[0].sayhi(17); ; ; void done(void){ CkPrintf("All done\n"); CkExit(); ; ; ; ; CkPrintf("Hi[%d] from element (%d)\n",hino,thisindex); if if (thisindex < nelements-1) //Pass the the hello on: on: thisproxy[thisindex+1].sayhi(hino+1); else //We've been around once-- we're done. mainproxy.done(); ; ; #include "hello.def.h" 36

37 Charm++ Hello with Array Obj 3. Charm++ Compilando: > charmc -c hello.ci hello.c -o a.out -language charm++ Executando: > charmrun ++p3 a.out 10 Job started at Mon Aug 15 11:27:23 BRST 2005 Running Hello on 3 processors for 10 elements Hello 0 created Hello 3 created Hello 6 created Hello 9 created Hi[17] from element 0 Hello 2 created Hello 5 created Hello 8 created Hello 1 created Hello 4 created Hello 7 created Hi[18] from element 1 Hi[19] from element 2 Hi[20] from element 3 Hi[21] from element 4 Hi[22] from element 5 Hi[23] from element 6 Hi[24] from element 7 Hi[25] from element 8 Hi[26] from element 9 All done Job ended at Mon Aug 15 11:27:25 BRST 2005 > 37

38 CBPF Centro Brasileiro de Pesquisas Físicas Aula 5 Computação Distribuída de Alto Desempenho Marcelo Portes de Albuquerque Nilton Alves Marcelo Giovanni Rio de Janeiro 17 a 28 de julho de 2006

Aula 3 Computação Distribuída de Alto Desempenho

Aula 3 Computação Distribuída de Alto Desempenho CBPF Centro Brasileiro de Pesquisas Físicas Aula 3 Computação Distribuída de Alto Desempenho Marcelo Portes de Albuquerque Nilton Alves Marcelo Giovanni Rio de Janeiro 17 a 28 de julho de 2006 Sumário

Leia mais

Sistemas Distribuídos Message-Passing

Sistemas Distribuídos Message-Passing 0010010101011101010111100010111100010101010100100111001010001001010100101010100010010100101010110101010101 01100000011111101010010100010101010010010101101001000100101010111010101111000101111 101010101001001110010100010010101001010101000100101001010101101010101010110000001111110101001010001010101001001010110100100010010

Leia mais

Message Passing Interface - MPI

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

Leia mais

EXERCÍCIO 1 MUDANDO AS CORES

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

Leia mais

Introdução a Computação Paralela: Rotinas MPI em Clusters Beowulf

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

Leia mais

Message Passing Interface - MPI. Jorge Barbosa

Message Passing Interface - MPI. Jorge Barbosa Message Passing Interface - MPI Jorge Barbosa Introdução ao MPI Até ao fim dos anos 80, os fabricantes de computadores desenvolviam a sua própria biblioteca de funções para desenvolver programas paralelos.

Leia mais

Comunicação Coletiva

Comunicação Coletiva Comunicação Coletiva Sempre envolve um grupo de processos; Sempre envolve todos os processos de um comunicador; Podem ser implementadas com as rotinas ponto a ponto (mas é má idéia); Implementam os padrões

Leia mais

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 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

Leia mais

Por que dez milhões de cores?

Por que dez milhões de cores? O primeiro passo para programar dez milhões de cores Álvaro Fazenda Denise Stringhini ICT-UNIFESP São José dos Campos ERAD-SP 2016 Por que dez milhões de cores? 192 top500.org (junho/2016) E o Brasil no

Leia mais

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 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

Leia mais

Programação Paralela em Memória Compartilhada e Distribuída

Programação Paralela em Memória Compartilhada e Distribuída Programação Paralela em Memória Compartilhada e Distribuída Prof. Claudio Schepke claudioschepke@unipampa.edu.br Prof. João V. F. Lima jvlima@inf.ufsm.br (baseado em material elaborado por professores

Leia mais

Carla Osthoff LNCC/MCTI Exemplos: https://goo.gl/amxo7e

Carla Osthoff LNCC/MCTI Exemplos: https://goo.gl/amxo7e Carla Osthoff LNCC/MCTI osthoff@lncc.br Exemplos: https://goo.gl/amxo7e Message Passing Interface www.mpi-forum.org http://mpi-forum.org/docs/ http://mpi-forum.org/mpi-40/ Manual online: http://www.mpich.org/static/docs/latest/

Leia mais

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 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

Leia mais

Arquitecturas Paralelas I Computação Paralela em Larga Escala. Passagem de Mensagens

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

Leia mais

Parte da Tarefa. Parte da Tarefa. Parte da Tarefa SEND RECEIVE SEND RECEIVE

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 profpalin@gmail.com 1 1 O que é Paralelismo? Conceitos Paralelismo é uma técnica usada em tarefas grandes e complexas

Leia mais

MPI - Continuação. Qual o output do programa: from mpi4py import MPI comm = MPI.COMM_WORLD nprocs = comm.get_size() rank = comm.

MPI - Continuação. Qual o output do programa: from mpi4py import MPI comm = MPI.COMM_WORLD nprocs = comm.get_size() rank = comm. Qual o output do programa: from mpi4py import MPI comm = MPI.COMM_WORLD nprocs = comm.get_size() rank = comm.get_rank() MPI - Continuação if rank == 0: print ("Myrank: %s:" % rank) for proc in range(1,

Leia mais

Introdução. Programação Paralela. Motivação. Conhecimento do Hardware. Análise de Desempenho. Modelagem do Problema

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

Leia mais

Programação Paralela. Profa Mariana Kolberg e Prof. Luiz Gustavo Fernandes

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

Leia mais

QUEBRA DE SENHAS MD5 UTILIZANDO MDCRACK E MPI

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:

Leia mais

MPI (Message Passing Interface)

MPI (Message Passing Interface) 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

Leia mais

Jorge Barbosa, FEUP-DEI 2008

Jorge Barbosa, FEUP-DEI 2008 Técnicas para paralelização de aplicações Jorge Barbosa, FEUP-DEI 2008 Índice Introdução Técnicas de paralelização de aplicações Nível 1: Usando código sequencial Nível 2: Alteração mínima de código sequencial

Leia mais

Programação Paralela

Programação Paralela Programação Paralela Conteúdo: Introdução Motivação Desafios Modelagem Programação Paralela Memória Compartilhada Pthreads Programação Paralela Troca de Mensagens MPI Métricas de desempenho Introdução

Leia mais

Comunicação orientada a mensagens

Comunicação orientada a mensagens Comunicação orientada a mensagens críticas a RPC sincronismo modelo um a um dificuldades de tratamento de falhas Þ volta ao modelo de troca de mensagens com diferentes níveis de abstração Sistemas de mensagens

Leia mais

1 - CONCEITOS BÁSICOS

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

Leia mais

Computação por Passagem de Mensagens

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

Leia mais

Centro Nacional de Processamento de Alto Desempenho - SP TREINAMENTO: INTRODUÇÃO AO MPI CENAPAD-SP

Centro Nacional de Processamento de Alto Desempenho - SP TREINAMENTO: INTRODUÇÃO AO MPI CENAPAD-SP 1 Centro Nacional de Processamento de Alto Desempenho - SP TREINAMENTO: INTRODUÇÃO AO MPI CENAPAD-SP 2 CONTEÚDO Introdução a Programação Paralela... pag.02 1 - Idéias e Conceitos... pag.02 2 - Comunicação

Leia mais

Computação por Passagem de Mensagens

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

Leia mais

Curso de Informática DCC-IM / UFRJ. Gabriel P. Silva MPI

Curso de Informática DCC-IM / UFRJ. Gabriel P. Silva MPI Curso de Informática DCC-IM / UFRJ MPI Um curso prático Gabriel P. Silva MPI É um padrão de troca de mensagens portátil que facilita o desenvolvimento de aplicações paralelas. Usa o paradigma de programação

Leia mais

Básico: estrutura de programa, sintaxe Interface com linha de comando

Básico: estrutura de programa, sintaxe Interface com linha de comando Programação em C Sintaxe Básico: estrutura de programa, sintaxe Interface com linha de comando Preprocessamento e compilação Makefiles Ponteiros e estruturas Bibliotecas, ficheiros include e funções Referências

Leia mais

Paralela e Distribuída. Memória Distribuída com o MPI

Paralela e Distribuída. Memória Distribuída com o MPI Programação Paralela e Distribuída Programação em Memória Distribuída com o MPI Programação em Memória Distribuída As aplicações são vistas como um conjunto de programas que são executados de forma independente

Leia mais

Message Passing Interface

Message Passing Interface Message Passing Interface Gonzalo Travieso 2010 Sumário 1 Conceitos Básicos 1 Inicialização e Finalização...................................................... 1 Processos...............................................................

Leia mais

Message Passing Interface

Message Passing Interface Message Passing Interface Gonzalo Travieso 2011 Sumário 1 Conceitos Básicos 2 Inicialização e Finalização........................................... 3 Processos....................................................

Leia mais

Instruções para uso do MPI - Relatório Técnico -

Instruções para uso do MPI - Relatório Técnico - Universidade de Passo Fundo Instituto de Ciências Exatas e Geociências Curso de Ciência da Computação Instruções para uso do MPI - Relatório Técnico - ComPaDi Grupo de Pesquisa em Computação Paralela e

Leia mais

Comunicação Interprocessos

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

Leia mais

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE Algoritmos ANSI C - Introdução Copyright 2014 IFRN Agenda Conceitos básicos ANSI C Hello World Funções em C Exercícios 2 /26 A linguagem

Leia mais

Fabrizio Borelli Gabriel Nobrega Henrique Dorotea Maitê Balhester

Fabrizio Borelli Gabriel Nobrega Henrique Dorotea Maitê Balhester Fabrizio Borelli Gabriel Nobrega Henrique Dorotea Maitê Balhester Sistemas Centralizados Pode possuir N processadores (sistema multiprogramados) Todos os processadores compartilham: Memória Clock Barramento

Leia mais

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal ALGORITMOS AULA 01 Baseado nas aulas do Prof. Jorgiano Vidal LINGUAGEM C Uma das grandes vantagens do C é que ele possui tanto caracterìsticas de "alto nìvel" quanto de "baixo nìvel". Linguagem de propósito

Leia mais

Programação de Arquiteturas com Memória Distribuída Utilizando MPI

Programação de Arquiteturas com Memória Distribuída Utilizando MPI Programação de Arquiteturas com Memória Distribuída Utilizando MPI MCZA020-13 - Programação Paralela Emilio Francesquini e.francesquini@ufabc.edu.br 2019.Q1 Centro de Matemática, Computação e Cognição

Leia mais

CAP-387(2016) Tópicos Especiais em

CAP-387(2016) Tópicos Especiais em CAP-387(2016) Tópicos Especiais em Computação Aplicada: Construção de Aplicações Massivamente Paralelas Aula 44: MPI IO Celso L. Mendes, Stephan Stephany LAC / INPE Emails: celso.mendes@inpe.br, stephan.stephany@inpe.br

Leia mais

Comunicação orientada a mensagens

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

Leia mais

Curso de Informática DCC-IM / UFRJ MPI. Um curso prático. Gabriel P. Silva

Curso de Informática DCC-IM / UFRJ MPI. Um curso prático. Gabriel P. Silva Curso de Informática DCC-IM / UFRJ MPI Um curso prático Gabriel P. Silva MPI É um padrão de troca de mensagens portátil que facilita o desenvolvimento de aplicações paralelas. Usa o paradigma de programação

Leia mais

TE091 Programação Orientada a Objetos Engenharia Elétrica

TE091 Programação Orientada a Objetos Engenharia Elétrica TE091 Programação Orientada a Objetos Engenharia Elétrica Revisão Rápida de Programação em C Prof. Carlos Marcelo Pedroso 2015 Revisão Linguagem C Características principais Modularidade: uso de procedimentos

Leia mais

Introdução Arquiteturas Paralelas Programação Paralela Geração de Malhas Particionamento de Malhas (Grafos) Balanceamento de Carga

Introdução Arquiteturas Paralelas Programação Paralela Geração de Malhas Particionamento de Malhas (Grafos) Balanceamento de Carga Introdução Arquiteturas Paralelas Programação Paralela Geração de Malhas Particionamento de Malhas (Grafos) Balanceamento de Carga 2 Relembrando alguns conceitos da Parte I: O que é Computação Científica?

Leia mais

Comunicação Ponto a Ponto

Comunicação Ponto a Ponto Comunicação Ponto a Ponto Transferência de dados entre processos específicos, que não se encaixam em um padrão global pré definido; Sempre ocorre entre dois processos, um processo que envia e outro que

Leia mais

Sistemas de Operação II. Ricardo Rocha

Sistemas de Operação II. Ricardo Rocha Programação em Memória Distribuída Ricardo Rocha ricroc@dcc.fc.up.pt Programação em Memória Distribuída As aplicações são vistas como um conjunto de programas que são executados de forma independente em

Leia mais

Relatório Trabalho 1 Programação Paralela

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,tjader@inf.ufsm.br

Leia mais

Exercício de MPI Relatório do Trabalho

Exercício de MPI Relatório do Trabalho PUC-Rio Programação Concorrente e Paralela Exercício de MPI Relatório do Trabalho Danilo Moret Professora: Noemi Rodriguez Enunciado Leiam os capítulos 7 e 8 do livro Parallel Programming in C with MPI

Leia mais

Ambientes de troca de mensagens - MPI. Aleardo Manacero Jr.

Ambientes de troca de mensagens - MPI. Aleardo Manacero Jr. Ambientes de troca de mensagens - MPI Aleardo Manacero Jr. Ambientes de troca de mensagens Como já mencionado, os chamados ambientes de troca de mensagens aparecem para facilitar a programação paralela

Leia mais

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO LÓGICA DE PROGRAMAÇÃO PROFª. M.Sc. JULIANA H Q BENACCHIO Primeiro programa em C #include int main() { int num1, num2, result; scanf("%d",&num1); scanf("%d",&num2); result = num1 + num2; printf("%d",

Leia mais

Programação de Computadores II. Cap. 5 Vetores

Programação de Computadores II. Cap. 5 Vetores Programação de Computadores II Cap. 5 Vetores Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:

Leia mais

ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO Algoritmos Conceitos Iniciais. Prof. Luiz Fernando Laguardia Campos FMS

ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO Algoritmos Conceitos Iniciais. Prof. Luiz Fernando Laguardia Campos FMS ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO Algoritmos Conceitos Iniciais Prof. Luiz Fernando Laguardia Campos FMS lflcampos@machadosobrinho.com.br Compilação/Interpretação Um compilador ao receber como entrada

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Ponteiros Parte 1 Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Ponteiros Ponteiro Ponteiros

Leia mais

Introdução à Programação

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

Leia mais

CAP-387(2016) Tópicos Especiais em

CAP-387(2016) Tópicos Especiais em CAP-387(2016) Tópicos Especiais em Computação Aplicada: Construção de Aplicações Massivamente Paralelas Aula 34: Programação MPI+OpenMP Celso L. Mendes, Stephan Stephany LAC / INPE Emails: celso.mendes@inpe.br,

Leia mais

TÍTULO: PROGRAMAÇÃO PARALELA - UMA INTRODUÇÃO AO PARALELISMO COM A OPENMPI

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:

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2 Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador

Leia mais

CAP-387(2016) Tópicos Especiais em

CAP-387(2016) Tópicos Especiais em CAP-387(2016) Tópicos Especiais em Computação Aplicada: Construção de Aplicações Massivamente Paralelas Aula 33: Programação Híbrida com MPI Celso L. Mendes, Stephan Stephany LAC / INPE Emails: celso.mendes@inpe.br,

Leia mais

Métodos Computacionais

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

Leia mais

Programação Concorrente e Paralela

Programação Concorrente e Paralela Comunicação por Troca de Mensagens 2016 Troca de Mensagens forma básica de comunicação em ambientes de memória distribuída outras camadas podem ser construídas sobre trocas de mensagens básicas mas também

Leia mais

Ponteiros e Tabelas. K&R: Capítulo 5

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

Leia mais

Carlos Eduardo Batista. Centro de Informática - UFPB

Carlos Eduardo Batista. Centro de Informática - UFPB Estrutura de Dados Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br Motivação para o uso da linguagem C Entendendo Estrutura de Dados Revisão da Linguagem C Tipos primitivos Vetores

Leia mais

ponteiros INF Programação I Prof. Roberto Azevedo

ponteiros INF Programação I Prof. Roberto Azevedo ponteiros INF1005 -- Programação I -- 2016.1 Prof. Roberto Azevedo razevedo@inf.puc-rio.br ponteiros tópicos o que são ponteiros operadores usados com ponteiros passagem de ponteiros para funções referência

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

PROGRAMAÇÃO PARALELA USANDO MPI

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

Leia mais

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Linguagem de Programação C. Prof. Fabrício Olivetti de França Linguagem de Programação C Prof. Fabrício Olivetti de França Linguagem C 2 Linguagem C Imperativo e estruturado Pequeno conjunto de palavras-chaves, operadores, etc. Tipagem estática, porém fraca Permite

Leia mais

Variáveis e Operadores em C

Variáveis e Operadores em C Variáveis e Operadores em C Luís Charneca luis.charneca@gmail.com NOMES DE VARIÁVEIS (1) As variáveis no C podem ter qualquer nome se duas condições forem satisfeitas: o nome deve começar com uma letra

Leia mais

Clusters de Alto Desempenho e programação distribuída

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...

Leia mais

Introdução à Programação em C Input / Output

Introdução à Programação em C Input / Output Introdução à Programação em C Input / Output Resumo Aula Anterior Programa começa com função main() Sintaxe para definição de funções Definição de variáveis e atribuições Estruturas de controlo if-then

Leia mais

apt-get install openssh-client (Debian) yum install openssh-clents (Fedora) slapt-get install openssh (Slackware)

apt-get install openssh-client (Debian) yum install openssh-clents (Fedora) slapt-get install openssh (Slackware) Capítulo 1 O CLUSTER Acessando o Cluster O cluster pode ser acessado através de SSH. A partir do *UNIX A maioria dps sistemas unix já oferece um cliente ssh (openssh) na instalação padrão. Caso use uma

Leia mais

#include <stdio.h> void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } main () {

#include <stdio.h> void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } main () { 422 #include void Swap (int *a,int *b) int temp; temp=*a; *a=*b; *b=temp; main () int num1,num2; printf("\nentre com o primeiro valor: "); scanf ("%d",&num1); printf("\nentre com o segundo valor:

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 3.3. Conceitos Básicos de C: Expressões, Operadores e Bibliotecas

Leia mais

Programação de Computadores II

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

Leia mais

Faculdade de Computação

Faculdade de Computação Faculdade de Computação Programação Procedimental 1 o Laboratório de Programação C Prof. Cláudio C. Rodrigues 1. Introdução O objetivo desta aula prática é exercitar o uso de variáveis de vários tipos

Leia mais

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas 03/03/2010 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa

Leia mais

Programação: Vetores

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

Leia mais

INTRODUÇÃO À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015

INTRODUÇÃO À LINGUAGEM C. Prof. Msc. Luis Filipe Alves Pereira 2015 INTRODUÇÃO À LINGUAGEM C Prof. Msc. Luis Filipe Alves Pereira 2015 INTRODUÇÃO À LINGUAGEM C 02/23 INTRODUÇÃO Criada em 1972 na AT&T Bell Labs É uma das linguagens mais populares. Existem poucas arquiteturas

Leia mais

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? 1 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa o

Leia mais

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011 Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011 Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa

Leia mais

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. 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;

Leia mais

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento Hello World Linguagem C printf("hello world!\n"); main é a função principal, a execução do programa começa por ela printf é uma função usada para enviar dados para o vídeo Palavras Reservadas auto double

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Entrada e saída: escrevendo na tela Veja uma comparação entre um programa Portugol e seu equivalente em C: Inicio Inteiro

Leia mais

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria USP - ICMC - SSC SSC 0501-1o. Semestre 2015 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria 1 Março 2015 Prof. Fernando Santos Osório Email: fosorio [at] icmc. usp. br, gmail. com Página

Leia mais

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná Linguagem C IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná Até agora... Sabemos construir algoritmos que tenham: Variáveis Comandos sequenciais Entrada e saída

Leia mais

13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Mestrado em Engenharia Física Tecnológica

13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Mestrado em Engenharia Física Tecnológica 13 a Aula - Instruções Condicionais. Ciclos. Pré-processador. Variáveis de ambiente. Programação Mestrado em Engenharia Física Tecnológica Samuel M. Eleutério sme@tecnico.ulisboa.pt Departamento de Física

Leia mais

2 Arquitetura 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

Leia mais

Programação Paralela e Distribuída ERAD-SP de julho de 2010 Liria Matsumoto Sato

Programação Paralela e Distribuída ERAD-SP de julho de 2010 Liria Matsumoto Sato Programação Paralela e Distribuída ERAD-SP 2010 31 de julho de 2010 Liria Matsumoto Sato liria.sato@poli.usp.br Apresentação Introdução Arquiteturas Paralelas Programação Paralela para computadores com

Leia mais

Revisão C++ - Parte 1

Revisão C++ - Parte 1 Revisão C++ - Parte 1 Prof. Gustavo Leitão Campus Natal Central Disciplina Programação para Ambiente de Redes 5/3/2010 Objetivo da Aula 5/3/2010 5/3/2010 OBJETIVO DA AULA Revisar os principais comandos

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Sistemas Operacionais e Introdução à Programação Introdução à Lógica de Programação Programação Tradução de um algoritmo para uma linguagem de programação Cada linguagem de programação possui sua sintaxe

Leia mais

Comunicação orientada a mensagens

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

Leia mais

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de 28/03/2010 Estruturas de Dados Aula 6: Cadeias de Caracteres 28/03/2010 Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis

Leia mais

Linguagem de Programação

Linguagem de Programação Linguagem de Programação aula 4 Engenharia Elétrica e Engenharia de Automação Introdução à Computação 1.o sem/2013 Profa Suely (e-mail: smaoki@yahoo.com) Programas Programas são seqüências de instruções

Leia mais

Estruturas de Dados Aula 6: Cadeias de Caracteres

Estruturas de Dados Aula 6: Cadeias de Caracteres Estruturas de Dados Aula 6: Cadeias de Caracteres Caracteres Caracteres são representados internamente por códigos numéricos Tipo char (inteiro pequeno ) 1 byte (8 bits) 256 caracteres possíveis Códigos

Leia mais

Processos Volnys B. Bernal Versão de 20/03/2015. Agenda. Processos. Programa x Processo. Programa x Processo. Programa.

Processos Volnys B. Bernal Versão de 20/03/2015. Agenda. Processos. Programa x Processo. Programa x Processo. Programa. 1 2000-2015 - Volnys Bernal 1 2000-2015 - Volnys Bernal 2 Agenda Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP x Concorrência x Paralelismo

Leia mais

Argumentos da linha de comando Exemplos Recursividade de funções Exemplos

Argumentos da linha de comando Exemplos Recursividade de funções Exemplos Sumário Argumentos da linha de comando Exemplos Recursividade de funções Exemplos Programação 2007/2008 DEEC-IST 1 Argumentos da linha de comando Motivação: Nas aulas de laboratório foi utilizado o compilador

Leia mais

Laboratório de Programação Paralela. Introdução. Prof. Carlos Bazilio

Laboratório de Programação Paralela. Introdução. Prof. Carlos Bazilio Laboratório de Programação Paralela Introdução Prof. Carlos Bazilio Motivação Máquinas paralelas eram arquiteturas raras antigamente Este quadro se modificou por, pelo menos, 2 razões: Barateamento dos

Leia mais

SISTEMAS OPERATIVOS I

SISTEMAS OPERATIVOS I Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática SISTEMAS OPERATIVOS I Ficha 6 Abril de 2006 Nuno Malheiro Maria João Viamonte Berta Batista Luis Lino Ferreira Sugestões

Leia mais