• Nenhum resultado encontrado

Programa¸c˜ao Concorrente e Paralela

N/A
N/A
Protected

Academic year: 2022

Share "Programa¸c˜ao Concorrente e Paralela"

Copied!
41
0
0

Texto

(1)

Programa¸c˜ ao Concorrente e Paralela

Noemi Rodriguez

2016

(2)

o que ´ e programa¸c˜ ao concorrente e paralela?

programa¸c˜ao concorrente: composi¸c˜ao de linhas de atividades independentes

programa¸c˜ao paralela: execu¸c˜ao simultˆaneade linhas de atividades

Go blog (Rob Pike)

Concurrency is aboutdealingwith lots of things at once. Parallelism is aboutdoinglots of things at once.

(3)

Programa¸c˜ ao Concorrente

n˜ao necessariamente envolve diferentes linhas de execu¸c˜ao alternativas para modelos de servidores concorrentes mas modelo mais comum de concorrˆencia ´e multitarefa

necessidade de comunica¸c˜ao entre diferentes linhas de execu¸c˜ao

(4)

programa¸c˜ ao concorrente e paralela — comunica¸c˜ ao entre processos

acesso compartilhado a dados

concorrˆencia: bases de dados, informa¸c˜oes sobre conex˜oes, ...

paralelismo: dados de problemas cient´ıficos, ...

espera por estados desej´aveis

concorrˆencia: nova requisi¸c˜ao de cliente, ...

paralelismo: novos resultados, novos dados para processamento, ...

sincroniza¸c˜ao!

(5)

Programa¸c˜ ao Concorrente

linhas de controle independentes ativas simultaneamente o que ´e “atividade”?

um processador X m´ultiplos processadores estudo nasceu com sistemas operacionais importˆancia hoje: atendimentos concorrentes disputa por recursos!

(6)

Programa¸c˜ ao Paralela

execu¸c˜ao realmente simultˆanea

linhas de execu¸c˜ao que colaboram (ou n˜ao) em busca de solu¸c˜ao

paralelismo para melhoria de desempenho (ou viabilidade de execu¸c˜ao)

paralelismo e concorrˆencia

em ambos os casos necessidade decoordena¸c˜aoentre atividades

coopera¸c˜ao x competi¸c˜ao

(7)

Objetivos da disciplina

princ´ıpios e t´ecnicas de programa¸c˜ao concorrente multiprocessadores

mem´oria compartilhada troca de mensagens mem´oria distribu´ıda

troca de mensagens

padr˜oes de programa¸ao paralela

exemplos cl´assicos: multiplica¸ao de matrizes, resolu¸ao de sistemas

casos mais irregulares: espa¸cos de busca

(8)

que princ´ıpios e t´ ecnicas s˜ ao esses?

nota¸c˜oes para controle de fluxo

cria¸ao de processos e threads, ou outras formas de express˜ao de paralelismo

abstra¸c˜oes de comunica¸c˜ao

sincroniza¸c˜ao em sistemas de mem´oria compartilhada ... mas problemas tamb´em existem sem mem´oria compartilhada...

propriedades: safety e liveness avalia¸c˜ao de desempenho balanceamento de carga

(9)

Referˆ encias

M. Herlihy, N. Shavit. The Art of Multiprocessor Programming. Morgan Kaufmann, 2008.

M. Quinn. Parallel Programming in C with MPI and OpenMP. McGraw-Hill, 2003.

P. Pacheco. An Introduction to Parallel Programming.

McGraw-Hill, 2011.

artigos t´ecnicos.

(10)

Fluxos de Execu¸c˜ ao

classifica¸c˜ao

(11)

Fluxos de Execu¸c˜ ao

processos, threads preemptivos, threads cooperativos pilha de execu¸ao

dados globais?

espa¸cos de endere¸camento protegidos?

preemp¸ao?

(12)

Fluxos Independentes

transferência

pilha 1 pilha 2

globais arquivos abertos

...

pilhas independentes?

acesso a globais?

(13)

Processos

transferência

pilha 1 pilha 2

globais globais

descritores locais descritores

locais

descritores globais

pilhas independentes globais independentes

descritores podem ser compartilhados preemp¸c˜ao

(14)

Threads Preemptivas

transferência

pilha 1 pilha 2

globais

descritores

pilhas independentes globais compartilhadas descritores compartilhados preemp¸c˜ao

(15)

Preemp¸c˜ ao

bloqueado

finalizado

em execução pronto

I/O

completado escalonado

requisição i/o

fim

preempção

(16)

Threads Cooperativas

transferência

pilha 1 pilha 2

globais

descritores

pilhas independentes globais compartilhadas descritores compartilhados sem preemp¸c˜ao

(17)

Concorrˆencia: modelo mais comum

threads preemptivos com mem´oria compartilhada pthreads

(18)

Exemplo: Busca de primos com mem´ oria compartilhada

imprimir primos entre 1 e 1010 m´aquina de 10 processadores um thread por processador

(19)

Busca de Primos com Mem´ oria Compartilhada

void primePrint (void) { long int j;

for (j = 1, j<100000000000; j++) { if (isPrime(j))

printf("%ld\n", j);

} }

(20)

Busca de Primos com Mem´ oria Compartilhada

id´eia 1: cada thread testa um intervalo pr´e-definido cada thread executa:

void primePrint (void){

long int j;

int i = ThreadID.get(); // IDs in {0..9}

for (j = i*109+1, j<(i+1)*109; j++) { if (isPrime(j))

printf("%ld\n", j);

} }

nem todos os intervalos tˆem n´umeros iguais de primos umeros grandes: maior dificuldade computacional desbalanceamento

(21)

Busca de Primos com Mem´ oria Compartilhada

id´eia 2: contador compartilhado int counter = new Counter(1);

cada thread executa:

void primePrint { long j = 0;

while (...) {

j = counter.getAndIncrement();

if (isPrime(j)) print(j);

} }

(22)

Contador Compartilhado

o objeto counter´e ´unico para todos os threads public class Counter {

private long value;

public long getAndIncrement() { return value++;

} }

(23)

Contador Compartilhado

o objeto counter´e ´unico para todos os threads e o problema ´e que podemos ter:

public class Counter { private long value;

public long getAndIncrement() { return value++;

} }

temp = value;

value = value + 1;

return temp

(24)

Mem´ oria Compartilhada e Preemp¸c˜ ao

muitos entrela¸camentos s˜ao poss´ıveis...

thread 1: thread 2:

temp = value

temp = value temp = temp + 1

temp = temp +1 value = temp

value = temp

que mundo ´e esse em que value++n˜ao tem o efeito que esperamos...?

(25)

Mem´ oria Compartilhada e Preemp¸c˜ ao

e mais do que isso...

n˜ao basta pensar nos entrela¸camentos poss´ıveis!

(26)

Mem´ oria Compartilhada e Preemp¸c˜ ao

You don’t know Jack about shared variables or memory models. Hans-J. Boehm and Sarita V. Adve. 2012. Commun.

ACM55, 2 (February 2012), 48-54.

(27)

Mem´ oria Compartilhada e Preemp¸c˜ ao

imagine que o programa usa valores maiores do que a palavra do hardware

x++traduzido para algo como:

tmp_hi = x_hi;

tmp_lo = x_lo;

(tmp_hi, tmp_lo)++;

x_hi = tmp_hi;

x_lo = tmp_lo;

(28)

Mem´ oria Compartilhada e Preemp¸c˜ ao

ler artigo Boehm para a pr´oxima aula

(29)

Concorrˆ encia: programador sempre ter´ a que lidar com dificuldades de programa¸c˜ ao?

mecanismos e t´ecnicas

mecanismos para lidar com mem´oria compartilhada sem´aforos e locks

monitores

mecanismos n˜ao bloqueantes mem´oria transacional

eliminar mem´oria compartilhada

troca de mensagens e outras abstra¸c˜oes utilizar multithreading cooperativo solu¸c˜oes mais recentes

propriedades garantidas pelo compilador D, DPJ, ...

(30)

Paralelismo: quest˜ oes

como paralelizar a solu¸c˜ao de um problema?

objetivo maior normalmente ´e obter menor tempo de execu¸ao desenho da solu¸ao paralela normalmente ´e dependente da plataforma de execu¸ao

que plataformas facilitam o desenvolvimento e depura¸c˜ao?

como medir o tempo de execu¸c˜ao e comparar solu¸c˜oes?

tolerˆancia a falhas: como garantir que o trabalho feito at´e o momento da falha n˜ao seja perdido?

(31)

Inicialmente: Sincroniza¸c˜ ao

como criar mecanismos que garantam acesso exclusivo aos dados em ambientes de mem´oria compartilhada...?

propriedades de safety eliveness

(32)

Se¸c˜ oes Cr´ıticas

conceito cl´assico em sistemas de mem´oria compartilhada se¸c˜ao cr´ıtica: trecho de c´odigo que apenas uma thread pode estar executando em determinado momento

public class Counter { private long value;

private Lock lock;

public long getAndIncrement() { int temp = value;

value = value + 1;

return temp;

} }

(33)

Garantia de Exclus˜ ao M´ utua

protocolos de entrada e sa´ıda de regi˜oes cr´ıticas public class Counter {

private long value;

private Lock lock;

public long getAndIncrement() { lock.lock();

try {

int temp = value;

value = value + 1;

} finally { lock.unlock();

}

return temp;

} }

se executado em threads 0 e 1: RC0 →RC1 ou RC1→RC0

(34)

Exclus˜ ao M´ utua – Propriedades

garantia da exclus˜ao m´utua ausˆencia de deadlock

entrada em algum momento (ausˆencia de starvation) ausˆencia de esperas desnecess´arias

thread n˜ao espera quando n˜ao h´a competi¸ao pela RC

(35)

Classes de Propriedades

safety

programa nunca entra em estado ruim liveness

programa em algum momento entra em estado bom

(36)

Solu¸c˜ oes de exclus˜ ao m´ utua utilizando espera ocupada

estudo cl´assico

alguma utilidade com m´ultiplos processadores algoritmos interessantes (!)

complexidade: caso com 2 threads ´e o mais intelig´ıvel

Peterson Filtros Padaria

(37)

Exclus˜ ao M´ utua – Propriedades

garantia da exclus˜ao m´utua safety

ausˆencia de deadlock safety

entrada em algum momento (ausˆencia de starvation) liveness

ausˆencia de esperas desnecess´arias n´ıvel de concorrˆencia

(38)

Exclus˜ ao m´ utua: algoritmo de Peterson

(39)

Exclus˜ ao M´ utua

public void lock(0) { flag[A] = true;

victim = A;

while (flag[B] && victim == A) {};

public void lock(0) { flag[B] = true;

victim = B;

while (flag[A] && victim == B) {};

funciona?

vamos supor, por contradi¸c˜ao, que ambos est˜ao na se¸c˜ao cr´ıtica

(40)

... funciona? prova por contradi¸c˜ ao

Art of Multiprocessor

Programming 55

•  do código:

–  writeA(flag[A]=true) ! writeA(victim=A) ! readA(flag[B]) ! readA(victim) !CSA –  writeB(flag[B]=true) ! writeB(victim=B) !

readB(flag[A]) ! readB(victim) !CSB

•  vamos assumir:

–  writeB(victim=B) ! writeA(victim=A)

•  como A entrou na RC:

•  writeA(victim=A) ! readA(flag[B] == false) –  mas então

•  writeB(flag[B]=true) ! writeB(victim=B) ! writeA(victim=A) ! readA(flag[B] == false)

public void lock() { flag[i] = true;

victim = i;

while (flag[j] && victim == i) {};

public void lock(1) { flag[A] = true;

victim = A;

while (flag[B] && victim == A) {};

(41)

Exclus˜ ao M´ utua: problemas!

solu¸c˜oes baseadas em vari´aveis dependem de ordena¸c˜ao que pode se perder na compila¸c˜ao...

public void lock(0) { victim = 0; [2]

flag[0] = true; [3]

while (flag[1] && victim == 0) [4]

{};

public void lock(1) { victim = 1; [1]

flag[1] = true; [5]

while (flag[0] && victim == 1) [6]

{};

Referências

Documentos relacionados

Para cada vari´ avel preditora cont´ınua n˜ ao suavizada, perde-se um grau de liberdade; para as vari´ aveis suavizadas a atribui¸ c˜ ao de graus de liberdade ´ e mais complexa

magn´ etica por aquele baseado na medida da distˆ ancia aberta por meio de ultrassonografia, podemos estimar as probabilidades de sucesso para todas as articula¸ c˜ oes e identificar

Se vocˆe escreve um programa servidor usando a API de sockets e executa ele, mesmo sem ter nenhum cliente. conectado, a porta utilizada pelo servidor tem que aparecer na sa´ıda

Um procedimento ´ e um bloco de programa, contendo in´ıcio e fim e ser´ a identificado por um nome atrav´ es do qual ser´ a referenciado em qualquer parte do programa principal ou

Pelo presente instrumento de contrato, a FUNDACAO OSWALDO CRUZ, atraves da ESCOLA NACIONAL DE SAUDE PUBLICA SERGIO AROUCA - ENSP- , vinculada ao Ministerio da Saude, com sedc a

Para as condições impostas ao aço, as temperaturas máximas encontradas apresentam valores máximos superiores e diferenças entre os parâmetros de avanço.. As inclinações

1 o /03/11 Raz˜ ao de ser da disciplina; objetivos e metodologia; apresenta¸c˜ao breve dos conte´ udos de cada unidade do curso; os crit´erios de avalia¸c˜ao.. Os n´ umeros

O coeficiente de correla¸c˜ ao linear varia entre −1 e +1: r = −1 corresponde ao caso de correla¸ c˜ ao linear negativa perfeita e r = +1 corresponde ao de correla¸c˜ ao