Conceitos de Programação Paralela

Slides:



Advertisements
Apresentações semelhantes
Representação da Informação como padrões de bits
Advertisements

Sistemas Distribuídos
Aula 3 – Transmissão Digital
Vitor Fiorotto Astolfi Orientador: Jorge Luiz e Silva
Desempenho da Computação Paralela em Ambientes Virtualizados
Estratégias Pipelined
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
Metodologia de testes Nome: Gustavo G. Quintão
Sistemas distribuídos Metas de Projeto Prof. Diovani Milhorim
WebDesign Redes de Computadores Aula 07
Barramentos Introdução.
Entrada e Saída Introdução.
Projeto 1.
Gerenciamento de Projetos
MPI – Comunicações Com. Colectiva esquecida Barrier não há troca de dados, apenas sincroniza os processos int MPI_Barrier( MPI_Comm, comm) T com = T lat.
ARQUITETURA DE COMPUTADORES II
Algoritmos e Estrutura de Dados I
Arquitetura de Sistemas Operacionais
Conceitos de Programação Paralela - 2
OpenMP MO801/MC972. Visão geral Biblioteca de mais alto nível para programação paralela Prevê memória compartilhada Requer suporte do compilador Exige.
Problemas com Threads MO801/MC972. Muitas threads Se algumas threads ajudam o programa, muitas threads devem ajudar mais –Certo? O overhead de escalonamento.
Chapter 4: Threads.
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Fabio Notare Martins Pontifícia Universidade Católica do Rio Grande do Sul Programa de Pós-Graduação em Ciências da Computação.
SISTEMA DE INFORMAÇÕES DESENVOLVIMENTO DE SISTEMAS
Arquitetura de Computadores
Threads.
Engenharia Concorrente
Estrutura de decisão e repetição em JAVA
Modelo de referência OSI
SISTEMAS OPERACIONAIS
Sistemas Operacionais
Fundamentos de programação CUDA
Algoritmos paralelos eficientes para alguns problemas de processamento de Cadeia de Caracteres Alunos: Diego Alencar dos Santos Melo Felipe Formagini Brant.
Modularização de um programa em C
Sistemas Distribuídos
Tópicos em redes e sistemas distribuídos
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Cálculo Autoconsistente
Arquitetura de computadores
Sistemas Operacionais
Planejamento e Solucionamento de Problemas Distribuídos
Sistemas Operacionais
DUAL CHANNEL Adinan Southier Soares Senai – São Lourenço do Oeste.
SISTEMAS OPERACIONAIS I
Sistemas Operacionais
SISTEMAS OPERACIONAIS I Memória Virtual e Paginação
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
SISTEMAS OPERACIONAIS I
Sistemas Operacionais
SGBD Distribuído Lílian Simão Oliveira.
Processos.
O que é? É o processo de investigação técnica com intuito de identificar a qualidade, a segurança e a exatidão do software desenvolvido. A validação do.
Sistemas Operacionais
Conceitos de thread Faculdade PITÁGORAS – Outubro de 2012
Subsistema de Entrada e Saída do Kernel
Introdução à Computação Gráfica
Gerenciamento de Memória - Capítulo 7 - Sistemas Operacionais Prof. Dr. José Carlos Becceneri Luciana Sêda Cardoso.
Programação Computacional Aula 9: Meu primeiro programa em C
Arquitetura de computadores
Sistemas Operacionais IV – Gerenciamento de E/S
Paralelismo.
Métodos de Ordenação Externa
Gerência de Memória. Memória Considerações: Recurso caro e escasso; Programas só executam se estiverem na memória principal; Quanto mais processos residentes.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Prof. Ivair Teixeira Redes de Computadores.
Bruna Cavallero Martins Universidade Católica de Pelotas.
1 Estruturas Condicionais Aula – Tópico 3 Algoritmos e Estruturas de Dados I (DCC/003)
Transcrição da apresentação:

Conceitos de Programação Paralela MO801/MC972

3 origens para threads Task Data Data flow Diferentes atividades atribuidas à diferentes threads Data Muitas threads executando a mesma operação sobre dados diferentes Data flow Uma thread opera com o dado fornecido pela outra (produtor-consumidor)

Task decomposition Geralmente a forma mais fácil de paralelizar Implica em detectar tarefas que podem ser executadas separadamente pelos programas Normalmente requer pouca modificação no código Preparo do código para evitar conflito entre duas tarefas Muito comum para interface com o usuário

Data decomposition O dado a ser processado é dividido em pedações e o mesmo código é utilizado para processá-lo Comum em processamento de áudio, imagens e programas científicos Com o aumento no número de processadores, é possível aumentar o tamanho do problema Modifica pouco o código Geralmente o início e o final da tarefa apenas

Data-flow decomposition Foca no problema da transferência de dados entre várias threads Modelo produtor/consumidor O produtor gera os dados que o consumidor utiliza O consumidor só pode iniciar após o produtor Múltiplos produtores/consumidores podem ser encadeados Cuidado com as latências de início e finalização do processo

Problemas (Data-flow) As dependências criadas podem causar grande atraso Exige maior conhecimento das tarefas para melhor distribuir a carga Deve-se evitar situações onde os consumidores ficam esperando os dados As dependências de contexto podem implicar em mais dados a serem transferidos A interação entre o produtor e o consumidor pode gerar um overhead grande Balancear a carga de processamento entre as threads Evitar que threads consumidoras fiquem Idle Por causa da relação de dependência, nem sempre é fácil fazer esse balanceamento de carga

Níveis de dificuldade Thread decomposition Data decomposition Quando possível, é o mais simples de implementar Data decomposition Nível intermediário, principalmente por causa da divisão dos dados e sincronismos no início e final Data-flow decomposition Mais complicado em relação ao código seqüencial Alternativa geralmente ditada pelo tipo de programa a paralelizar

Exemplo Considere o processamento de um vídeo sem dependência entre os quadros sucessivos Task decomposition Uma thread para decodificar um quadro, outra para processar um quadro, etc Data decomposition Cada thread processa um quadro Data-flow decomposition Similar ao Task decomposition nesse caso Qual o tamanho de um quadro de vídeo? Quantos podem ser processados simultaneamente?

Desafios Threads permitem que mais de uma atividade ocorra ao mesmo tempo Gerenciar atividades diferentes pode gerar problemas de sincronização, comunicação, balanceamento de carga e escalabilidade Como medir esses problemas? Como decidir antecipadamente quais enfrentar?

Desafios Sincronização Comunicação Balanceamento de carga Como coordenar a atividade de duas ou mais threads? Comunicação Quanto de transferência de dados (banda e latência) é necessário? Balanceamento de carga Como distribuir o trabalho entre as threads de forma a não deixar threads ociosas? Escalabilidade Como fazer bom uso das threads quando o sistema computacional aumentar?

Padrões de Programação Task-level parallelism Task decomposition Divide and Conquer Task/Data decompsition Geometric Decomposition Data decomposition Pipeline Data-flow decomposition Wavefront

Task-level Parallelism Pattern Focar diretamente nas atividades a serem realizadas Problemas são decompostos em tarefas que operam independentemente Pode ser necessário remover as dependências entre essas tarefas (replicação?) Exemplos: embarrassingly parallel problems e replicated data problems

Divide and Conquer Pattern O problema é dividido em um número de sub-problemas menores Quando o problema é resolvido, o resultado é agrupado para formar a solução final Como cada sub-problema é independente, eles podem ser executados em paralelo Em geral faz uma boa distribuição de carga Exemplo: Merge sort

Geometric Decomposition Pattern Baseado na paralelização de estruturas de dados usadas no problema O foco é na estrutura de dados Cada thread é responsável por operar em parte dos dados Exemplo: Propagação de ondas e calor

Pipeline Pattern Quebrar o problema em várias fases subseqüentes Encontrar essa concorrência geralmente é mais difícil Balancear a concorrência é mais difícil ainda Cada estágio deve ser capaz de executar uma determinada tarefa e todos devem trabalhar simultaneamente

Wavefront Pattern Processamento dos elementos de uma matriz através de uma diagonal Como se fosse uma onda passando pela matriz Em geral, é utilizado quando há dependências entre os elementos de uma matriz 1 2 3 4 5

Exemplo: Error Diffusion É um algoritmo para converter imagens com grande quantidade de bits por pixel em imagens em preto e branco Usado para imprimir as imagens Havendo um grande número de pontos pequenos, é difícil notar a piora da imagem Exemplo: conversão de 8 bits para 1 bit

Passos para cada ponto Determinar o valor a ser associado ao ponto atual Valores em [0, 127] são mapeados em 0 Valores em [128, 255], são mapeados em 1 A partir do valor do resultado, o erro é calculado Ex.: 168 é mapeado em 1 com erro de -87 (= 255 – 168) O erro é distribuido entre os pontos vizinhos conforme uma matriz de pesos Exemplo 7/16 3/16 5/16 1/16

Pseudo-código void error_diffusion(unsigned int width, unsigned int heigh, unsigned short **InputImage, unsigned short **OutputImage) { for (unsigned int i = 0; i < height; i ++) { for (unsigned int j = 0; j < width; j ++) { /* 1 */ if (InputImage[i][j] < 128) OutputImage[i][j] = 0; else OutputImage[i][j] = 1; /* 2 */ int err = InputImage[i][j] – 255 * OutputImage[i][j]; /* 3 */ InputImage[i][j+1] += 7/16; InputImage[i+1][j-1] += 3/16; InputImage[i+1][j] += 5/16; InputImage[i+1][j+1] += 1/16; } } }

Análise Como dividir o código anterior? Que tipo de tarefas quebrar? Como quebrar os dados?

Alternativa O problema dos pesos também pode ser visto como 1/16 5/16 3/16 7/16

Alternativas Processar uma linha por thread, atrasando cada linha em duas colunas Processar uma página por thread, sem quebrar os dados Processar pedaços de páginas por thread, passando para a próxima página ao final de cada bloco etc