COMPUTAÇÃO PARALELA - inf.unioeste.br · ... Java ...) – linguagens ... Berkeley Open...
Transcript of COMPUTAÇÃO PARALELA - inf.unioeste.br · ... Java ...) – linguagens ... Berkeley Open...
Guilherme GalanteGuilherme Galante● Bacharel em Informática – Unioeste (2003)
● Mestre em Ciência da Computação – UFRGS (2006)
● Professor Assistente do curso de Informática/Ciência da Computação desde 2006
● Atualmente afastado para doutorado – UFPR (2010-2013)
Áreas de Atuação:
● Sistemas de Computação
● Computação Aplicada
Demandas computacionais são cada vez maiores
Ciências e Engenharia
Data Mining
Aplicações Corporativas
Ciências e Engenharia
Desempenho é fundamental...
Três formas de melhorar o desempenho:
1 - Usar um algoritmo/técnica melhor
2 - Usar um computador mais rápido
3 - Computação Paralela
=
Computador mais rápido (CPU)?
http://doi.ieeecomputersociety.org/10.1109/MM.2010.73
Qual a tendência que se observa?Qual a tendência que se observa?
Computação paralela
Uso de diversas unidades de processamento ou computadores para a resolução de um problema em comum
Objetivo:
- Resolver problemas maiores
- Resolver mais rápido
- Resolver mais problemas
Hyperthreading (Simultaneous multithreading)
● Simula múltiplos processadores pela duplicação de algumas unidades funcionais
● Permite que múltiplos threads sejam executados em cada núcleo
Multicores● Consiste em colocar dois ou mais núcleos de processamento
(cores) no interior de um único chip
● Frequências menores
● Surgiu para minimizar alguns problemas:
– Consumo
– Delays na transmissão
– Aquecimento
– Latência da Memória● Previsão 2017: 512 cores (server) 128 (desktop)
● Presente hoje também em smartphones, tablets, videogames
“Power consumption increases by 60% with every400MHz rise in clock speed” - IEEE Review Setembro 2005
Paralelismo em memória compartilhada● Modelo de programação:
– Múltiplas threads compartilhando dados● Aspecto crítico:
– Sincronização quando diferentes tarefas acessam os mesmos dados
● Ferramentas para programação:
– linguagens concorrentes (Ada, Java ...)
– linguagens seqüenciais + extensões/biliotecas (OpenMP, Pthreads, Cilk, HPF)
OpenMP● Interface de programação aplicativa (API) para
desenvolvimento de aplicações multithread em C/C++ e Fortran
● Define:
– Variáveis de ambiente
– Biblioteca de serviços
– Diretivas de compilação
● Modelo Fork-Join:
SIMD – Single Instruction Multiple Data● Cada processador executa a mesma instrução em
sincronia, mas usando dados diferentes
● Técnica muito usada nos anos 70 e 80 na construção de supercomputadores
● Novamente na moda: GPUs e Co-Processadores
GPUs e Aceleradoras
NVIDIA TESLA3072 coresProgramação: CUDA
INTEL Phi61 cores, 4 threads/core1-1.5 GhzProgramação: Ferramentas INTEL
CUDA - Compute Unified Device Architecture
Extensão para a linguagem de programação C, a qual possibilita o uso de computação paralela nas GPUs NVIDIA
Permite a interação CPU → GPU
Execução do programa é controlada pela CPU que pode lançar kernels, que são trechos de código executados em paralelo por múltiplas threads na GPU
PHI
Focado em HPC
− Grande quantidade de processadores IA
− SIMD com 512-bits
− 1-1.5 Ghz
Knight-Corner (KNF)
− 61 cores, 4 threads/core
− 8 GB, GDDR5 (350 GB/s)
− 220-300W
− x16 PCIe
− Virtualização TCP/IP
Cluster
Sistema de computação paralelo formado por um conjunto de computadores (nodos) independentes interligados em rede de alto desempenho
Grid
Grid é um sistema paralelo distribuído no qual os recursos estão espalhados por múltiplos domínios administrativos
● Alusão aos Power Grids
Mais apropriada para aplicações fracamente acopladas
● Tarefas independentes com pouca comunicação
● Aplicações @home – BOINC
● Bag-of-tasks
Paralelismo em memória distribuída● Modelo de programação:
– Troca de mensagens entre tarefas cooperantes
– Bag-of-tasks● Aspectos críticos:
– Comunicação e distribuição dos dados (balanceamento de carga)
● Ferramentas para programação:
– Linguagens sequenciais + extensões/bibliotecas
– MPI (C,C++, Fortran), PVM, Java+RMI, BOINC● Memória compartilhada distribuída:
– Linda, Threadmarks, ...
MPI
Message Passing Interface: troca de mensagens
Padrão com diversas implementações:
● MPICH, OpenMPI...
Primitivas para comunicação:
● Ponto-a-ponto
● Coletivas
Send/Receive
Exemplo MPI
#include <stdio.h>
#include <mpi.h>
int main (int argc, char *argv[])
{int rank, size,
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &rank);
MPI_Comm_size (MPI_COMM_WORLD, &size);
printf( "Hello world from process %d of %d\n", rank, size );
MPI_Finalize();
return 0;
}
Projetando uma aplicação paralela
Escolha da arquitetura
Problema
Escolha das ferramentas
Detecção do paralelismo
Implementação
Validação e testes de desempenho
Projeto do software
Projetando uma aplicação paralela
1 - Detectar o paralelismo:
● Já existe um código sequencial?● Paralelismo de dados x funcional
A B C
Mesma operação sobredados diferentes
Funções diferentesexecutadas em paralelo
Projetando uma aplicação paralela
2 - Escolha da arquitetura● Aplicação é desenvolvida em função do hardware
disponível
● Temos mais que uma opção? Usar uma ou combinar?
Projetando uma aplicação paralela
3 - Modelo da Aplicação● Definir entradas e saídas
● Modelo da aplicação:
– SPMD (single program multiple data)
– Bag-of-Task
– Pipeline
4 – Escolha da Ferramenta
– Escolha da ferramenta apropriada para a arquitetura e o modelo de aplicação
– Ferramentas de desenvolvimento e debug
Projetando uma aplicação paralela
5 - Implementação● Mãos à obra!!!
6 - Validação e testes de desempenho● Minha solução está correta?
● Houve ganhos de desempenho?
– Tempo de Execução
– Speedup
– Eficiência
EXEMPLO DE APLICAÇÃO
Área: Computação CientíficaParalela/Aplicações
Dissertação de Mestrado – UFRGS2004-2006
Simulação de HidrodinâmicaRio Guaíba - RS
Geração da Malha
Particionamento da malha
Geração dos Sistemas de Equações
Resolução dos Sistemas de Equações
Obtenção da solução final
sequencialparalelo
1 - Decomposição de dados2 - Cluster de Computadores3 - SPMD4 - C + MPI
“Para imitar um valor relativamente minúsculo de inteligência, os pesquisadores utilizaram o Fujitsu K para ligar um total de 1,73 bilhões de neurônios virtuais através de 10,4 trilhões de sinapses virtuais (com 24 bytes de memória em cada sinapse - 1PB)...a simulação demorou 40 minutos”
http://gizmodo.uol.com.br/supercomputador-1-por-cento-cerebro/
K (#4 TOP500)SPARC64 VIIIfx 2.0GHz
705.024 cores1.410.048 GB
TCC 2014● Temas:
– Paralelização MPI + OpenMP● Modelos Epidemiológicos● Conjunto com a prof. Claudia
– GPU + CUDA● Implementação de Métodos matemáticos● Conjunto com o prof. Rogério
– Cloud Computing● Elasticidade em Banco de Dados● Conjunto com os prof. Clodis, Marcio e Luiz
● Requisitos
– Conhecimentos em Linux e Programação C
[email protected]/~guilherme