Documente Academic
Documente Profesional
Documente Cultură
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++
IBM Cell
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
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
Instrues de emergncia
Salvar em um arquivo chamado C.java e, em seguida:
Fonte: http://www.gotw.ca/publications/concurrency-ddj.htm
Paralelismo funciona!
Compile e execute o programa abaixo.
Agora este:
Fonte: http://en.wikipedia.org/wiki/Amdahl%27s_law
* http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
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)
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)
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
Fonte: http://www.worldofwarcraft.com/wrath/
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
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...
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)
Deadlock (impasse)
Starvation
Depurao e teste
(entre outros...)
i = i - 1
Processo 2
Leitura
(i == 1)
int i = 1
Leitura
(i == 1)
Escrita
(i == 2)
Escrita
(i == 0)
Memria
Deadlocks (impasses)
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