Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Computação de alto desempenho
Aleardo Manacero Jr.DCCE/UNESP
Grupo de Sistemas Paralelos e Distribuídos
Programa
1. Introdução
2. Processadores para CAD
3. Sistemas de memória
4. Paralelismo usando bibliotecas de baixo nível
5. Paralelismo usando openMP
Programa
6. Conectividade e condições de paralelismo7. Identificação de paralelismo e modelos de paralelização8. Avaliação de desempenho e otimização de programas paralelos9. Paralelismo usando MPI10. Paralelismo usando GP-GPUs
Bibliografia
Pacheco, P. – Parallel Programming with MPI
Pacheco, P. - Introduction to Parallel Programming
Shen, J.P., and Lipasti, M.H. - Modern Processor Design: Fundamentals of Superscalar Processors
Hwang, K. – Advanced Computer Architectures
Dowd, K. & Severance, D. – High Performance Computing
Bibliografia
Hennessy, J.L., Patterson, D.A., and Goldberg, D. - Computer Architecture: A Quantitative Approach, 5th edition, 2012
Patterson, D.A., Hennessy, J.L., et al - Computer Organization and Design: The Hardware/Software Interface, 3rd Edition, 2011
Culler, Singh e Gupta - Parallel Computer Architecture,
Etc......
Website da disciplina
http://www.dcce.ibilce.unesp.br/~aleardo/cursos/hpc
O que tem lá:
Avisos sobre a disciplina
Material de aula
Regras de avaliação
Introdução
Porque precisamos de desempenho?Porque queremos resolver problemas complexos, grandes ou com muitos dados
mas
Nossos computadores são LENTOS!!
Introdução
Um bilhão de operações aritméticas por segundo é rápido o suficiente?
Como saber se é suficiente ??
Vamos a um exemplo prático...
Introdução
Um sistema de previsão metereológica trabalha usando um “cubo” cuja base é a área em que se quer prever o tempo e a altura corresponde a altitude a considerar.
Exemplo
Exemplo
Exemplo
Exemplo
Exemplo
Nesse cubo se faz um reticulado (formando uma matriz tridimensional), com o número de pontos determinado pela precisão desejada.
Exemplo
Considerando-se como sistema os EUA e Canadá (área de 20 milhões de km2), como sendo um “cubo” de altitude 20km, com pontos de discretização a cada 1km, teríamos aproximadamente 4.108 pontos para cálculo.
Exemplo
Se para determinar as condições de cada ponto (temperatura, pressão, umidade, vento) realizarmos 5000 instruções de máquina, teremos 2.1012 operações
Para fazer a previsão de dois dias, com informações de hora em hora (o que é impreciso), teremos aproximadamente 1.1014 operações no total.
Exemplo
Numa CPU que realize 1 bilhão de operações por segundo (1x109) isso levaria cerca de 1.105 segundos,
o que resulta em cerca de 27,8 horas!!!
Mas um i7 realiza cerca de 6 bilhões de operações por segundo, então como fica essa conta?
Exemplo
Numa CPU que realize 6 bilhões de operações por segundo (6x109) isso levaria cerca de 16,6.103 segundos,
o que resulta em cerca de 4,6 horas!!!
Para reduzir esse tempo para algo que permita reação (menos que dez minutos), nosso computador teria que fazer cerca de 200 bilhões de operações por segundo!!
Exemplo (um adendo)
Um Xeon (W-2140B) tem velocidade máxima de 87 Gflops (16 núcleos de 5,44 Gflops cada), o que permitiria fazer o mesmo processamento em cerca de 1150 segundos,
ou cerca de 19 minutos!!!
Esse é um valor razoável, mas vale apenas se os 16 núcleos operarem em paralelo
Conclusão do exemplo
Precisamos de um “supercomputador” para fazer essa previsão.
Mas será que dá para implementar esse supercomputador??
Apenas se usarmos paralelismo....
Porque só com paralelismo?
Suponham que temos uma máquina capaz de realizar um 200 bilhões de operações por segundo.
Se a usarmos para executar o comando
for (i=0; i < DuzentosBi; i++)
z[i] = x[i] + y[i];
O que acontecerá??
Porque só com paralelismo?
Para executar o comando listado é preciso fazer 600 bilhões de acessos à memória em um segundo
Se cada acesso ocorresse na velocidade da luz, teríamos como distância média d, entre CPU e memória, o seguinte:
d = v (um acesso) / número de acessos = 3.108 / 0,6.1012
= 5.10-4m = 0,5mm
Porque só com paralelismo?
Assim o “diâmetro” da memória é, no máximo, o dobro dessa distância, o que resulta em DIAM = 2 * d = 1,0.10-3m
Se a memória tiver que armazenar as posições dos três vetores do exemplo, então o diâmetro de uma posição é dado por
10 átomos ≃diam ( pos)=DIAM
√0,6 .1012≃1. 10−9m
Mas e Xeon a 87 Gflops??
Considerando o código anterior, mas fazendo 87 bilhões de acessos à memória em um segundo temos:
d = v (um acesso) / num de acessos
= 3.108 / 87.109
= 3,4.10-3m = 3,4mm
Mas e o Xeon a 87 Gflops??
Assim o diâmetro da memória é, no máximo, o dobro dessa distância, o que resulta em DIAM = 2 * d = 6,8.10-3m
Se a memória tiver que armazenar as posições dos três vetores do exemplo, então o diâmetro de uma posição é dado por
≈ 230 átom osdiam ( pos)=DIAM
√87 .109≃23 .10−9m
Exemplos de aplicação
Produção de batatas Pringles
Exploração de petróleo
Aerodinâmica
Geociências
Data mining
Machine learning
E-commerce
Exemplos de aplicação
Exemplos de aplicação
Exemplos de aplicação
Exemplos de aplicação
Exemplos de aplicação
Exemplos de aplicação
Como se faz(ia) CAD?
Uso de supercomputadores (processamento vetorial)
Uso de máquinas massivamente paralelas
Uso de clusters de computadores
Uso de grids
Uso de processadores paralelos (multicores e GPUs) híbridos
Diferenças entre sistemas
Os sistemas do slide anterior se diferenciam por terem arquiteturas diferentes
Cada arquitetura apresenta recursos de hardware e possibilidades de desempenho diferentes
Mas então o que é arquitetura
Arquitetura de um computador
É como são definidas a organização do hardware e as necessidades de software de um sistema
No hardware temos:CPUCacheMemóriaBarramentosMicrocódigosPipelines
Arquiteturas convencionais
A máquina de Von Neumann
Gargalo de von Neumann
A máquina de von Neumann, embora bastante eficiente em sua origem, é um problema pois...
... obriga que se faça sempre um acesso estritamente sequencial aos dados e instruções
Gargalo de von Neumann
Uma alternativa para esse problema é acelerar os processos de acesso aos dados e instruções e de execução das mesmas, o que é feito através de
Memória cache
Pipeline
Gargalo de von Neumann
Cache: Faz o armazenamento intermediário de dados e instruções (normalmente separados) em memória rápida.
Seu uso é possível graças ao Princípio da Localidade.
Gargalo de von Neumann
Pipeline:Substitui a unidade de controle (UC) por unidades especializadas em etapas do processo de execução de uma instrução.
Gargalo de von Neumann
Outra alternativa.....
.... o uso de arquiteturas não-convencionais (paralelas)
Arquiteturas paralelas
A forma de estruturação do hardware de sistemas paralelos pode variar bastante.
Essas variações envolvem a forma como as máquinas são ligadas e as maneiras de organização dos dados e das instruções dos programas.
Classificação de Flynn
Uma forma de sistematizar a variedade de configurações é a classificação proposta por Flynn, em termos do fluxo de instruções e dados, que resulta em:
SISD sistemas convencionais
SIMD computadores vetoriais
MISD arrays sistólicos
MIMD paralelismo massivo
Classificação de Flynn
Na classificação de Flynn as siglas têm o seguinte significado:
S / M = single ou multiple streams
I = instruction stream (fluxo de instruções)
D = data stream (fluxo de dados)
Como obter o paralelismo?
Basicamente são dois tipos de sistemas:
Os multiprocessadores
X Os multicomputadores
A diferença entre eles é a forma de acoplamento entre os elementos de processamento.
O que muda no processador?
Nada...
Exceto pelo maior número de elementos de processamento.
O que muda na memória?
Quase tudo....
No caso de multiprocessadores a memória aparece em três diferentes modelos de acesso:
UMA, NUMA e COMA
Memória UMA
Todos os dados, independente de sua localização física, têm tempo de acesso uniforme para todos os processadores.
Memória NUMA
Aqui os tempos de acesso mudam conforme a localização física dos dados.
Memória NUMA
Cluster hierárquico
Memória COMA
O acesso aos dados é feito considerando a memória local como memória cache.
E para os multicomputadores?
O padrão de acesso é através de troca de mensagens!
Como programas tratam a memória?
Os modelos de acesso descritos não consideram como se dá o direito de acesso dos programas aos dados na memória.
Isso é feito pelos modelos PRAM (Parallel Random Access Machine)
Modelos PRAM
Definem as formas de acesso para operações de leitura e escrita na memória. Assim temos:
EREW Escrita e Leitura exclusivas
CREW Escrita exclusiva, Leitura concorrente
ERCW Escrita concorrente, Leitura exclusiva
CRCW Escrita e Leitura concorrentes
Conflitos de escrita são resolvidos por protocolos como “todos iguais”, “último a escrever”, etc
Um pouco de história (antiga)
As máquinas de alto desempenho seguiram, em seus primeiros anos, quatro caminhos:
Multiprocessadores com memória compartilhada
Multiprocessadores com troca de mensagens
Máquinas vetoriais
Máquinas massivamente paralelas (SIMD)
Multiprocessadores com memória compartilhada
COMA
crossbar
Clusters de SMPs
Multiprocessadores com troca de mensagens
Caltech
Conectividade interessante
Máquinas vetoriais
Projeto fracassado
Seymour Cray fez projeto
Máquinas massivamente paralelas (SIMD)
Seymour Cray fez projeto
Big fail
Big hit
Uso de transputers
Máquinas massivamente paralelas (SIMD)
Padrão atual
Incremento de ambientes multicomputadores: Clusters (Beowulf),
Grades (grid computing) e
Soluções multicore (incluindo GPUs)
Uso de ambientes mistos, com clusters de nós multiprocessadores
Uso de processadores auxiliares de baixo (muitas vezes nem tanto) custo
CAD no mundo
Quem produz equipamentos de CAD, hoje em dia, são empresas americanas e chinesas (poucas japonesas e européias)
Quem usa CAD, hoje em dia, está no hemisfério norte
Existe um levantamento que ranqueia equipamentos de alto desempenho em funcionamento, o Top500 Report
O que diz o Top500
Detalhes em www.top500.org
De novembro de 2019 destacam-se:
Clusters totalizam mais de 91% das máquinas, embora não sejam as mais potentes
Summit (em Oak Ridge) é a atual nº 1, com 148.600 TFlops
78,8% das máquinas entre China (45,6), EUA (23,4), Japão (5,8) e França (4.0)
O que diz o Top500
Outros destaques:
3 máquinas na América Latina (no Brasil)
A máquina mais potente do Brasil é um cluster do LNCC (1849 Tflops, na posição 193)
As outras estão na Petrobrás (195) e SENAI (347)
6 máquinas no hemisfério sul (Austrália (3) e Brasil (3))
No hemisfério sul o sistema mais potente está na Austrália (posição 47, com 4407 TFlops)
O que diz o Top500
Santos Dumont – LNCC é a máquina brasileira mais potente, com 1849 TFlops
O que diz o Top500
Outros destaques:
458 clusters, usando processadores tipicamente Intel (Xeon)
144 sistemas com coprocessadores (principalmente Nvidia (135) e Intel Xeon Phi (5))
Uso intenso de Infiniband e Gigabit Ethernet como redes de conexão, embora Cray Interconnect e outros padrões proprietários tenham maior desempenho total
Distribuição por países
desempenho
Distribuição por países
USA
China
Japão
UKFrança
Alemanha
Área de aplicação
desempenhoSistemas
Área de aplicação
Universidades
Pesquisa
Indústria
Desempenho global
#1
#500
Total
Previsões do futuro (em 2015)
2016
2019/20
Previsões do futuro (em 2016)
2016 confirmado
2020
Previsões do futuro (em 2017)
Curva mudandoinclinação
2020 ??
Previsões do futuro (em 2018)
Inclinação mudou
2021 ??
Previsões do futuro
2021 ??Será a Lei de Moore?
Tipos de arquitetura
Sistemasdesempenho
Tipos de arquitetura
Clusters
MPP
SMP
ConstelaçãoSingle
2003
Tipos de Sistema Operacional
Sistemasdesempenho
Mecanismos de comunicação
Sistemas desempenho
Mecanismos de comunicação
desconhecido
hipercubo
toróide
SP switch
hipercubohyperplex
myrinet
Gigabit Ethernet
Infiniband
10G
2000 2005 2010
outros
2015
40G
25G
AriesOmni
ALGUNS SISTEMAS
(alguns novos, outros nem tanto !)
IBM Stretch Supercomputer
Lançado em 1961
Capacidade de 100 bilhões de operações
Por dia!!!!
Tinha 150 mil transistores....
i7 tem 1.17 bilhões
IBM Stretch Supercomputer
Algumas inovações importantes:
Multiprogramação
Pipeline
Proteção de memória
Byte de oito bits
IBM Stretch Supercomputer
Earth Simulator
IBM BlueGene/L (2004)
IBM BlueGene/L
IBM BlueGene/L
IBM RoadRunner (2008)
IBM RoadRunner
IBM RoadRunner
IBM RoadRunner
IBM RoadRunner
Cray XT4 (2006)
Cray XT5 (Jaguar - 2009)
Cray XT5
Cray XK7 - Jaguar (2009/12)
Jaguar
Tianhe (2010)
IBM BlueGene/P
BlueGene/Q - Sequoia (2012)
Cray XK7 - Titan (2012/3)
Cray XC-40 (2014)
Desempenho esperado de 75 Tflops/rack
Até 128 Xeon E5 por rack
Cray Linux (versão do SuSE Linux)
Cray XC-40
Sunway Taihulight (2016)
Summit (2018)
Summit (2018)
Summit (2018)
GPU
Power9
Summit (2018)
Frontier (2021 ??)
O que usar?
Padrão atual
Incremento de ambientes multicomputadores, principalmente através dos conceitos de:
cluster de estações de trabalho (Beowulf),
computação por grades (grid computing) e
computação ubíqua (ubiquitious computing)
Clusters
Clusters
Grids
Grids
Padrão atual
Incremento no uso de processadores dedicados, como:
processadores gráficos (GPU),
FPGA e
cell processors (em desuso)
Cray XD1
Cray XD1
D-Wave 2 Quantum Computer
D-Wave 2 Quantum Computer
Onde chegaremos
Onde chegaremos
Lei de Moore
Problemas com consumo de energia e resfriamento dos processadores (top500 agregou dados sobre consumo de energia)
Uso cada vez mais intenso de clusters e suas derivações (multicores, grids, clouds, etc)
Tendência de máquinas orientadas para aplicação (Google e TPUs)
Onde chegaremos