INF Programação Distribuída e Paralela

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

Download "INF Programação Distribuída e Paralela"

Transcrição

1 INF Programação Distribuída e Paralela Trabalho Final Multiplicação de Matrizes com APIs de Programação Paralela Cristiano Medeiros Dalbem John Gamboa Introdução Neste trabalho comparamos diferentes APIs de programação concorrente em termos de sua programabilidade, ou seja, as facilidades e dificuldades que ela apresenta para a programação, assim como sua eficiência e escalabilidade em benchmarks. Para ajudar a fazer as comparações utilizamos implementações de Multiplicação de Matrizes, um problema que além de ser comum em computação também serve como um símbolo para as vantagens e importância de computação paralela. // C = A * B for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { for (int k = 0; k < size; ++k) { c[i][j] += a[i][k] * b[k][j]; Listagem 1: Implementação básica do problema de multiplicação de matrizes em C. Nos capítulos seguintes, discutimos separadamente cada uma das APIs e os resultados obtidos em cada uma delas. As implementações todas recebem duas variáveis de entrada: o tamanho das matrizes a serem multiplicadas e o número de threads executando ao mesmo tempo. Para uma mesma combinação de valores de entrada, executamos o algoritmo três vezes e calculamos a média dos tempos resultantes das três execuções. Essa média foi então utilizada na geração dos gráficos apresentados nas seções a seguir. OpenMP De todas implementações paralelas do problema, a de OpenMP sem dúvida foi a mais fácil e rápida. A API oferece uma maneira muito prática e intuitiva de criar blocos paralelos, baseado no uso de pragmas nos locais do programa onde queremos que haja paralelização. Inclusive, são oferecidas diretivas específicas pra paralelizar construções comuns da linguagem, como no nosso caso, a diretiva for.

2 A diretiva for irá fazer automaticamente todo o trabalho de (1) disparar as threads necessárias (2) dividir o trabalho do loop entre elas e (3) sincronizá-las ao final do bloco. double sum; int i,j,k; #pragma omp parallel for shared(a,b,c) private(i,j,k,sum) num_threads(num_threads) for (i = 0; i < size; ++i) { for (j = 0; j < size; ++j) { sum = 0; for (k = 0; k < size; ++k) { sum += a[i][k] * b[k][j]; c[i][j] = sum; Listagem 2: Implementação de multiplicação de matrizes em OpenMP. Dos vários controles disponíveis na API nós utilizamos muito poucos. São eles: shared: como o nome indica, determina quais variáveis são compartilhadas por todas threads. Aqui evitamos maiores overheads e complicações de programação deixando as matrizes de input e a de output em memória compartilhada. private: determina variáveis locais ao escopo de cada thread. Neste caso, os valores dos iteradores e da variável sum não serão compartilhados entre as threads (ainda que o valor inicial dos iteradores serão automaticamente controlados pela diretiva do OMP). num_threads: limita o número de threads que serão disparadas por esse bloco. É importante ressaltar uma pequena otimização feita nesse código. Ao invés do loop mais interno atualizar o valor em c[i][j] a cada multiplicação, utilizamos uma variável local a cada thread (sum) para guardar valores parciais, dessa forma diminuindo o overhead de sincronização das threads que seria necessário para sincronizar o uso da variável c[i][j]. Resultados Testes executados em uma máquina AMD Athlon II X4 630 (4 cores) com 5.8 GiB de RAM. Ubuntu

3 Gráfico 1 Neste gráfico percebemos já as linhas gerais dos comportamentos da implementação pra cada diferente configuração. Como era de se esperar, a solução sequencial ( 1 thread ) é a que consome mais tempo, com uma curva cuja inclinação é bem mais acentuada mas sem perder a cara de exponencial. Em seguida, em ordem decrescente de tempos, estão a execução com 2 threads e 3 threads. A partir de 4 threads não há diferença significativa, o que ocorre pois a máquina rodando os testes possuía 4 cores. Um comportamento interessante observado nos resultados de OpenMP é que não há perda de eficiência pra mais do que 4 threads. Isso seria esperado pois os custos de gerenciamento das threads - criação, destruição, alocação - iria superar o speedup garantido por essa paralelização. A única explicação que encontramos pra isso é que OpenMP de alguma maneira gerencia o excesso de threads, seja limitando o número máximo delas, seja escalonando-as-as de maneira inteligente e não simplesmente passando esse controle ao S.O.. Em MPI tal comportamento não será observado. No gráfico de Speedup, temos os mesmos resultados que já observamos no gráfico de Tempo. Como era de se esperar, os valores são crescentes em proporção ao número de threads, chegando próximo no limiar de 4, que é o número de cores do processador. Consideramos irrelevantes o ranking das execuções a partir de inputs de tamanho 1800x1800.

4 No gráfico de Eficiência temos informações novas e interessantes. Percebemos que a melhor eficiência no uso de paralelismo é da implementação com 2 threads, seguido por perto por 3 e 4 threads, quase empatadas. Depois, como era de se esperar, a eficiciência cai drasticamente para maiores números de threads, já que se torna crescentemente menos eficiente usar mais threads do que cores. MPI Message Passing Interface, ou MPI, é uma API de propósitos mais genéricos que OpenMP. Ela serve como um padrão multi-plataforma para implementação de troca de mensagens em aplicações multithread. Sendo uma API mais genérica, a conversão da implementação de multiplicação de matrizes demandou um esforço maior. Enquanto OpenMP se encarrega se criar e dividir inteligentemente o trabalho entre as threads, em MPI a comunicação e o código executado por cada thread ficam explícitos no código. Não foi possível demonstrar na nossa implementação, mas a biblioteca oferece funções mais sofisticadas do que simples primitivas de send e receive. As chamadas primitivas de Comunicação Coletiva englobam funcionalidades comuns no âmbito de programação paralela/distribuída, sempre envolvendo dispersão e coleta de dados entre threads e operações a serem realizadas sobre esses dados de maneira concorrente. Entretanto, essas primitivas não oferecem maior poder computacional, e são úteis principalmente para melhorar a legibilidade do código, clareando a ideia por trás do algoritmo. Nossa implementação se baseia num conceito simples de Master/Worker Threads. A primeira thread (id = 0) se encarregará de dividir igualmente os dados das matrizes pelas worker threads (as próximas n-1 threads). Sendo assim, a lógica da divisão de tarefas, ou seja, da paralelização da aplicação, se encontra no código da thread mestre, enquanto que o trabalho pesado está no código das threads trabalhadoras. // Receive data from Master MPI_Recv(&offset, 1, MPI_INT, source, 1, MPI_COMM_WORLD, &status); MPI_Recv(&rows, 1, MPI_INT, source, 1, MPI_COMM_WORLD, &status); MPI_Recv(&a, rows*input_size, MPI_DOUBLE, source, 1, MPI_COMM_WORLD, &status); MPI_Recv(&b, input_size*input_size, MPI_DOUBLE, source, 1, MPI_COMM_WORLD, &status);

5 // Matrix multiplication for (k=0; k<input_size; k++) for (i=0; i<rows; i++) { c[i][k] = 0.0; for (j=0; j<input_size; j++) c[i][k] = c[i][k] + a[i][j] * b[j][k]; // Send off results MPI_Send(&offset, 1, MPI_INT, 0, 2, MPI_COMM_WORLD); MPI_Send(&rows, 1, MPI_INT, 0, 2, MPI_COMM_WORLD); MPI_Send(&c, rows*input_size, MPI_DOUBLE, 0, 2, MPI_COMM_WORLD); Listagem 3: Código executado pelas n-1 threads trabalhadoras na implementação de Multiplicação de Matrizes em MPI. Resultados Testes executados em uma máquina AMD Athlon II X4 630 (4 cores) com 5.8 GiB de RAM. Ubuntu Alguns resultados não puderam ser obtidos por limitações de memória da máquina e de limitações da implementação, a qual optamos por manter sem muitas otimizações. Assim como na implementação em OpenMP, temos resultados progressivamente melhores quanto mais threads adicionamos. Entretanto, ao contrário da implementação anterior, percebemos que a partir dum dado momento (50 threads) o acréscimo nesse número começa a não valer mais a pena e os custos de gerenciamento das threads vão tomando conta do tempo de execução total.

6 É interessante notar que a partir de 4 threads temos melhoras crescentes de desempenho até 15 threads, e provavelmente além. Isso se deve provavelmente porque foram utilizadas primitivas de comunicação bloqueantes, que fazem com que uma thread trabalhadora não use todo seu tempo de CPU apenas para operações matemáticas. Tendo um pool de threads de sobra, garantimos que o processador será sempre ocupado por quem está de fato trabalhando, enquanto threads que estão esperando por confirmação de recebimento de mensagens estarão dormindo. O gráfico de eficiência mostra que há um excelente aproveitamento do paralelismo, tendo o pico de eficiência com 4 threads. OpenCL OpenCL é uma plataforma portável de desenvolvimento de programas paralelos, frequentemente voltados a alto desempenho, através da qual é possível delegar tarefas a placas

7 gráficas ligadas ao computador. É interessante notar que placas gráficas não são os únicos periféricos que podem se aproveitar no uso de OpenCL. Um programa em OpenCL é um típico programa em C. Em geral, o código faz uma série de chamadas que preparam o ambiente para uma posterior execução do código paralelo, ocorrida no periférico (no nosso caso, na GPU). O código paralelo (chamado, daqui em diante, de kernel) é escrito em uma linguagem muito parecida com C99, exceto por algumas pequenas modificações. Para a multiplicação de matriz, utilizamos o seguinte kernel: // OpenCL Kernel kernel void matrixmul( global float* C, global float* A, global float* B, int wa, int wb) { // 2D Thread ID // Old CUDA code //int tx = blockidx.x * TILE_SIZE + threadidx.x; //int ty = blockidx.y * TILE_SIZE + threadidx.y; int tx = get_global_id(0); int ty = get_global_id(1); // value stores the element that is computed by the thread float value = 0; for (int k = 0; k < wa; ++k) { float elementa = A[ty * wa + k]; float elementb = B[k * wb + tx]; value += elementa * elementb; // Write the matrix to device memory each thread writes one element C[ty * wa + tx] = value; Listagem 4: Kernel da multiplicação de matrizes em OpenCL O kernel foi então chamado com diferentes tamanhos de bloco. O bloco indica o número de threads rodando simultaneamente na GPU, e é configurado no programa através de parâmetros passados pela linha de comando. O usuário deve passar o tamanho do bloco em x e em y, e o número de threads no bloco será x*y. Uma restrição imposta pela API do OpenCL é que os tamanhos em x e em y das matrizes a serem multiplicadas sejam divisíveis pelos tamanhos em x e em y do bloco. Por esse motivo é que os tamanhos dos blocos utilizados foram frequentemente potências de 2, salvo em dois dos casos testados. É também por essa causa que não pudemos usar os mesmos tamanhos de matrizes utilizados nos testes com MPI e OpenMP. Outra dificuldade encontrada foi o fato de que havia um limite no número de blocos a serem executados pela placa gráfica. Ao exceder esse limite, a chamada à execução do kernel OpenCL

8 retornava a constante CL_OUT_OF_RESOURCES. É interessante notar também que aos exemplos presentes no site da Nvidia falta um Makefile, a ausência do qual nos causou-nos dificuldade em usá-los. Em versões anteriores dos mesmos exemplos pudemos encontrar o Makefile faltante. Resultados Testes executados em uma GPU Nvidia G210M, com 16 CUDA cores e 256Mb de RAM. Ubuntu Alguns resultados não puderam ser obtidos por limitações de hardware e limitações da implementação, a qual optamos por manter sem muitas otimizações. A imagem acima mostra os tempos encontrados para diferentes números de threads. As curvas encontradas assemelham-se àquelas encontradas quando da utilização das outras APIs. Nota-se um ganho de performance próximo do ideal ao utilizarmos um número baixo de threads. À medida que esse número aumenta, nos aproximamos de um limite a partir do qual passamos a não mais ganhar, mas perder, ao aumentarmos o número de threads.

9 O gráfico de Speedup mostra de maneira clara que esse limite, apesar de próximo, mesmo assim ainda não foi atingido. É interessante notar que a eficiência segue a tendência das outras APIs e permanece maior quando o número de threads é menor. Pode-se dizer que em execuções com muitas threads são poucas as que realmente executam algum trabalho ou que trazem algum ganho substancial em performance.

10 CUDA CUDA é uma API plataforma de desenvolvimento de programas paralelos exclusivamente em placas gráficas produzidas por sua criadora: a Nvidia. Bem como acontece com OpenCL, sua principal concorrente, um programa em CUDA utiliza uma linguagem muito próxima de C, exceto por algumas adições. O nvcc, que compila código em CUDA, delega a compilação de código não relacionado à placa gráfica (normalmente chamada de device) ao compilador existente no ambiente de programação (frequentemente, o gcc) e se limita a compilar código para o device. Um programa em CUDA geralmente segue o mesmo padrão já descrito de um em OpenCL: é feita uma série de chamadas a funções que preparam o ambiente para a execução do kernel, que é então executado em paralelo na GPU. O kernel utilizado em nossa implementação é muito parecido com aquele utilizado na implementação em OpenCL: // CUDA Kernel global void matrixmul( float* C, float* A, float* B, int wa, int wb) { // 1. 2D Thread ID int tx = blockidx.x * blockdim.x + threadidx.x; int ty = blockidx.y * blockdim.y + threadidx.y; // value stores the element that is computed by the thread float value = 0; for (int i = 0; i < wa; ++i) { float elementa = A[ty * wa + i]; float elementb = B[i * wb + tx]; value += elementa * elementb; // Write the matrix to device memory each thread writes one element C[ty * wa + tx] = value; Listagem 5: Kernel da multiplicação de matrizes em CUDA Em CUDA, um bloco é um conjunto de threads a ser rodado paralelamente na GPU. Cada Streaming Multiprocessor presente na placa gráfica suporta até 8 blocos rodando ao mesmo tempo, contanto que haja recursos para que todas as threads dos 8 blocos executem. Se não houver recursos suficientes (como memória ou registradores), o CUDA runtime seleciona um número menor de blocos a serem executados ao mesmo tempo. O número máximo de threads em um mesmo bloco é 512, distribuídas em até 3 dimensões (x, y, e z). Para fazermos nossas medidas, o kernel foi chamado com diferentes tamanhos de bloco tanto em x quanto em y. Novamente, tivemos de garantir que o tamanho das matrizes a serem multiplicadas tenham tamanhos divisíveis pelos tamanhos dos blocos. Para manter a consistência com OpenCL, os mesmos tamanhos de bloco foram utilizados. Esses valores (tamanho das matrizes e tamanho em x e em y dos blocos) podiam ser passados como parâmetro ao programa. Uma dificuldade encontrada foi o erro

11 the launch timed out and was terminated, que ocorria sempre que o kernel demorava tempo demais para executar. Buscas na internet nos levaram à conclusão de que eliminar o erro envolveria a necessidade de outra placa gráfica ligada ao mesmo computador. Por essa causa, não conseguimos medir o tempo para matrizes muito grandes e blocos muito pequenos. Resultados Testes executados em uma GPU Nvidia G210M, com 16 CUDA cores e 256Mb de RAM. Ubuntu O gráfico acima mostra os tempos para variados números de threads por bloco. Como se pode ver, o número de amostras foi bastante limitado, dadas as dificuldades que tivemos. Mais: não tínhamos certeza de o quanto aumentar o número de threads num mesmo bloco aumentaria a performance, dado que o CUDA runtime poderia escalonar mais de um bloco para rodar ao mesmo tempo quando o número de threads em cada bloco fosse pequeno o suficiente. É possível perceber, porém, um expressivo ganho de performance conforme o número de threads no bloco aumenta, o que parece indicar que há somente um bloco rodando de cada vez. Os tempos absolutos de cada execução, mesmo assim, foram bastante altos, excedendo em muito os tempos encontrados ao usarmos OpenCL. Além disso, havíamos lido que a performance de implementações em CUDA é frequentemente melhor que a de implementações em OpenCL, já que CUDA poderia aproveitar melhor a arquitetura das placas gráficas ao não se preocupar com portabilidade (apesar de isso não ser uma regra). Ainda: se o número de blocos executando ao mesmo tempo (o qual, como dito, era regido pelo CUDA runtime) poderia ser maior que um, como é possível que a performance da implementação em CUDA tenha sido tão ruim?

12 Ao discutir sobre essas questões na apresentação, concluímos que talvez o problema estivesse no fato de a nossa implementação não utilizar dos artifícios disponibilizados pela arquitetura CUDA para melhorar a performance dos acessos à memória, que temos como principal suspeita da queda da performance. Como já discutido, preferimos manter a implementação simples, dado que esta não é o nosso foco no trabalho. Apesar de não tão expressivos, os Speedups seguem o mesmo padrão daqueles da implementação em OpenCL: o aumento do número de threads causa um aumento no Speedup; o número de threads com que conseguimos executar o algoritmo não alcança o limite a partir do qual o ganho de performance começa a diminuir.

13 A eficiência, contrariando nossas expectativas, não seguiu a regra: execuções com mais threads tiveram melhores resultados. Conclusão Os gráficos gerados para essa seção foram feitos levando em conta os tamanhos de matrizes que melhor representavam o comportamento geral dos experimentos. OpenMP MPI Na comparação entre as duas APIs de paralelização para processadores multicore obtivemos resultados semelhantes, com apenas alguns detalhes interessantes a se comentar.

14 Percebe-se claramente como OpenMP gerencia de alguma forma o excesso do número de threads, dando valores muito parecidos para quando temos mais threads do que cores. Em MPI há uma melhora gradual até alcançar um limiar onde o overhead do gerenciamento do alto número de threads começa a piorar a performance da aplicação como um todo. OpenMP obteve na média resultados melhores que MPI. Porém, a partir de 4 threads a gerência do excesso de threads em OpenMP ocasionou num pior aproveitamento em comparação com MPI. Dessa maneira, MPI obteve valores máximos de speedup melhores (com 8 e 15 threads).

15 No gráfico de eficiências percebemos que OpenMP foi mais inteligente na divisão de carga de trabalho do que o método utilizado em MPI. Isso se nota até que o número de threads supere o de cores, depois disso os melhores speedups do programa em MPI resultam em eficiências melhores. No geral OpenMP oferece formas muito mais intuitivas para paralelizar aplicações, e para o caso de Multiplicação de Matrizes (que é um caso simples) permitiu boa eficiência no uso de recursos de computação concorrente. Como vantagem, MPI permite maior customização na forma como a computação será dividida entre as threads, então seria mais recomendável para aplicações onde a performance é muito importante. OpenCL CUDA O gráfico a seguir mostra uma comparação dos tempos encontrados em diferentes execuções da multiplicação de matrizes de tamanho 512x512.

16 Aqui, ficam evidentes as diferenças de performance entre as implementações em CUDA e OpenCL. Reiteramos que é muito provável que as diferenças de tempo não estejam relacionadas à API, mas às implementações, que, apesar de similares, provavelmente utilizam de forma diferente os recursos da GPU. Os gráficos de Speedups e Eficiência somente refletem o que os outros gráficos anteriormente já apresentaram, demonstrando a superioridade da implementação em OpenCL em relação à implementação em CUDA.

17 Apesar da performance inferior, OpenCL mostrou-se muito mais difícil de programar. Consideramos a implementação em CUDA muitíssimo mais clara, legível e intuitiva de programar. Foi também mais fácil encontrar o CUDA SDK e documentação relacionada a CUDA. Por outro lado, enquanto não houve qualquer comportamento estranho ao rodar o programa em OpenCL, o computador frequentemente travava ao longo da execução dos programas em CUDA, destravando somente após o seu fim.

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot Bruno Pereira dos Santos Dany Sanchez Dominguez Esbel Tomás Evalero Orellana Universidade Estadual de Santa Cruz Roteiro Breve introdução

Leia mais

Computação Paralela (CUDA)

Computação Paralela (CUDA) Universidade Federal do Amazonas Faculdade de Tecnologia Departamento de Eletrônica e Computação Computação Paralela (CUDA) Hussama Ibrahim hussamaibrahim@ufam.edu.br Notas de Aula Baseado nas Notas de

Leia mais

OpenMP: Variáveis de Ambiente

OpenMP: Variáveis de Ambiente Treinamento OpenMP C/C++ 1 TREINAMENTO OpenMP C/C++ Módulo 1 Computação de Alto Desempenho Módulo 2 OpenMP: Construtores Paralelos Módulo 3 OpenMP: Diretivas de sincronização Módulo 4 OpenMP: Funções de

Leia mais

Introdução OpenMP. Nielsen Castelo Damasceno

Introdução OpenMP. Nielsen Castelo Damasceno Introdução OpenMP Nielsen Castelo Damasceno Computação de auto desempenho Processamento Paralelo Memória Distribuída e Compartilhada Modelo de programação OpenMP Métricas de Desempenho Computação de auto

Leia mais

Programação de Alto Desempenho - 2. Prof: Carla Osthoff

Programação de Alto Desempenho - 2. Prof: Carla Osthoff Programação de Alto Desempenho - 2 Prof: Carla Osthoff E-mail: osthoff@lncc.br 3- Modelos de programação paralela Shared Memory/Threads Posix Win32 treads OpenMP Message Passing MPI Data Parallel OpenCL/Cuda

Leia mais

Processamento Paralelo Utilizando GPU

Processamento Paralelo Utilizando GPU Processamento Paralelo Utilizando GPU Universidade Estadual de Santa Cruz Bruno Pereira dos Santos Dany Sanchez Dominguez Esbel Evalero Orellana Cronograma Breve introdução sobre processamento paralelo

Leia mais

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER COMPARAÇÃO DE DESEMPENHO NA PROGRAMAÇÃO PARALELA HÍBRIDA (MPI + OPENMP) NA BUSCA DE TEXTO EM ARQUIVOS 1 COMPARISON OF PERFORMANCE IN HYBRID PARALLEL PROGRAMMING (MPI + OPENMP) IN SEARCH OF TEXT IN FILES

Leia mais

Comparação de eficiência entre OpenCL e CUDA

Comparação de eficiência entre OpenCL e CUDA Aluno: Thiago de Gouveia Nunes Orientador: Prof. Marcel P. Jackowski GPGPU O que é GPGPU? É programação de propósito geral em GPUs. =D GPGPU Existem 2 linguagens populares no mercado para GPGPU, o CUDA

Leia mais

Fabrício Gomes Vilasbôas

Fabrício Gomes Vilasbôas Fabrício Gomes Vilasbôas Apresentação Placas Arquitetura Toolkit e Ferramentas de Debug Pensando em CUDA Programação CUDA Python Programação PyCUDA 1) Grids( padrão Globus) 2) Clusters ( padrão MPI) 3)

Leia mais

Sistemas Distribuídos e Paralelos

Sistemas Distribuídos e Paralelos Sistemas Distribuídos e Paralelos Aula #6: Programação paralela em sistemas de memória compartilhada. ISUTIC - 2016 Eng. Alexander Rodríguez Bonet Aula de hoje Regiões paralelas. Cláusulas de âmbito. Partilha

Leia mais

UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1

UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1 UM ESTUDO COMPARATIVO DE DESEMPENHO UTILIZANDO PROGRAMAÇÃO SEQUENCIAL VS PARALELA APLICADO EM ALGORITMOS GENÉTICOS 1 Eldair F. Dornelles 2, Henrique A. Richter 3, Miquéias F. M. Trennepohl 4, Taís T. Siqueira

Leia mais

5 Unidades de Processamento Gráfico GPUs

5 Unidades de Processamento Gráfico GPUs 5 Unidades de Processamento Gráfico GPUs As GPUs são processadores maciçamente paralelos, com múltiplos elementos de processamento, tipicamente utilizadas como aceleradores de computação. Elas fornecem

Leia mais

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação PROGRAMAÇÃO PARALELA

Leia mais

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome

INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome INE5645-Programação Paralela e Distribuída Aula 17/09/2018 Nome Para paralelizar códigos de programas, tudo que necessitamos é de uma construção sintática denominada kernel. Seja o kernel: kernel void

Leia mais

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel

OpenMP. Slides baseados em tutorial de Tim Mattson da Intel OpenMP Slides baseados em tutorial de Tim Mattson da Intel O que é OpenMP? Uma especificação para um conjunto de diretivas de compilação, rotinas de biblioteca e variáveis de sistema que podem ser utilizadas

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 13/11/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (2.0) (a) (Verdade/Falso) A comunicação entre processos consiste em transmitir uma mensagem entre

Leia mais

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data) Paralelismo de dados (execução de simultaneidade) Em métodos tradicionais de programação (processamento sequencial), uma grande quantidade de dados é processada em um único núcleo de uma CPU, enquanto

Leia mais

Paradigmas de Computação Paralela

Paradigmas de Computação Paralela Paradigmas de Computação Paralela Modelos e Linguagens de Computação Paralela João Luís Ferreira Sobral jls@... 1 Dezembro 2015 Razões para a computação paralela (cf. Skillicorn & Talia 1998) O mundo é

Leia mais

Introdução à OpenMP (Dia 1) Prof. Guido Araujo

Introdução à OpenMP (Dia 1) Prof. Guido Araujo Introdução à OpenMP (Dia ) Prof. Guido Araujo www.ic.unicamp.br/~guido Roteiro Escrevendo programas usando OpenMP Usando OpenMP para paralelizar laços seriais com pequenas mudanças no código fonte Explorar

Leia mais

Paralelismo em Computadores com Tecnologia Multicore

Paralelismo em Computadores com Tecnologia Multicore IFRN - Pau dos Ferros Pau dos Ferros/RN, 25 de fevereiro de 2016 O minicurso Descrição: Para se utilizar os vários núcleos de processamento disponíveis nos computadores atuais de forma eficiente, faz necessário

Leia mais

Programação em Paralelo OpenMP

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

Leia mais

Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot

Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot Bruno Pereira dos Santos Dany Sanchez Dominguez Universidade Estadual de Santa Cruz Cronograma Introdução Serial vs Processamento

Leia mais

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data)

Paralelismo de dados. (execução de simultaneidade) Tipo de arquitetura paralela SIMD. SIMD (Single Instruction Multiple Data) Paralelismo de dados (execução de simultaneidade) Em métodos tradicionais de programação (processamento sequencial), uma grande quantidade de dados é processada em um único núcleo de uma CPU, enquanto

Leia mais

COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1

COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1 COMPARAÇÃO DE DESEMPENHO ENTRE IMPLEMENTAÇÕES DO ALGORITMO JOGO DA VIDA COM PTHREAD E OPEMMP 1 Márcia Da Silva 2, Igor Gamste Haugg 3, Eliézer Silveira Prigol 4, Édson L. Padoin 5, Rogério S. M. Martins

Leia mais

ANÁLISE DE DESEMPENHO COM A PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PERFEITOS 1

ANÁLISE DE DESEMPENHO COM A PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PERFEITOS 1 ANÁLISE DE DESEMPENHO COM A PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PERFEITOS 1 Éder Paulo Pereira 2, Gilberto Przygoda Marmitt 3, Emilio Hoffmann De Oliveira 4, Edson Luiz Padoin 5, Carlos Eduardo Das Chagas

Leia mais

for(int x=0; x < width; x++) { for(int y=0; y < height; y++) { finalimage[x][y]=renderpixel(x,y, &scenedata); } }

for(int x=0; x < width; x++) { for(int y=0; y < height; y++) { finalimage[x][y]=renderpixel(x,y, &scenedata); } } Paralelização em OpenMP Identifique os loops pesados ; Distribua-os: Versão sequencial double res[10000]; calculo_pesado(&res[i]); Versão paralela double res[10000]; for calculo_pesado(&res[i]); OMP for

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (a) (Verdade/Falso) A comunicação entre processos consiste em transmitir uma mensagem entre o

Leia mais

Hierarquia de memória:

Hierarquia de memória: INE5645 Programação Paralela e Distribuída Aluno Modelo de Execução CUDA - A execução do programa controlado pela CPU pode lançar kernels, que são trechos de código executados em paralelo por múltiplas

Leia mais

Introdução ao OpenMP

Introdução ao OpenMP Introdução ao OpenMP Threads em CPU multicore Rogério A. Gonçalves 1,2 Alfredo Goldman 2 1 Departamento de Computação (DACOM) Universidade Tecnológica Federal do Paraná (UTFPR) 2 Departamento de Ciência

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

de petróleo. Um novo domínio chamado computação de propósito geral em processadores gráficos (GPGPU) surgiu quando os pipelines de gráficos de

de petróleo. Um novo domínio chamado computação de propósito geral em processadores gráficos (GPGPU) surgiu quando os pipelines de gráficos de 12 1 1.1. Motivações Dentre os tipos de técnicas de Inteligência Artificial existentes, as técnicas de Programação Genética (PG) continuam mudando rapidamente conforme os pesquisadores e profissionais

Leia mais

Paralela e Distribuída. com o MPI e o OpenMP

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

Leia mais

Sistemas de Informação. Sistemas Operacionais

Sistemas de Informação. Sistemas Operacionais Sistemas de Informação Sistemas Operacionais PROCESSOS E THREADS PARTE II SUMÁRIO 3. THREAD: 3.1 Introdução; 3.2 Ambiente Monothread; 3.3 Ambiente Multithread; 3.4 Arquitetura e Implementação; 3.5 Modelos

Leia mais

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES João Ricardo Kohler Abramoski (PAIC/FUNDAÇÃO ARAUCÁRIA), Sandra Mara Guse Scós Venske (Orientadora), e-mail: ssvenske@unicentro.br

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (a) (Verdade/Falso) Sockets são abstrações utilizadas nos protocolos de comunicação UDP e TCP,

Leia mais

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend Concorrência Nos sistemas Monoprogramáveis somente um programa pode estar em execução por vez, permanecendo o processador dedicado a esta única tarefa. Os recursos como memória, processador e dispositivos

Leia mais

Exploração do paralelismo em arquiteturas multicore, multicomputadores e gpus

Exploração do paralelismo em arquiteturas multicore, multicomputadores e gpus https://periodicos.utfpr.edu.br/recit Exploração do paralelismo em arquiteturas multicore, multicomputadores e gpus RESUMO A computação paralela visa atender à demanda por alto poder computacional ao utilizar

Leia mais

Construtores de Sicronização em OpenMP

Construtores de Sicronização em OpenMP Construtores de Sicronização em OpenMP Esbel Tomás Valero Orellana Bacharelado em Ciência da Computação Departamento de Ciências Exatas e Tecnológicas Universidade Estadual de Santa Cruz evalero@uesc.br

Leia mais

Universidade Federal do Rio de Janeiro Informática DCC/IM. Arquitetura de Computadores II. Arquiteturas MIMD. Arquiteturas MIMD

Universidade Federal do Rio de Janeiro Informática DCC/IM. Arquitetura de Computadores II. Arquiteturas MIMD. Arquiteturas MIMD Universidade Federal do Rio de Janeiro Informática DCC/IM Arquitetura de Computadores II Arquiteturas MIMD Arquiteturas MIMD As arquiteturas MIMD dividem-se em dois grandes modelos: Arquiteturas MIMD de

Leia mais

Introdução ao CUDA. Material elaborado por Davi Conte.

Introdução ao CUDA. Material elaborado por Davi Conte. Introdução ao CUDA Material elaborado por Davi Conte. O objetivo deste material é que o aluno possa iniciar seus conhecimentos em programação paralela, entendendo a diferença da execução de forma sequencial

Leia mais

Computação científica utilizando placas gráficas

Computação científica utilizando placas gráficas Brasília, dezembro de 2008 Universidade de Brasília - Faculdade do Gama Sumário Introdução Sumário Introdução Arquitetura da GPU Sumário Introdução Arquitetura da GPU Modelo de programação Sumário Introdução

Leia mais

Modelo de Programação Paralela

Modelo de Programação Paralela Modelo de Programação Paralela As arquiteturas paralelas e distribuídas possuem muitos detalhes Como especificar uma solução paralela pensando em todos esses detalhes? O que queremos? Eecutar a solução

Leia mais

Introdução a CUDA. Esteban Walter Gonzalez Clua. Medialab - Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center START

Introdução a CUDA. Esteban Walter Gonzalez Clua. Medialab - Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center START Introdução a CUDA START Esteban Walter Gonzalez Clua Medialab - Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center 1536 cores Dynamic Parallelism Hyper - Q Pipeline

Leia mais

Aplicações em CUDA. Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center

Aplicações em CUDA. Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center Aplicações em CUDA Medialab Instituto de Computação Universidade Federal Fluminense NVIDIA CUDA Research Center Roteiro l Introdução l Eventos l Aspectos históricos l Operações atômicas l Introdução sobre

Leia mais

COMPUTAÇÃO PARALELA E DISTRIBUÍDA

COMPUTAÇÃO PARALELA E DISTRIBUÍDA COMPUTAÇÃO PARALELA E DISTRIBUÍDA Aluno: Alessandro Faletti Orientadora: Noemi Rodriguez Introdução O objetivo inicial no projeto era aplicar a possibilidade de processamento em paralelo no sistema CSBase

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO Prof. Bosco 1. Sockets - Indicar (Verdade/Falso): (a) (Verdade/Falso) Sockets são abstrações utilizadas nos protocolos de comunicação

Leia mais

Ferramentas para Programação em Processadores Multi-Core

Ferramentas para Programação em Processadores Multi-Core Ferramentas para Programação em Processadores Multi-Core Prof. Dr. Departamento de Informática Universidade Federal de Pelotas Sumário Introdução Arquiteturas multi-core Ferramentas de programação Prática

Leia mais

Intel Thread Building Blocks (TBB)

Intel Thread Building Blocks (TBB) Intel Thread Building Blocks (TBB) MCZA020-13 - Programação Paralela Emilio Francesquini e.francesquini@ufabc.edu.br 2019.Q1 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Disclaimer

Leia mais

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais DCA-108 Sistemas Operacionais Capítulo 2 Luiz Affonso Guedes www.dca.ufrn.br/~affonso affonso@dca.ufrn.br Multiprogramação Luiz Affonso Guedes 1 Luiz Affonso Guedes 2 Conteúdo Caracterização de um SO Moderno

Leia mais

UNIVERSIDADE FEDERAL DO PARÁ PRÓ-REITORIA DE PESQUISA E PÓS-GRADUAÇÃO DIRETORIA DE PESQUISA PROGRAMA INSTITUCIONAL DE BOLSAS DE INICIAÇÃO CIENTÍFICA

UNIVERSIDADE FEDERAL DO PARÁ PRÓ-REITORIA DE PESQUISA E PÓS-GRADUAÇÃO DIRETORIA DE PESQUISA PROGRAMA INSTITUCIONAL DE BOLSAS DE INICIAÇÃO CIENTÍFICA UNIVERSIDADE FEDERAL DO PARÁ PRÓ-REITORIA DE PESQUISA E PÓS-GRADUAÇÃO DIRETORIA DE PESQUISA PROGRAMA INSTITUCIONAL DE BOLSAS DE INICIAÇÃO CIENTÍFICA RELATÓRIO TÉCNICO CIENTÍFICO Período: Outubro/2015 a

Leia mais

Parte I Multiprocessamento

Parte I Multiprocessamento Sistemas Operacionais I Estrutura dos SO Prof. Gregorio Perez gregorio@uninove.br 2004 Parte I Multiprocessamento Roteiro 1 Multiprocessadores em Sistemas Fortemente Acoplados 1.1 1.2 1.3 Processamento

Leia mais

speedup aprimorado aprimorado Fração aprimorada speedup aprimorado Fração aprimorada speedup aprimorado Tempo original Fração aprimorada aprimorado

speedup aprimorado aprimorado Fração aprimorada speedup aprimorado Fração aprimorada speedup aprimorado Tempo original Fração aprimorada aprimorado Multiprocessadores - A evolução tecnológica dos processadores iria diminuir drasticamente. 2- O caminho para o aumento de desempenho é de unir mais de um processador para realizar a mesma tarefa em menos

Leia mais

Sistemas Operacionais Aula 3

Sistemas Operacionais Aula 3 Sistemas Operacionais Aula 3 Anderson L. S. Moreira anderson.moreira@recife.ifpe.edu.br http://dase.ifpe.edu.br/~alsm Curso de Análise e Desenvolvimento de Sistemas de Informação Recife - PE O que fazer

Leia mais

OpenMP. Adaptado do Material do Calebe de Paula Bianchini

OpenMP. Adaptado do Material do Calebe de Paula Bianchini OpenMP Adaptado do Material do Calebe de Paula Bianchini calebe.bianchini@mackenzie.br HelloWorld #pragma omp parallel // Code inside this region runs in parallel. printf("hello!\n"); 2 O que é OpenMP*?

Leia mais

Sistema Distribuído. Sistema Distribuído. Aplicações Distribuídas. Conceitos Básicos

Sistema Distribuído. Sistema Distribuído. Aplicações Distribuídas. Conceitos Básicos Sistema Distribuído Conjunto de máquinas (CPU + memória) interligadas em rede. Sistema Distribuído Sistema operacional distribuído trata este conjunto como um único sistema computacional. Estação 1 Estação

Leia mais

Fundamentos de Sistemas Operacionais. Threads. Prof. Edwar Saliba Júnior Março de Unidade Threads

Fundamentos de Sistemas Operacionais. Threads. Prof. Edwar Saliba Júnior Março de Unidade Threads Threads Prof. Edwar Saliba Júnior Março de 2007 1 Definição Partes de um processo que compartilham mesmo espaço de endereçamento Sub-rotina de um programa executada paralelamente ao programa chamador (execução

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

Computadores e Programação (DCC/UFRJ)

Computadores e Programação (DCC/UFRJ) Computadores e Programação (DCC/UFRJ) Aula 3: 1 2 3 Abstrações do Sistema Operacional Memória virtual Abstração que dá a cada processo a ilusão de que ele possui uso exclusivo da memória principal Todo

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (a) (Verdade/Falso) A comunicação entre processos consiste em transmitir uma mensagem entre o

Leia mais

Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7. Escola de Verão Arquiteturas Multi-Core

Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7. Escola de Verão Arquiteturas Multi-Core RSS-Verão-01/08 p.1/36 Paralelização de Algoritmos de CFD em Clusters Multi-Core MC7 Escola de Verão 2008 Arquiteturas Multi-Core Renato S. Silva LNCC - MCT Janeiro de 2008 RSS-Verão-01/08 p.2/36 Objetivo:

Leia mais

SSC PROGRAMAÇÃO CONCORRENTE. Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella

SSC PROGRAMAÇÃO CONCORRENTE. Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella SSC- 0143 PROGRAMAÇÃO CONCORRENTE Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella Créditos Os slides integrantes deste material foram construídos a par4r dos conteúdos relacionados

Leia mais

Ruby e JRuby em... Paralelos e Distribuídos. Felipe Barden Lucas Fialho Zawacki

Ruby e JRuby em... Paralelos e Distribuídos. Felipe Barden Lucas Fialho Zawacki Ruby e JRuby em... Paralelos e Distribuídos Felipe Barden 151343 Lucas Fialho Zawacki 172072 Sobre o que vamos falar? A linguagem Ruby e suas aplicações em programação paralela e distribuída. A implementação

Leia mais

Redes de Computadores. Fundamentos de Sistemas Operacionais - 2º Período

Redes de Computadores. Fundamentos de Sistemas Operacionais - 2º Período Redes de Computadores Fundamentos de Sistemas Operacionais - 2º Período PARTE II: PROCESSOS E THREADS SUMÁRIO 6. THREAD: 6.1 Introdução; 6.2 Ambiente Monothread; 6.3 Ambiente Multithread; 6.4 Arquitetura

Leia mais

Arquiteturas Paralelas

Arquiteturas Paralelas ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES Arquiteturas Paralelas Medidas de desempenho Alexandre Amory Edson Moreno Índice 2 1. Introdução 2. Medidas de Desempenho Introdução 3 Aumento de desempenho dos

Leia mais

Thread. Thread. Sistemas Operacionais. Leonard B. Moreira. UNIVERSIDADE ESTÁCIO DE SÁ fevereiro, / 41

Thread. Thread. Sistemas Operacionais. Leonard B. Moreira. UNIVERSIDADE ESTÁCIO DE SÁ   fevereiro, / 41 Thread Sistemas Operacionais Leonard B. Moreira UNIVERSIDADE ESTÁCIO DE SÁ e-mail: leonardbarreto@gmail.com.br fevereiro, 2013 1 / 41 Sumário 1 Introdução 2 Ambientes Monothread 3 Ambientes Multithread

Leia mais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO 1. Sockets - Indicar (Verdade/Falso): (a) (Verdade/Falso) Sockets são abstrações utilizadas nos protocolos de comunicação UDP e TCP,

Leia mais

Definindo melhor alguns conceitos

Definindo melhor alguns conceitos Definindo melhor alguns conceitos Concorrência termo mais geral, um programa pode ser constituído por mais de um thread/processo concorrendo por recursos Paralelismo uma aplicação é eecutada por um conjunto

Leia mais

Tópicos em Física Computacional: Introdução a Linguagem CUDA

Tópicos em Física Computacional: Introdução a Linguagem CUDA Tópicos em Física Computacional: Introdução a Linguagem CUDA Aula 06: Introdução a Linguagem CUDA Otimização do Código Carine P. Beatrici IF UFRGS 1 Da Aula Passada... Programa que soma matrizes linearizadas;

Leia mais

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard Bibliografia Nicolas Maillard nicolas@inf.ufrgs.br Instituto de Informática Universidade Federal do Rio Grande do Sul home-page: http://www.openmp.org/presentations Parallel Programming in. R. Chandra

Leia mais

Programação Concorrente e Paralela. Noemi Rodriguez

Programação Concorrente e Paralela. Noemi Rodriguez 2016 o que é programação concorrente e paralela? programação concorrente: composição de linhas de atividades independentes programação paralela: execução simultânea de linhas de atividades Go blog (Rob

Leia mais

PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1

PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1 PARALELIZAÇÃO DE ALGORITMO DE INSPEÇÃO DE ROTAS UTILIZANDO PERMUTAÇÃO LEXICOGRÁFICA 1 Jessica De Almeida Berlezi 2, Janiel Ceretta Foletto 3, Edson Luiz Padoin 4, Rogério S. M. Martins 5. 1 Trabalho realizado

Leia mais

Aplicando Processamento Paralelo com GPU ao Problema do Fractal de Mandelbrot

Aplicando Processamento Paralelo com GPU ao Problema do Fractal de Mandelbrot Aplicando Processamento Paralelo com GPU ao Problema do Fractal de Mandelbrot Bruno Pereira dos Santos¹, Dany Sanchez Dominguez¹, Esbel Valero Orellana¹. 1 Departamento de Ciências Exatas e Tecnológicas

Leia mais

Programação Concorrente e Paralela

Programação Concorrente e Paralela projeto de programas paralelos 2016 PCAM problema particionamento comunicacao aglomeracao mapeamento desenhada para memória distribuída mas muitas idéias em comum Particionamento idéia é expor oportunidades

Leia mais

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór

Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Filipo Mór Bacharelado em Sistemas de Informação Sistemas Operacionais Prof. Filipo Mór WWW.FILIPOMOR.COM - REVISÃO ARQUITETURAS PARALELAS Evolução das Arquiteturas Evolução das Arquiteturas Entrada CPU Saída von

Leia mais

What is? Eduardo Viola Nicola Disciplina de IPPD

What is? Eduardo Viola Nicola Disciplina de IPPD What is? Eduardo Viola Nicola evnicola@inf.ufpel.edu.br Disciplina de IPPD Sumário 1)Introdução 2)Princípio Geral de Funcionamento 3)Exemplos de Aplicações 4)Modelo de Programação 5)Linguagens Suportadas

Leia mais

INE5645 PROGRAMAÇAO PARALELA E DISTRIBUÍDA PROVA 1 18/09/2017 ALUNO: Prof. Bosco

INE5645 PROGRAMAÇAO PARALELA E DISTRIBUÍDA PROVA 1 18/09/2017 ALUNO: Prof. Bosco INE5645 PROGRAMAÇAO PARALELA E DISTRIBUÍDA PROVA 1 18/09/2017 ALUNO: Prof. Bosco 1. a. (Verdade/Falso) Threads ou processos são programas sequenciais. Programação concorrente é aquela onde diversos processos/threads

Leia mais

Processamento de áudio em tempo real utilizando dispositivos não convencionais:

Processamento de áudio em tempo real utilizando dispositivos não convencionais: Processamento de áudio em tempo real utilizando dispositivos não convencionais: Processamento paralelo com Pure Data e GPU. André Jucovsky Bianchi ajb@ime.usp.br Departamento de Ciência da Computação Instituto

Leia mais

Sistemas Operacionais. Processos e Threads

Sistemas Operacionais. Processos e Threads Sistemas Operacionais Processos e Threads Sumário 1. Introdução 2. Estrutura do Processo 1. Contexto de Hardware 2. Contexto de Software 3. Espaço de Endereçamento 3. Estados 1. Mudanças de Estado 2. Criação

Leia mais

UNIVERSIDADE ESTADUAL VALE DO ACARAÚ- UEVA. Assunto: Programação Concorrente.

UNIVERSIDADE ESTADUAL VALE DO ACARAÚ- UEVA. Assunto: Programação Concorrente. UNIVERSIDADE ESTADUAL VALE DO ACARAÚ- UEVA Assunto: Programação Concorrente. Alunos: Valdeclébio Farrapo Costa Paulo Roberto Gabriel Barbosa Curso: Ciência da Computação Disciplina: Linguagem de Programação

Leia mais

Infraestrutura de Hardware. Processamento Paralelo Multicores, Multi-Threading e GPUs

Infraestrutura de Hardware. Processamento Paralelo Multicores, Multi-Threading e GPUs Infraestrutura de Hardware Processamento Paralelo Multicores, Multi-Threading e GPUs Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é entendido

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

Bibliografia em processamento paralelo

Bibliografia em processamento paralelo Bibliografia em processamento paralelo Andrews, Concurrent Programming: Principles and Practice Foster, Designing and Building Parallel Programs Wolfe, High Performance Compilers for Parallel Computing

Leia mais

Agenda. O que é OpenMP? Regiões Paralelas Construtores para Compartilhamento de

Agenda. O que é OpenMP? Regiões Paralelas Construtores para Compartilhamento de Programando OpenMP Agenda O que é OpenMP? Regiões Paralelas Construtores para Compartilhamento de Trabalho Montando um escopo de dados para proteger de condições de corrida Cláusulas de agendamento O que

Leia mais

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

Leia mais

XV ESCOLA REGIONAL DE ALTO DESEMPENHO ERAD 2015

XV ESCOLA REGIONAL DE ALTO DESEMPENHO ERAD 2015 XV ESCOLA REGIONAL DE ALTO DESEMPENHO ERAD 2015 Impacto das Interfaces de Programação Paralela e do Grau de Paralelismo no Consumo Energético de uma Aplicação Thayson R. Karlinski, Arthur F. Lorenzon,

Leia mais

Concorrência em Processos

Concorrência em Processos Concorrência em Processos Anderson L. S. Moreira anderson.moreira@recife.ifpe.edu.br http://dase.ifpe.edu.br/~alsm Baseado nas aulas do professor Alberto Costa Neto da UFS 1 O que fazer com essa apresentação

Leia mais

Introdução aos Conceitos de Computação Paralela através da estimativa de Pi

Introdução aos Conceitos de Computação Paralela através da estimativa de Pi Introdução aos Conceitos de Computação Paralela através da estimativa de Pi Diego da Silva Pereira 1 1 Professor de Redes de Computadores IFRN Câmpus Currais Novos. e-mail: diego.pereira@ifrn.edu.br Resumo:

Leia mais

SSC0611 Arquitetura de Computadores

SSC0611 Arquitetura de Computadores SSC0611 Arquitetura de Computadores 20ª Aula Arquiteturas Paralelas Arquitetura MIMD com Memória Compartilhada Profa. Sarita Mazzini Bruschi sarita@icmc.usp.br Arquiteturas MIMD As arquiteturas MIMD dividem-se

Leia mais

MC4: Introdução à Programação Paralela em GPU para a Implementação de Métodos Numéricos

MC4: Introdução à Programação Paralela em GPU para a Implementação de Métodos Numéricos MC4: Introdução à Programação Paralela em GPU para a Implementação de Métodos Numéricos Aula 1: Introdução à programação paralela e ao ambiente de programação CUDA Profs.: Daniel Alfaro e Silvana Rossetto

Leia mais

Análise de Desempenho da Paralelização do Problema de Caixeiro Viajante

Análise de Desempenho da Paralelização do Problema de Caixeiro Viajante Análise de Desempenho da Paralelização do Problema de Caixeiro Viajante Gabriel Freytag Guilherme Arruda Rogério S. M. Martins Edson L. Padoin Universidade Regional do Noroeste do Estado do Rio Grande

Leia mais

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador

1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador 1 Introdução 1.1 Descrição do problema A programação genética (PG) é uma meta-heurística utilizada para gerar programas de computadores, de modo que o computador possa resolver problemas de forma automática

Leia mais

BALANCEAMENTO DE CARGA EM SISTEMAS MULTIPROCESSADORES UTILIZANDO O MODELO DE PROGRAMAÇÃO CHARM++ 1

BALANCEAMENTO DE CARGA EM SISTEMAS MULTIPROCESSADORES UTILIZANDO O MODELO DE PROGRAMAÇÃO CHARM++ 1 BALANCEAMENTO DE CARGA EM SISTEMAS MULTIPROCESSADORES UTILIZANDO O MODELO DE PROGRAMAÇÃO CHARM++ 1 Guilherme Henrique Schiefelbein Arruda 2, Edson Luiz Padoin 3. 1 Trabalho desenvolvido no contexto do

Leia mais

Distâncias entre vértces em um grafo. Paralelização. André de Freitas Smaira

Distâncias entre vértces em um grafo. Paralelização. André de Freitas Smaira Distâncias entre vértces em um grafo Paralelização André de Freitas Smaira 1 1 Comentários iniciais Os códigos enviados são referentes à contabilização do tempo que não inclui a escrita (esse assunto será

Leia mais

Introdução à programação paralela em Fortran usando OpenMP e MPI

Introdução à programação paralela em Fortran usando OpenMP e MPI Introdução à programação paralela em Fortran usando OpenMP e MPI Henrique Gavioli Flores,Alex Lima de Mello, Marcelo Trindade Rebonatto Universidade de Passo Fundo 5 de Abril de 2018 1/28 1 / 28 Sumário

Leia mais

Organização de Computadores Sistema de entrada e saída (I/O) e computação paralela. Professor: Francisco Ary

Organização de Computadores Sistema de entrada e saída (I/O) e computação paralela. Professor: Francisco Ary Organização de Computadores Sistema de entrada e saída (I/O) e computação paralela Professor: Francisco Ary Computação Paralela Capacidade de um sistema computacional ser executado de forma simultânea,

Leia mais

Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos

Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos Pensando em Paralelo Pensar em paralelo é uma tarefa que exige disciplina

Leia mais

OpenMP: Variáveis de Ambiente

OpenMP: Variáveis de Ambiente Treinamento OpenMP C/C++ 1 TREINAMENTO OpenMP C/C++ Módulo 1 Computação de Alto Desempenho Módulo 2 OpenMP: Construtores Paralelos Módulo 3 OpenMP: Diretivas de sincronização Módulo 4 OpenMP: Funções de

Leia mais

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação MULTIPROCESSADORES

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Thaís Vasconcelos Batista UFRN DIMAp http://www.dimap.ufrn.br/~thais thais@ufrnet.br Programa do Curso INTRODUÇÃO Conceitos Básicos Sistemas em Rede X Sistemas Distribuídos Necessidade

Leia mais

Análise empírica de algoritmos de ordenação

Análise empírica de algoritmos de ordenação Análise empírica de algoritmos de ordenação Mario E. Matiusso Jr. (11028407) Bacharelado em Ciências da Computação Universidade Federal do ABC (UFABC) Santo André, SP Brasil mario3001[a]ig.com.br Resumo:

Leia mais