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

Documentos relacionados
Informática I. Aula Aula 19-20/06/06 1

SISTEMAS DISTRIBUÍDOS

Banco de Dados I. Prof. Edson Thizon

Aula 03. Processadores. Prof. Ricardo Palma

Experiência 04: Comandos para testes e identificação do computador na rede.

Engenharia de Software II

Fundamentos de Programação. Diagrama de blocos

Introdução à Informática

Inteligência Artificial

Sistemas Operacionais. Rodrigo Rubira Branco

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

Conceitos básicos sobre computadores

Fundamentos de Teste de Software

Arquitetura e Organização de Computadores I

Prof a Andréa Schwertner Charão DELC/CT/UFSM

Conceito Básicos de Programação com Objetos Distribuídos. Programação com Objetos Distribuídos (C. Geyer) Conceitos de POD 1

O que é um banco de dados? Banco de Dados. Banco de dados

Arquitetura de Computadores Sistemas Operacionais II

Auditoria de Meio Ambiente da SAE/DS sobre CCSA

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

Comandos de Eletropneumática Exercícios Comentados para Elaboração, Montagem e Ensaios

ENGENHARIA DE SOFTWARE

CVS Controle de Versões e Desenvolvimento Colaborativo de Software

Programação em Memória Compartilhada com OpenMP

Sistemas Distribuídos

Programação para Internet I 4. XML. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

Gerenciamento do Escopo do Projeto (PMBoK 5ª ed.)

Programação Orientada a Objetos SANTOS, Rafael

Desenvolvimento de Software

Tópicos Avançados em Banco de Dados Dependências sobre regime e controle de objetos em Banco de Dados. Prof. Hugo Souza

Flávia Rodrigues. Silves, 26 de Abril de 2010

Diagrama de Componentes e Implantação

Arquitetura de referência de Streaming sob demanda para desktop (ODDS) DELL

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores

Planejamento - 2. Definição de atividades Sequenciamento das atividades. Mauricio Lyra, PMP

Impressora Latex série 300. Garantia limitada

MANUTENÇÃO SISTEMAS INFORMATIZADOS PARA O PLANEJAMENTO E CONTROLE DA MANUTENÇÃO. CCMS- Computer Maintenance Management System

DESCRITIVO TÉCNICO PLATAFORMA PCS

Análise de Sistemas 3º Bimestre (material 2)

Organização e Arquitetura de Computadores. Ivan Saraiva Silva

VII SENABOM TEMA: O REGISTRO ELETRÔNICO DE EVENTOS (RE) Apresentado por: Ten Cel BM Flávio Rocha - CBMERJ

Introdução à Programação de Computadores Parte I

Processamento de Dados aplicado à Geociências. AULA 1: Introdução à Arquitetura de Computadores

Projeto de Desenvolvimento de Software

Gerenciamento dos Riscos do Projeto (PMBoK 5ª ed.)

O Funcionamento do Processador

Os salários de 15 áreas de TI nas cinco regiões do Brasil

Organização de Computadores 1

PORTARIA N Nº 178 Rio de Janeiro, 25 de outubro de 2012.

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Capítulo 6 - Threads

SISTEMAS OPERACIONAIS. 3ª. Lista de Exercícios

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I

Conteúdo programático

Aula 01 Introdução Custo de um algoritmo, Funções de complexidad e Recursão

FONSECA, LUCIANO DUARTE FERRAMENTAS DE DIAGNÓSTICO ERD COMMANDER

PROGRAMAÇÃO DE COMPUTADORES

Sistema Operacional. Implementação de Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais

Arquitecturas de Software Enunciado de Projecto

,QVWDODomR. Dê um duplo clique para abrir o Meu Computador. Dê um duplo clique para abrir o Painel de Controle. Para Adicionar ou Remover programas

e Autorizador Odontológico

COMUNIDADE VIRTUAL DE APRENDIZAGEM


Supervisório Remoto aplicado em Dispositivo Móvel na Plataforma NI LabVIEW

DOCUMENTO DE REQUISITO DE SOFTWARE

Princípios de Engenharia de Software. Aula 6 Projeto de Software

LIBERAÇÃO DE ATUALIZAÇÃO CORDILHEIRA

MANUAL DO INSTALADOR XD EM AMBIENTES MICROSOFT WINDOWS

Métricas de Software

Driver Next Versão 1.0 de Português

Tópicos Especiais em Redes de Computadores. Network File System - NFS. Professor: Alexssandro Cardoso Antunes

Configurando Link Failover. por: Victor Igor

Desenvolvimento de um Cluster de Alto Desempenho com PVM

Sobre o Visual C

Depois do estudo deste capítulo, o estudante deve ser capaz de:

Manual Recálculo de Custo Médio

Plano de Projeto. Tema 3. Gerência de Projetos Profa. Susana M. Iglesias

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar

Implementação de um serviço de correio eletrônico na Intranet do Pólo de Touros utilizando o ambiente SQUIRELMAIL e POSTFIX em um Servidor Linux

Dicas de Segurança sobre Virus

Programação Orientada a Objetos. Professor Leonardo Cabral - Larback

Deadlocks. Sistemas Operacionais - Professor Machado

CATÁLOGO DE APLICAÇÕES Rateio CC Contas a Pagar

Inteligência de negócios do laboratório DESCUBRA INFORMAÇÕES ÚTEIS DE DADOS OPERACIONAIS DO LABORATÓRIO

AULA 1 INTRODUÇÃO A BANCO DE DADOS E VISÃO GERAL DO SQL CONCEITUANDO BANCO DE DADOS MODELO RELACIONAL

Introdução. Nível da Linguagem de Montagem. Linguagem de Montagem (2) Linguagem de Montagem (1) Linguagem de Montagem

MVM Mattos Virtual Machine. Andrey de Oliveira Prof. Mauro Marcelo Mattos, Doutor FURB 2012/2

CASOS DE TESTE PALESTRANTE: MARCIA SILVA

Como o VIOS Jurídico pode otimizar os processos em um escritório de advocacia? Indicado para: médios e grandes escritórios de advocacia.

LCAD. ALGORÍTMOS PARALELOS (Aula 6) Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES.

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO

ATuLCo. Manual de Instruções. Gestor de Agência de Viagens. ATuLCo Gestor de Agencia de Viagens. Horário Abreu Nr António Felgueiras Nr.

Deswik.Sched. Sequenciamento por Gráfico de Gantt

Módulo: M_CONFIRMA_AGENDAMENTO - Confirmação dos Agendamentos

ADAPTAÇÃO DE UM JOGO OPEN SOURCE PARA O DESENVOLVIMENTO DE UM SIMULADOR DE TRÂNSITO 1

Transcrição:

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 Hybrid

Modelos de programação paralela Modelos de programação paralela são formados através de uma abstração de ambas arquiteturas de hardware e software.

Escolha do modelo A escolha do modelo a ser utilizada é normalmente baseada na arquitetura do sistema disponível e na escolha pessoal. Não existe o melhor modelo, mas existem implementações que podem ser implementadas mais facilmente em determinados modelos.

Arquitetura de computadores de memória compartihada.

3.1 Modelo de Programação de Memória Compartilhada As tarefas compartilham um espaço de endereçamento comum, que é lido e escrito de forma assíncrona. Vários mecanismos tais como locks e semáforos podem ser utilizados para controlar o acesso à memória compartilhada.

Modelo de memória compartilhada baseado em Threads Um único processo pode ter múltiplas threads concorrentes em execução. Podemos fazer uma analogia à um programa que possui uma série de subrotinas executando concorrentemente.

Threads

Threads O programa principal (a.out) executa de forma serial, e cria uma série de tarefas (threads) que podem ser escalonadas pelo sistema operacional para serem executadas de forma concorrente. Cada Thread possui seus dados locais e compartilha todos os recursos do programa principal ( a.out ).

Threads Elimina gastos com replicação de recursos de programa para cada thread. Além disso a comunicação entre os threads se beneficia com o acesso a uma memória global.

Threads É necessário a implementar diretivas de sincronização para garantir a coerência da memória. Os threads podem ser criados e eliminados durante a execução da aplicação ( a.out). Normalmente associado à: Arquiteturas de memória compartilhada Sistemas Operacionais.

Implementações de Threads Do ponto de vista do programador, pode ser composta por: biblioteca de sub-rotinas para serem chamadas pelo código fonte(pthreads). conjunto de diretivas de compilador para serem embutidas no código fonte. (OpenMP) O PROGRAMADOR É RESPONSÁVEL POR DETERMINAR O PARALELISMO

Padrão POSIX (Pthreads) Biblioteca; Especificado pelo padrão IEEE POSIX 1003.1c standard (1995). Linguagem C. Paralelismo explícito, o programador necessita ficar atendo aos detalhes. Obs: Microsoft possui implementação própria de threads

Padrão OpenMP: Diretivas de compilador. Implementado pela maioria de vendedores de software e hardware. Versão em FORTRAN ( desde 1997) Versão em C/C++ ( desde 1998) Portável para diversas plataformas incluindo Unix e Windows NT. Fácil implementação.

Arquitetura de computadores de memória distribuída

3.3 - Modelo de Programação de Troca de Mensagem Composto por um conjunto de tarefas que acessam sua própria memória durante a computação. Múltiplas tarefas podem residir em uma mesma máquina física ou em diversas máquinas individuais.

Modelo de Troca de Mensagem A comunicação dos dados é realizada através de troca de mensagens. A transferência dos dados requer operações cooperativas entre os processos. Uma operação de envio necessita de uma operação de recebimento.

Implementações: Biblioteca. O programador é responsável por especificar o paralelismo. Várias bibliotecas foram implementadas desde a década de 80 Em 1992 foi estabelecido um forum para a criação de um padrão, o padrão Message Passing Interface ou MPI.

3.4 - Paralelismo de Dados Focada na execução paralela de um conjunto de dados. O conjunto de dados é formado tipicamente por uma estrutura comum: array,cubo,etc... Um conjunto de tarefas trabalha coletivamente na mesma estrutura de dados, entretanto cada tarefa trabalha em uma determinada partição da estrutura. As tarefas executam a mesma operação na sua partição exemplo: "add 4 to every array element".

Paralelismo de dados

Arquitetura Cliente/Servidor

Paralelismo de Dados

Paralelismo de Dados É normalmente realizada através de construtores paralelos: Chamadas à uma sub-rotina de paralelismo de dados de uma biblioteca.(opencl/cuda) Diretivas de compilador (High Performance Fortran).

High Performance Fortran (HPF ) As diretivas de compilador permitem ao programador especificar a distribuição e o alinhamento dos dados. Nas implementações em memória distribuída, usualmente o compilador converte o programa em chamadas do código padrão de MPI para distribuir o dados entre os processos.a troca de mensagens é executada de forma transparente ao usuário.

3.5.1 - Modelo de programação Híbrido Implementação usual é a combinação de modelo de troca de mensagens MPI com modelos de threads (POSIX threads ou OpenMP), em ambiente de redes máquinas SMP. Combinação de paralelismo de dados com troca de mensagens, com a implementação de F90 ou HPF em arquitetura de memória distribuída, onde a troca de mensagem (MPI) é utilizada para transmitir o dado entre as tarefas de forma transparente ao programador.

4 Construção de Programas paralelos O projeto e desenvolvimento de programas paralelos tem sido realizado tipicamente como um processo manual. O programador é responsável por identificar e implementar o paralelismo. Usualmente, o desenvolvimento manual do código é um processo iterativo que gasta muito tempo, é complexo leva a diversos erros de desenvolvimento.

Construção de Programas paralelos Durante muitos anos diversas ferramentas foram desenvolvidas para auxiliar o programador na conversão do código serial em código paralelo. Compiladores e Pré-processadores têm sido utilizados para realizar uma conversão automática do código serial para o código paralelo.

Compilador paralelo Compilação automática: O compilador analisa o código fonte e identifica os pontos de paralelização tais como loops (do,for). A análise identifica inibidores á paralelização e uma avaliação do ganho de desempenho coma paralelização.

Compilador paralelo Compilação direcionada pelo programador: Através de diretivas de compilação ou flags,o programador pode indicar explicitamente ao compilador como paralelizar o código. Pode ser utilizado em conjunto com algum grau de paralelização automática.

Construção de Programas paralelos Caso você esteja trabalhando com um código que foi escrito originalmente de forma serial, e tenha restrição de tempo e de orçamento, a paralelização automática deve ser o melhor caminho. Entretanto existem diversos problemas relacionados com a paralelização automática.

Problemas da paralelização automática Possibilidade de criar resultados incorretos Degradação do desempenho. Menos flexível que a paralelização manual. Limitação à um subconjunto do código(loops). Pode não paralelizar caso a análise identifique inibidores ou o código seja muito complexo. A maioria das ferramentas de automação automática são para Fortran.

Desenvolvimento de Código paralelo. O primeiro passo é identificar o problema que você deseja solucionar em paralelo. Caso você esteja começando com um código serial, você também necessita compreender o código.

Desenvolvimento de Código paralelo. Antes de gastar tempo tentando arranjar uma solução paralela para o seu código, é necessário primeiro determinar se o problema pode ser paralelizável.

Exemplo de código paralelizável Calcule o potencial de energia para centenas de conformações de moléculas independentes. Ao final busque a menor energia de conformação. Cada conformação pode ser determinada deforma independente O cálculo da conformação mínima de energia também é um problema paralelizável.

Exemplo de código não paralelizável Calcule a série de Fibonacci de (1,1,2,3,5,8,13,21,...) através da fórmula: F(k + 2) = F(k + 1) + F(k) Observe que o cálculo de K depende dos valores de K-1 e de K, e não podem ser calculados em paralelo

Identificação de hotspots no programa Identifique onde a maior parte do trabalho é realizada. Em geral os programas científicos e técnicos executam a maior parte do seu trabalho em poucos pedaços. Profilers e ferramenta de análise de desempenho podem ajudar. Você deve se concentrar em otimizar os hotspots e ignorar os outros pontos.

Identificação dos gargalos do problema Existem áreas que são desproporcionalmente lentas, ou geram paradas na parte paralelizável? Por exemplo, E/S é um gargalo que normalmente faz o programa rodar mais devagar. É possível reestruturar o programa ou utilizar um algoritmo diferente de forma a eliminar partes do programa que não são necessárias?

Identificar os Inibidores de Paralelismo A dependência entre os dados é uma classe comum de inibidores de paralelismo ( exp. Fibonacci) Investigue a possibilidade de utilizar outros algoritmos.