Você está na página 1de 21

SSC0903 – COMPUTAÇÃO DE ALTO DESEMPENHO

COMPUTAÇÃO DE ALTO DESEMPENHO:


INTRODUÇÃO E CONCEITOS BÁSICOS
Sarita Mazzini Bruschi

Slides de autoria de:


PAULO SÉRGIO LOPES DE SOUZA
pssouza@icmc.usp.br

Universidade de São Paulo / ICMC / SSC – São Carlos


Laboratório de Sistemas Distribuídos e Programação Concorrente
MOTIVAÇÃO À COMPUTAÇÃO DE ALTO
DESEMPENHO

• Motivação Histórica para a Computação de Alto Desempenho (CAD)


• Execuções mais eficientes no hardware e no software
• Desempenho, uso de recursos, consumo energético
• No hardware:
• Cache, maior frequência, paralelismo microarquitetura, multicore, RAM + rápida, …
• No software:
• Reduzir complexidade de algoritmos, programação paralela, ...
• Computação Paralela busca alto desempenho
• Hardware e software específicos
• Programação paralela herda conceitos de SOs multiprogramados, especificamente da
programação concorrente
2 • Primeiros conceitos vieram da programação concorrente (esta mais geral)
MOTIVAÇÃO À COMPUTAÇÃO DE ALTO
DESEMPENHO

• Programação concorrente visava desenvolver SOs multiprogramados mais confiáveis


• Primeiros SOs multiprogramados eram uma bagunça:
• Desenvolvidos em linguagem de montagem

• Sem fundamentação teórica

• Tornaram-se enormes com vários erros difíceis de serem rastreados

• Teste era um tormento devido ao não determinismo de comunicação e sincronização entre processos

• Geraram uma crise de software: resolvida pela programação concorrente

3
MOTIVAÇÃO À COMPUTAÇÃO DE ALTO
DESEMPENHO

• Programação concorrente tornou-se uma das maiores revoluções na programação de


computadores
• Novas estruturas de comunicação e sincronização organizaram programas

• Abstrações de processos, memória e E/S permitiram extrapolar a programação


concorrente para a programação paralela

4
OBJETIVOS DA COMPUTAÇÃO PARALELA

• Desenvolvimento de soluções computacionais de alto desempenho


• Indicar explicitamente como as diferentes computações serão executadas paralelamente
• Aqui há diferentes níveis de abstração com mais ou menos transparência
• Usar eficientemente recursos de hardware (processadores, memória e E/S)

• A programação concorrente (e paralela) deve permitir:


• Ganhos de desempenho com mais transistores
• Ex: multi e manycores

• Reduzir o gap entre memória e CPU com acessos concorrentes à memória


• Ex: sobreposição de requisições à memória
5
POR QUE CONSTRUIR PROGRAMAS PARALELOS?

• Hardware pode otimizar o desempenho:


• Frequências maiores, paralelismo na microarquitetura, caches, …

• Mas o hardware precisa de um software apropriado


• Personalizar soluções eficientes para problemas computacionalmente difíceis

6
POR QUE CONSTRUIR PROGRAMAS PARALELOS?

• Software paralelo pode ser construído automaticamente por compiladores


• Apresentam desempenho limitado se não houver intervenção do programador

• Versões sequenciais eficientes podem não ser eficientes em paralelo

• Dependências de dados, controle e estruturais reduzem ganhos

• A evolução do hardware é outro fator importante


• Máquinas atuais já são paralelas há mais de 18 anos (multicore 2005 ...)

• Máquinas manycore também são comuns há bastante tempo (2009 …)

7 • Computação heterogênea já é uma característica comum


DIFERENÇAS ENTRE SOLUÇÕES SEQUENCIAIS E
PARALELAS

• Detalhes de hardware e software são mais visíveis ao programador


• Têm forte impacto no desenvolvimento e no desempenho

• São necessárias diferentes soluções para diferentes


• Hardwares, SOs e modelos de programação

• Teste e depuração consideram não determinismo

8
DIFERENÇAS ENTRE SOLUÇÕES SEQUENCIAIS E
PARALELAS

• Aspectos adicionais a serem considerados:


• Códigos multidimensionais
• Identificação do paralelismo na aplicação
• Maior impacto da arquitetura e software básico
• Uso de novas ferramentas de software para ao desenvolvimento
• Uso de novas estruturas de programação
• Iniciar e finalizar processos
• Comunicar dados
• Sincronizar computações
• Distribuição da carga de trabalho entre processos e processadores
• Gerência de dados compartilhados ou locais
• Localidade espacial e temporal dos dados são vitais
9 • Teste e depuração consideram não determinismo
CONCEITOS BÁSICOS

• Computação paralela
• Uso do computador paralelo para aumentar eficiência ou permitir eficácia, usando um programa
desenvolvido pela programação paralela

• Computador paralelo
• Computador com múltiplos processadores, memórias e outros dispositivos replicados

• Programação concorrente ou paralela ou distribuída


• Atividade de programar em uma linguagem de programação para determinar quando e como
tarefas podem ser executadas por diferentes processos ao mesmo tempo (lógico), no mesmo
processador ou em processadores diferentes

10 • Programa x Processo x Thread


CONCEITOS BÁSICOS

• Processos concorrentes
• Dois ou mais processos que iniciaram e ainda não finalizaram a sua execução

• Este definição é bem abrangente.

• São processos que concorrem pelos recursos de um sistema computacional

• Por definição, podem estar executando em um processador ou em diferentes processadores

• Há diferentes variações desta definição na literatura: pseudoparalelismo

11
CONCEITOS BÁSICOS

• Processos paralelos
• São uma especialização de processos concorrentes
• Sempre executam em processadores distintos
• Paralelismo real

• Processos distribuídos
• Podem ser considerados um sinônimo de processos paralelos
• Têm objetivos e modelos de programação distintos
• Normalmente visam o compartilhamento de recursos
12
• Encapsulam mais os detalhes de níveis inferiores de hardware e software
CONCEITOS BÁSICOS

• Interação: comunicação & sincronização


• Comunicação: troca de dados
• Sincronização: garante a ordem de execução dos processos

• Granulação (ou granularidade)


• Relação entre a computação e a interação
• Quanto maior a computação frente à interação, maior a granulação
• Granulações mais finais (menores) têm o potencial para oferecer melhores desempenhos em
sistemas com recursos mais eficientes
• Granulações finas oferecem maior grau de paralelismo
13
CONCEITOS BÁSICOS

• Pipeline
• Sobreposição de múltiplas instâncias de um problema

• Paralelismo temporal extraído de diferentes estágios de uma solução

14
CONCEITOS BÁSICOS

• Tempos em computação
• Execução: tempo executando instruções do processo na CPU
• Resposta: tempo entre a submissão do processo e seu retorno/finalização
• Inclui tempo de execução e tempo ocioso na fila de bloqueado ou pronto
• Ocioso: tempo que o processo parou aguardando para executar
• E/S, fila de pronto, …
• Sequencial: tempo de resposta (ou execução) da versão sequencial de um programa
• Paralelo: tempo de resposta (ou execução) da versão paralela de um programa com vários
processos em paralelo.
• Começa a contar quando o primeiro processo inicia e termina de contar quando o último
processo finaliza.
15
CONCEITOS BÁSICOS

• Métricas para avaliar ganho de desempenho


• Speedup (Sp) => determina o ganho de desempenho
• Absoluto: considera Tseq o melhor algoritmo sequencial conhecido
• Sp = Tseq / Tparp (p indica a quantidade de processadores usada)
• Relativo: considera Tseq a exec da versão paralela sobre um processador
• Sp = Tpar1 / Tparp

• SP linear (Sp = p) ideal, é o que buscamos


• SP sublinear (Sp < p) caso comum
• SP superlinear (Sp > p) pode acontecer
16
CONCEITOS BÁSICOS

• Métricas para avaliar ganho de desempenho


• Eficiência (Ep) => determina a eficiência no uso de p processadores
• E = Spp / p
• Escalabilidade
• Eficiência permanece constante para a carga de trabalho e o número de processadores aumentam ou
diminuem

17
CONCEITOS BÁSICOS

18
CONCEITOS BÁSICOS

• Modelos de sistemas paralelos


• Modelos de máquina
• Nível de abstração mais baixo
• Descrição de hardware e SO: regs, buffers de E/S, assembly
• Modelos arquiteturais
• Redes de conexão, organização de memória, sincronia de processadores, …
• Classificação de arquiteturas de Flynn
• Modelos computacionais
• Modelos arquiteturais formais para modelagem de desempenho
• RAM, PRAM, PHASE, BSP, LogP, …
19
• Modelos de programação ...
CONCEITOS BÁSICOS

• Modelos de programação
• Descrevem semânticas da linguagem de programação

• Visão do programador e como ele pode codificar o algoritmo

• Sofrem influência dos demais modelos

• Diferentes modelos de programação para uma mesma arquitetura

20
CONCEITOS BÁSICOS

• Modelos de programação
• Itens a serem considerados:
• Nível do paralelismo:
• instrução, comandos, procedimentos, loops, processos
• Implícito (compiladores) ou explícito (programador)
• Especificação de tarefas concorrentes (grau de paralelismo)
• Distribuição de tarefas em processos em processadores
• Balanceamento da carga
• Modo de execução de tarefas
• SIMD, SPMD, MPMD, síncrono ou assíncrono
• Padrões de comunicação
• Passagem de mensagens ou variáveis compartilhadas
• Mecanismos de comunicação e sincronização
21
• Organizam a computação e interação entre processos

Você também pode gostar