Buscar

Programação Paralela e Arquiteturas

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Programação Paralela 
Distributed and Parallel Computing (DPC) 
Christian Rodrigues Moura 
Universidade Federal de Viçosa – 
Campus Rio Paranaíba 
Instituto de Ciências Exatas e 
Tecnológicas 
Rio Paranaíba – MG - Brasil 
christian.moura@ufv.br 
Jordi Henriques Marques da Silva 
Universidade Federal de Viçosa – 
Campus Rio Paranaíba 
Instituto de Ciências Exatas e 
Tecnológicas 
Rio Paranaíba – MG - Brasil 
jordi.silva@ufv.br 
Matheus Breguêz Rocha Vieira 
Universidade Federal de Viçosa – 
Campus Rio Paranaíba 
Instituto de Ciências Exatas e 
Tecnológicas 
Rio Paranaíba – MG - Brasil 
matheusrv@email.com
 
 
 
I. RESUMO 
Este artigo tem o intuito de apresentar os conceitos de 
programação paralela, definições, técnica utilizada e as mais 
utilizadas arquiteturas até os dias atuais. Como forma de 
proporcionar um conhecimento suplementar, serão trabalhados 
os principais conceitos de arquitetura Superescalar, 
Multithreads, Multi Core e Many Core e como elas 
funcionam. 
II. INTRODUÇÃO AO TEMA 
O Processamento paralelo é apresentado como uma forma 
de otimizar a capacidade de execução das tarefas, que exigiam 
abundância de processamento. 
Um dos problemas dos anos de 50 até 60 era que para 
conseguir aumentar a velocidade de processamento das 
aplicações somente era possível fabricando novos 
processadores mais velozes, ou ter um maior número de 
processadores agrupados. Em meados dos anos 70 a 
tecnologia não era capaz de atender a crescente necessidade de 
capacidade de processamento, o que criou a necessidade de 
criar arquiteturas de processamento paralelo no qual se torna 
possível subdividir as aplicações em fragmentos no quais 
serão executados concorrentemente em cada processador do 
conjunto. 
Umas das áreas que se dedica a desenvolver tais melhorias 
é a High Performace Computing (HPC) no qual 
suas subáreas são, Linguagens de Programação, compiladores, 
teoria da computação e computabilidade, arquitetura de 
computadores, outra área externa que caminha junto a isso é a 
computação gráfica. 
No decorrer deste artigo iremos mostrar inúmeros tipos de 
arquiteturas, tais como: Superescalares, Paralelismo em 
microchips, Multithread, Multi core e Many core, suas 
métricas e como cada uma delas funciona. 
 
III. REVISÃO BIBLIOGRÁFICA DE TRABALHOS 
RELACIONADOS AO TEMA 
Organização organizar a interação entre cada 
computador é primordial. Visando poder usar o maior 
número possível de máquinas e tipos de computadores, o 
protocolo ou canal de comunicação não pode conter ou usar 
nenhuma informação que possa não ser entendida por certas 
máquinas. Cuidados especiais também devem ser tomados 
para que as mensagens sejam entregues corretamente e que 
as mensagens inválidas sejam rejeitadas, caso contrário, 
levaria o sistema a cair ou até o resto da rede. 
Como o aumento da velocidade dos processadores 
esbarrava no custo e no limite da capacidade tecnológica 
para obtenção de circuitos rápidos, a solução tendeu para o 
emprego de vários processadores trabalhando em conjunto 
na obtenção de uma maior capacidade de processamento. É 
 
quando surge o termo Processamento Paralelo para designar 
técnicas diferentes de concorrência que atendem a essas 
necessidades. [NAUVAX, Phillipe 2011] [2] 
Contextualizando o atual cenário da área, a corrida 
pelo aumento da frequência de clock e aprofundamento de 
técnicas de paralelismo no nível de instrução (ILP – 
Instruction Level Paralelism) [Smith and Sohi 1995] [1] nos 
microprocessadores comerciais (disputada pelos principais 
fabricantes nas décadas de 1980 e 1990) deu lugar à corrida 
pelo aumento do paralelismo no nível de threads, com a 
introdu- ção de uma quantidade elevada de núcleos de 
processamento em um mesmo circuito integrado [Olukotun 
et al. 1996] [3], nomeados chips multi-core. Neste sentido, 
existem diversas pesquisas sobre formas de comunicação 
entre os diversos núcleos, seja através de uma rede intra-
chip [Bjerregaard and Mahadevan 2006] [4] [Freitas et al. 
2007] [5] [De Micheli and Benini 2006] [6], ou por 
memória compartilhada, onde existem pesquisas sobre 
formas de melhor organizar as memórias cache desses 
núcleos de processamento [Alves et al. 2009] [7] [Marino 
2006] [8], além de possíveis alterações arquiteturais, como 
no 347 caso das memórias cache de arquitetura não-
uniforme (NUCA) [Bardine et al. 2008] [9] [Kim et al. 
2002] [10] 
Com os avanços da ciência, o método científico 
(observação, teoria e experimentação) ganhou um 
importante aliado: a simulação numérica. Este por sua vez 
passou a ser definido como método científico moderno 
[Quinn 2003] [11]. Ainda segundo Quinn (2003) “a 
simulação numérica é uma importante ferramenta para os 
cientistas que às vezes não podem testar suas teorias, seja 
pelos custos e tempo que isto envolve, por questões éticas 
ou ainda quando é impossível realizá-las”. Simular eventos 
naturais como a previsão do tempo, dinâmica de fluídos, 
sequenciamento genético ou mesmo buscar novas drogas 
para a cura de doenças requerem modelos mais complexos 
e com grande poder computacional. Devido a magnitude de 
tais problemas, estes por sua vez são categorizados como os 
Grandes Desafios da Ciência [Quinn 2003] [11]. 
Há fascinantes aplicações e excelentes oportunidades 
onde a computação paralela pode representar ganhos de 
desempenho significativos. Pode-se relacionar inúmeros 
outros casos, porém os exemplos acima são suficientes e 
motivantes a investir tempo para conhecimento e 
aprimoramento do assunto. 
IV. DETALHAMENTO DO TEMA 
 
Para aprofundar sobre programação paralela, primeiro é 
necessário explicar sobre as diversas e mais usadas 
arquiteturas responsáveis. A forma como são disponibilizadas 
e utilizadas as estruturas e os componentes de um processador 
define o seu modelo de arquitetura. 
 
 
A. Arquiteturas Superescalares 
 
 Rapidamente pode-se definir uma arquitetura 
superescalar como uma arquitetura que permite iniciar 
várias instruções ao mesmo tempo e que as mesmas 
possam ser executadas de forma independente. Esse tipo 
de arquitetura se difere da técnica pipeline, pois na 
pipeline é necessário executar as instruções em estágios 
diferentes (de forma sequencial). 
 
 Entendendo a técnica Pipeline: 
 Pipeline é uma técnica aplicada a processadores que 
divide a atividade em várias partes denominadas estágios. 
Com isso, varias instruções podem ser realizadas ao 
mesmo tempo, porém em estágios diferentes. Entretanto o 
pipeline não reduz o tempo de execução de uma tarefa, 
pois por ser de forma sequencial, um estágio de uma 
mesma tarefa só é executado assim que o estágio 
antecessor for concluído. Com tudo a arquitetura 
superescalar pode realizar a técnica de pipeline, aliás, 
várias pipelines. 
 A partir de agora serão abordados os estágios da 
arquitetura superescalar. 
 
 Verificação de Dependências 
 
 Este estágio verifica e resolve as dependências do 
processo. Podem ser elas: dependência de dados, controle e 
estrutural. Isto é necessário para que o sentido e a 
integridade da atividade sejam mantidos. 
 
 Busca de Instruções 
 
 Estágio com a função de buscar as instruções na 
memoria cache e inseri-las na fila de instruções. Na 
arquitetura superescalar, essa função acaba trazendo varias 
instruções. 
 
 Detecção de paralelismo e despacho de 
múltiplas instruções 
 
 Responsável por identificar se uma ou mais 
instruções podem ser executadas simultaneamente. Estágio 
que no qual decodifica as instruções para realizar a análise e 
julgar quais entrarão simultaneamente. Depois da análise 
feita, o estágio identifica
as instruções, seleciona e as 
encaminham para as unidades funcionais e desaloca 
instruções realizadas. 
 
 
 Previsão de desvios 
 Subsequente ao despacho de instruções é necessário 
analisar se podem ser realizados desvios. Necessariamente 
pode pular instruções que são dependentes para a realização 
das independentes, e assim posteriormente retomando a 
instrução que está à espera de algum recurso. 
 
 
 
 Execução de instruções 
 Neste estágio realmente são executadas cada instrução. 
Nas várias unidades funcionais são realizadas as instruções 
simultaneamente. 
 
 
 
B. Arquiteturas Multithreads 
 
Antes de aprofundar em Multithreads é necessário definir 
Thread. Thread é denominado a divisão de um processo 
principal em vários processos. Porém nem todos os 
processos são divisíveis. 
 
 
 Figura 2 - Processo com Monothread ou Thread 
 Na figura 2 é possível analisar que aos Threads são 
executados separadaos com seus respectivos 
endereçamentos, registradores, temporizadores e arquivos. 
Esse detalhe que muda na arquitetura Multithread. 
 
 Logo se define que na arquitetura Multithread não 
existe um conceito de um programa, e sim de Threads. O 
processo necessita de pelo menos um Thread para execução 
e pode compartilhar o espaço de endereçamento com vários 
outros e são executados de forma concorrente quando 
existem outros processadores. Assim quando um Thread 
está à espera de um recurso, outro toma o seu lugar. 
 
Figura 3 - Processo Multithread 
 
 Além de compartilharem o mesmo endereçamento, 
também em conjunto possuem temporizadores e arquivos, 
mas cada um possui seus próprios registradores. A imagem 
a seguir exemplifica de forma mais clara. 
 
 
 Figura 4 - Processo Multithread 
 
 
 Os threads são colocados em prol do hardware e 
assim ficam aguardando a chance de ganharem o 
processador e serem executados. 
 
 
 Os threads são colocados em prol do hardware e 
assim ficam aguardando a chance de ganharem o processador 
e serem executados. Essa arquitetura multithread dividi-se em 
três tipos diferentes sujeitas a forma que serão exececutados as 
threads. 
 Multithreading(Interleaver Multi Thread) IMT - 
Consiste em um método que para cada iteração 
do ciclo, um novo thread é executado. Então 
sempre vai gerar uma alternância na execução 
das instruções. Neste metodo é possível eliminar 
conflitos e dependências de dados . 
 
Figura 1 - Arquitetura Superescalar 
 
 Multithreading(Blocked Multi Thread) - 
BMT Método que diferente do IMT, a cada 
novo ciclo, ele não altera a Thread até mudar de 
contexto. Uma thread só é interrompida se 
houver evento de latência. 
 
 Simultaneous Multi Thread SMT - Método que 
aceita multiplos threads enviarem várias 
instruções por iteração do ciclo para as unidades 
funcionais. 
 
 A figura abaixo apresenta comparativamente o 
funcionamento dos tipos diferentes de multithread. 
 
 
 
Figura 5 - Escalonamento de tarefas nos diferentes tipos de 
Multithreads. 
 
C. Arquitetura Multi Core 
 
 Esta arquitetura explora a capacidade de realizar 
multithreading por mais de um processador 
simultaneamente. Ou seja, mais de uma unidade de 
processamento. Esse poder trouxe o benefício de executar 
varias tarefas de processamento complexo ao mesmo 
tempo. 
 A arquitetura Multicore trouxe até os dias atuais a 
capacidade de colocar dois ou mais processadores dentro de 
um mesmo chip e junto, quatro tipos de organização com 
modelos de memória cache compartilhada. 
 São eles: 
 Primeira Organização: Composta por uma 
memória cache L1 dedicada para cada núcleo e 
uma memória cache L2 compartilhada fora do 
chip. 
 Segunda Organização: Possui memórias cache L1 
e L2 para cada processador(núcleo) dentro do chip. 
 Terceira Organização: Composta por uma 
memória cache L1 dedicada para cada núcleo e 
uma memória cache L2 compartilhada, porém as 
duas dentro do chip. 
 Quarta Organização: É composta por três 
memórias caches L1 e L2 para cada processador e 
uma L3 compartilhada. 
 
Figura 6 - Exemplo da quarta geração. Processador 
Intel i7 
 
 
D. Arquitetura Many Core 
 
 A arquitetura many core é composta por muitos 
núcleos. Porém por possui esse grande número de 
processadores gerou um limite de conexão (problema 
físico). Não foi possível mais realizar a comunicação das 
cores por meio de memórias caches. 
 Com tudo, a conexão entre os processadores foi 
desenvolvida por mensagens. Cada núcleo possui um 
roteador e estes se comunicam durante os processos. A 
arquitetura distribui a carga de trabalho entre os cores e 
também possui núcleos reservas para que caso algum falhe 
este pode ser substituído. 
 
 
Figura 7 - Processador com arquitetura many core. 
 
 
 
. 
 
V. CONCLUSÃO 
Com o decorrer o tempo é possível notar uma grande 
evolução de arquiteturas na qual é permitido o paralelismo 
ser implementado, a motivação de poder contar cada vez 
mais com máquinas capazes de realizar um maior número 
de tarefas concluídas por unidade de tempo (throughput), 
proporcionando outro nível entre as relações de área, 
consumo de potência e desempenho. 
É notável que a evolução das arquiteturas esteja 
resultando em processadores mais potentes, porém na 
atualidade encontramos barreiras para dobrar o nosso poder 
de processamento, foi proposto que o tempo necessário para 
dobrar a capacidade de processamento era um ciclo de 18 
meses, isto em 1995 por Gordon Moore, porém em 2016 a 
Intel notificou que não seria capaz de integrar a metade de 
chips (transistores) que seria necessário para que a Lei de 
Moore continuasse em execução. 
Sabemos que ainda estamos longe da construção de 
supercomputadores com núcleos compartilhados como se 
fossem físicos, mas que a computação caminha para 
construção de uma arquitetura que é capaz de suportar 
grandes volumes de processamentos distribuindo em um 
grande número de computadores como é o caso da rede 
BOINC (Berkeley Open Infrastructure For Network 
Computing) no qual qualquer um pode instalar um software 
podendo assim compartilhar recursos do seu computador 
para processamento de pesquisas científicas. 
VI. REFERENCIAS BIBLIOGRÁFICAS 
 
 
1. Smith, J. E. and Sohi, G. S. (1995). The microarchitecture of superscalar 
processors. IEEE, 83(12):1609–1624 
2. TENENBAUM, Andrew S., Distributed Systems: Principles and 
Paradigms, pg. 2. ISBN 0-13-239227-5, New Jersey, 2006. 
3. Olukotun, K., Nayfeh, B. A., Hammond, L., Wilson, K., and Chang, K. 
(1996). The case for a single-chip multiprocessor. In Proceedings 
ASPLOS: Int. Symp. on Architectural Support for Programming 
Languages and Operating Systems, pages 2–11. IEEE 
4. Bjerregaard, T. and Mahadevan, S. (2006). A survey of research and 
practices of networkon-chip. ACM Computing Surveys, 38:1–51. 
5. Freitas, H. C., Colombo, D. M., Kastensmidt, F. L., and Navaux, P. O. 
A. (2007). Evaluating network-on-chip for homogeneous embedded 
multiprocessors in fpgas. In Proceedings ISCAS: Int. Symp. on Circuits 
and Systems, pages 3776–3779. 
6. De Micheli, G. and Benini, L. (2006). Networks on Chips: Technology 
and Tools. Morgan Kaufmann. 
7. Alves, M. A. Z. (2009). Avaliação do compartilhamento das memórias 
Cache no desempenho de arquiteturas Multi-Core. PPGC / UFRGS -
Programa de Pós-Graduação em Computação da Universidade Federal 
do Rio Grande do Sul. 
8. Marino, M. D. (2006). 32-core cmp with multi-sliced l2: 2 and 4 cores 
sharing a l2 slice. In Proceedings SBAC-PAD: Int. Symp. on Computer 
Architecture and High Performance Computing, pages 141–150. IEEE. 
9. Bardine, A., Comparetti, M., Foglia,
P., Gabrielli, G., Prete, C. A., and 
Stenströ andm, P. (2008). Leveraging data promotion for low power d-
nuca caches. In Digital System 358 Design Architectures, Methods and 
Tools, 2008. DSD ’08. 11th EUROMICRO Conference on, pages 307–
316 
10. Kim, C., Burger, D., and Keckler, S. Q. (2002). An adaptive, non-
uniform cache structure for wire-delay dominated on-chip-caches. In 
Proceedings Int. Conf. on Architectural Support for Programming 
Languages and Operating Systems, pages 211–222. IEEE. 
11. Quinn, Michael J. (2003), Parallel Programming in C with MPI and 
OpenMP, Mc Graw Hill, 1º edição.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais