Sunteți pe pagina 1din 38

+

XV Jornada de Cursos CITi

Aula 1

Programao Concorrente
Benito Fernandes
Fernando Castor
Joo Paulo Oliveira
Weslley Torres

Suposies bsicas
Conhecimento bsico sobre Programao Orientada a
Objetos
Experincia de pelo menos um semestre com Java, C# ou
C++

Conhecimento sobre os componentes fundamentais de


um computador (processador, memria RAM, cache, etc.)

NVIDIA GeForce 9500 GT


AMD Athlon X2 6400+

IBM Cell

Intel Core 2 Duo

Fontes:

Sun Ultrasparc 2

http://en.wikipedia.org/wiki/File:Gigabyte_NVIDIA_GeForce_9500_GT.JPG
http://upload.wikimedia.org/wikipedia/en/a/af/E6750bs8.jpg
http://media.bestofmicro.com/I/S/8452/3/8452.jpg
http://www.cs.uaf.edu/2009/fall/cs441/proj1/bob/Pics/cell.jpg
http://en.wikipedia.org/wiki/File:Athlon64x2-6400plus.jpg

Todos eles so multicore


(ou multi-ncleo)

O que todos esses


processadores tm em
comum?

Processadores multi-ncleo
Incluem vrios nclos em uma
nica pastilha
Nmero de instrues
simultneas = nmero de
ncleos

Cache compatilhada ou no
Memria compartilhada ou
passagem de mensagens

Fonte: http://en.wikipedia.org/wiki/File:Dual_Core_Generic.svg

Descobrindo o nmero de ncleos

Instrues de emergncia
Salvar em um arquivo chamado C.java e, em seguida:

Por que multi-ncleo?


Antigamente, apenas aumentar o nmero de
transistores era suficiente
Juntamente com o aumentos de cache
E aumento da frequncia de clock

Hoje em dia, no mais o caso


Nmero de transistores continua crescendo
Mas a frequncia de clock est estagnada
Consumo de energia e aquecimento so os fatores
limitantes

Fonte: http://www.gotw.ca/publications/concurrency-ddj.htm

Por que multi-ncleo (cont.)?


Novas abordagens tornaram-se necessrias
Soluo encontrada: paralelismo
Diversos ncleos em uma mesma pastilha
Memria nica
Reaproveitamento de outros componentes

Localidade propicia melhor desempenho


Alternativa: diversos processadores
Supercomputadores usam essa abordagem
Mais cara

Paralelismo funciona!
Compile e execute o programa abaixo.

Agora este:

Paralelismo: O Bom, o Mau e o Feio


Processadores multi-ncleo podem propiciar grandes
aumentos de desempenho
Melhor caso: aplicaes N vezes mais rpidas, onde N o nmero de
ncleos

Entretanto, o aumento costuma ser menor que isso


Lei de Amdahl
Aumento de desempenho limitado pela poro no-paralelizvel da aplicao

Fonte: http://en.wikipedia.org/wiki/Amdahl%27s_law

Qual a percentagem de cada


aplicao que vocs
desenvolvem que
paralelizvel?

Paralelismo: O Bom, o Mau e o Feio


(cont.)
Faltou o Feio:
Responder a pergunta do slide anterior no o suficiente
necessrio saber tornar paralela a aplicao

Criar aplicaes paralelas difcil


Exige tcnicas especficas
Pois tem problemas especficos

Alguns tipos de aplicao se prestam melhor paralelizao do


que outros

O objetivo deste curso :


Apresentar algumas das tcnicas usadas para se construir
aplicaes paralelas
Usando a linguagem java, j que esta muito popular*
E seu modelo de programao paralela tambm

Vrias das ideias so aplicveis a programas em C# e C++

* http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Pera... mas este no um curso de


Programao CONCORRENTE?

Sistemas concorrentes
Caso a quantidade de requisies
seja muito alta a aplicao no
quebra
Execuo particionada em unidades
de computao
Independentes ou inter-dependentes
Executadas simultaneamente ou
sequencialmente
Iluso de simultaneidade

Exemplos:
Sistemas operacionais, servidores (web,
de aplicao, de DNS, etc.), simuladores
Fonte: http://www.cs.cuw.edu/museum/images/vectra386.jpg

Sistemas paralelos
Sistemas concorrentes desenvolvidos
para ser executados em hardware
paralelo
Supercomputadores
Mquinas multi-ncleo
Aglomerados (clusters)

Tcnicas para construir sistemas


concorrentes frequentemente
aplicam-se aos paralelos
Exceto quando a alocao de processos
de software aos elementos de hardware
importante
Fonte: http://parasatria.files.wordpress.com/2008/09/supercomputeribm.jpg

Sistemas paralelos
Aspecto no coberto neste curso. Importante
em dois contextos:
- Supercomputao
(problemas especficos)
Sistemas concorrentes
desenvolvidos
para ser executados
em hardware
- Mquinas
multi-ncleo (tema de pesquisas
paralelo
recentes!)
Supercomputadores
Mquinas multi-ncleo
Aglomerados (clusters)

Tcnicas para construir sistemas


concorrentes frequentemente
aplicam-se aos paralelos
Exceto quando a alocao de processos
de software aos elementos de hardware
importante
Fonte: http://parasatria.files.wordpress.com/2008/09/supercomputeribm.jpg

Sistemas distribudos
Sistemas paralelos executados em uma
rede de processadores autnomos que
no compartilham memria
Normalmente dispersos geograficamente
Redes no to rpidas
E no to confiveis

Tcnicas mais especficas so


necessrias

Fonte: http://www.worldofwarcraft.com/wrath/

The biggest sea change in software


development since the OO revolution is
knocking at the door, and its name is
Concurrency.
Herb Sutter

Em que os sistemas concorrentes so


diferentes?
No-determinismo

Interao entre processos (ou processadores ou threads


ou atores ou tarefas ...)
Comunicao
Sincronizao
Controle de acesso a recursos compartilhados

E os sistemas paralelos?
Alocao de elementos de processamento a unidades de hardware
Infraestrutura de execuo frequentemente cuida disso

No-determinismo
Programas sequenciais produzem as mesmas sadas quando
executados com as mesmas entradas
Dado que no realizam escolhas aleatrias
Esta caracterstica os torna determinsticos

Um programa no-determinstico pode produzir sadas


diferentes para uma mesma entrada
Em execues subsequentes

No-determinismo (cont.)
Programas paralelos e concorrentes so intrinsecamente
no-determinsticos
So necessrias tcnicas para torn-los determinsticos
Dependendo de quais aes so relevantes

Fontes possveis:
Escalonamento
Interao com o usurio
Acesso a recursos

Um programa determinstico...
Compile e execute o programa abaixo.

... e um no-determinstico...

Programas no-determinsticos podem


passar a iluso de determinismo

Entrelaamento (interleaving) de
execues
s=s+i

s=s+i

s=s+i
Processo 1

s=s+i

s=s+i

s=s+i

Processo 2

Sada padro

System.out.println(i)

Alguns problemas comuns em programas


concorrentes
Erros de consistncia de memria

Deadlock (impasse)
Starvation
Depurao e teste
(entre outros...)

Erros de consistncia de memria


i = i + 1
Processo 1

i = i - 1

Processo 2

Leitura
(i == 1)

int i = 1

Leitura
(i == 1)

Escrita
(i == 2)

Escrita
(i == 0)

Memria

Evitando erros de consistncia de


memria
necessrio sincronizar o acesso varivel i
Acessos a i devem funcionar como se fossem sequenciais
regio crtica
SGBDs funcionam assim

Duas possveis abordagens:


Permitir apenas leituras concorrentes
Escritas serializadas

S permitir que uma tarefa tenha acesso a i de cada vez excluso


mtua
E se uma tarefa precisar usar diversas variveis?

Deadlocks (impasses)

Situao onde um sistema


no pode progredir
Dependncia circular entre
processos que precisam
reservar certos recursos

Deadlocks (cont.)

Processo 1

Processo 2

Reserva a
varivel i

Nenhum dos
dois
progride

Reserva a
varivel j

Tentar reservar
a varivel j

Tentar reservar
a varivel i

Memria
Pode ocorrer em diversas situaes em
sistemas reais!!!

Starvation

Decorre de polticas
injustas de escalonamento

Consequncia: alguns
processos nunca tm
acesso aos recursos
desejados

Fonte: http://www.roadfood.com/photos/3310.JPG

Testes e depurao
Automao de testes torna-se muito difcil
Consequncia do no-determinismo
Tanto para testes funcionais quanto para testes de caminhos

O que significa execuo passo-a-passo quando vrios passos


so simultneos?
Como garantir que certa sequncia executada?

e algumas solues sero


apresentadas.

No restante do curso, alguns


desses problemas sero
examinados com mais calma...

S-ar putea să vă placă și