Computação de Alto Desempenho

Post on 30-Oct-2021

2 views 0 download

Transcript of Computação de Alto Desempenho

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