Definindo melhor alguns conceitos Processamento Paralelo: processamento de informação concorrente que pertencem a um ou mais processos que resolvem um único problema. Processamento Distribuído: processamento de informações em um sistema cujos recursos estão sendo compartilhados por vários programas Computador Paralelo: computador de múltiplos processadores capaz de realizar processamento paralelo Supercomputador: computador de propósito geral capaz de resolver problemas em alta velocidade, comparando com outras máquinas da mesma época.
99
Embed
Definindo melhor alguns conceitosboeres/slides_AP/AlgParalelosII.pdfDefinindo melhor alguns conceitos Processamento Paralelo: processamento de informação concorrente que pertencem
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Definindo melhor alguns conceitos
Processamento Paralelo: processamento de informação concorrente que pertencem a um ou mais processos que resolvem um único problema.
Processamento Distribuído: processamento de informações em um sistema cujos recursos estão sendo compartilhados por vários programas
Computador Paralelo: computador de múltiplos processadores capaz de realizar processamento paralelo
Supercomputador: computador de propósito geral capaz de resolver problemas em alta velocidade, comparando com outras máquinas da mesma época.
A vazão de um dispositivo é o número de resultados produzidos por unidade de tempo. (throughtput)
Speedup (aceleração): razão entre o tempo de execução necessário para o algoritmo seqüencial mais eficiente e o tempo necessário para se realizar a mesma computação numa máquina paralela
Duas formas de se explorar a concorrência em computação em computação
– Paralelismo de controle e de dados
tempo t
7 + 3 string ==“casa”? 32 * 14 7 + 3
Computação concorrente
Duas formas de se explorar a concorrência em computação em computação
– Paralelismo de controle e de dados
tempo t
7 + 3 7 + 3 10 + 200 33 + 329
Paralelismo de Controle
aplicando-se operações diferentes a diferentes dados simultaneamente.
– fluxo de dados entre processos pode ser arbitrariamente complexo
Exemplo:
– Pipelining: cada estágio trabalha em velocidade plena sobre uma parte particular da computação. A saída de um estágio é a entrada do estágio seguinte
Paralelismo de Controle
tempo
E4 E1 E2 E3
Paralelismo de Controle
tempo
info 1
E4 E1 E2 E3
Paralelismo de Controle
tempo
info 1
E4 E1 E2 E3
info 2 info 1
Paralelismo de Controle
tempo
info 1
E4 E1 E2 E3
info 2 info 1
info 3 info 1 info 2
Paralelismo de Controle
tempo
info 1
E4 E1 E2 E3
info 2 info 1
info 3 info 1 info 2
info 3 info 4 info 1 info 2
Paralelismo de Dados
uso de vários processadores para executar a mesma operação ao mesmo tempo sobre elementos distintos de dados
Um aumento de k vezes no número de unidades funcionais levaria a um aumento de k vezes a vazão do sistema
7 + 3 10 + 200 33 + 329
Aplicações
Aplicações ou programas podem ser executados mais rapidamente, considerando duas formas de paralelismo
– tratar o programa seqüencial como uma série de tarefas
– cada tarefa = uma instrução ou blocos de instruções
OU
– especificar um programa paralelo, que resolve o problema através da especificação de tarefas ou processos concorrentes
Exploração de paralelismo
Particionamento
– identificar em um programa, as tarefas que possam ser executadas em paralelo (simultaneamente em mais de um processador)
• caso extremo: cada linha do programa correspondendo a uma tarefa
um bom desempenho só é alcançado se um número máximo de comandos são executados simultaneamente
É preciso considerar dependências de dados
problema: se quase todos os comandos são dependentes
Exemplo: programa seqüencial paralelismo de instruções
program nothing(){
input (A1,B1,C1);
if A1>B1 then {
C1=A1-B1;
output (C1);
} else {
C1 = B1-A1;
output (A1,B1,C1)
}
A=0; B=1;
for i=1 to 3 {
input(C);
A=A+C;
B=B*C;
}
output (A,B,C);
}
Exemplo
Tarefa T1
input (A1,B1,C1);
if A1>B1 then{
C1=A1-B1;
output (C1);
}else{
C1 = B1-A1;
output (A1,B1,C1)
}
Tarefa T3
B=1;
Tarefa T4
for i=1 to 3 {
input(C);
A=A+C;
B=B*C;
}
output (A,B,C)
Tarefa T2
A = 0;
Exemplo
T1
T3 T2
T4
16
1 1
4
Algoritmos PRAM
para um problema: se um algoritmo PRAM tem complexidade de tempo menor que a do algoritmo seqüencial ótimo, então o paralelismo pode ser usado
Como iniciar um algoritmo PRAM: ativar os P processadores que farão parte da computação
– os processadores serem ativados um a um
– através do algoritmo de difusão: log P passos
depois da ativação, o algoritmo paralelo pode ser executado
Identificando Paralelismo
paradigmas de computação paralela
algoritmos aqui falados consideram o modelo PRAM. Exemplos:
Árvore Binária: o fluxo de dados (e controle) se dá da raiz até as folhas
– Difusão: a partir de um processador, o fluxo (controle ou dados) passa para dois processadores e assim, dobrando a cada iteração.
– Divisão e Conquista: um problema é subdividido em subproblemas cada vez menores
ou contrário, das folhas até a raíz:
– Redução: dado n valores, a operação X é uma binária associativa
primeiro loop: não há necessidade de mais do que n/2 processadores
processadores acessam dois locais de memória simultaneamente, mas distintos
processadores escrevem em um local de memória (cada) simultaneamente, mas distintos
para somar, log n iterações são necessárias, cada uma tem tempo constante
Complexidade do Algoritmo: O ( log n) com O ( n/2 ) processadores
Um parênteses
.......
Exponenciação e Logaritmo - Motivação
• Muitos fenômenos crescem não linearmente • População • Relação entre diferentes partes de um organismo • O número de espécimes em uma dada área • etc
• Funções exponenciais e logarítmicas expressam o desenvolvimento destes fenômenos
Exponenciação e Logaritmo - Motivação
• Crescimento populacional • Crescimento de células • Comportamento típico:
1
32 64
1 2 3 4 5 6
1 2 4
8 16
32 64
1 2 3 4 5 6
Exponenciação e Logaritmo - Motivação
1
32 64
1
Population Size vs. time
0
10
20
30
40
50
60
70
0 1 2 3 4 5 6 7
Time (t)
Po
pu
lati
on
Siz
e (
N)
Função exponencial: f(x) = ax, a> 0
Crescimento exponencial
• Quanto menor x, f(x) mais próximo de zero
• x crescendo, f(x) aumenta muito
Decréscimo exponencial
• Quanto maior x, f(x) mais próximo de zero
• x decrescendo , f(x) aumenta muito
Exponenciação e Logaritmo
• Potenciação an envolve dois números: • a base a e o expoente n
• Para n> 1; indica a multiplicação da base a por ela n vezes
• Se n = 0 a0 = 1
• Se n < 0 a-1 = 1/a
• a-n = (a-1)n = (1/a)n = 1n/an = 1/an
Logaritmo
Logaritmo
• O gráfico do logaritmo na base 2 atravessa o eixo das abcissas em x = 1 e passa pelos pontos com coordenadas (2, 1), (4, 2) e (8, 3)
pois
1 0 20= 1
2 1 21= 2
4 2 22= 4
8 3 23= 8
• O gráfico se aproxima do eixo das ordenadas, mas não chega a tocá-lo
Logaritmo – algumas regras:
• loga(xy) = logax + logay
• loga(x/y) = logax - logay
• logaxk = k·logax
• logaa = 1
• loga1 = 0
Logaritmo e exponencial
-4
-2
0
2
4
6
8
-6 -4 -2 0 2 4 6 8
f(x) = ax
f(x) = logax
Noções de Complexidade
Existem algoritmos PRAM cuja complexidade de tempo é menor do que o algoritmo correspondente seqüencial ótimo, mas podem desempenhar mais operações do que o seqüencial
Complexidade de tempo do pior caso em função do tamanho da entrada. Cada passo corresponde:
– uma fase de computação
– uma fase de comunicação
é importante especificar
– o número máximo de processadores usados, como função da entrada
– o modelo arquitetural sendo usado
Noções de Complexidade
Paralelismo Limitado
algoritmo p-paralelo se implementado em um modelo com p processadores, fixo
T(n) e P(n): o tempo de execução e a quantidade de processadores do algoritmo paralelo
se o número de passos é T(n) considerando p processadores, então esse algoritmo é p computável neste tempo
se T(n) é polinomial e p é limitado superiormente por polinômio, então o número de processadores é limitado polinomialmente, senão, ilimitado
Algumas Definições
Custo do Algoritmo Paralelo
produto tempo-processador T(n) P(n)
– ignora ociosidade de processador
Algoritmo paralelo de custo ótimo: Ts = T(n) P(n)
– Ts o tempo de execução do melhor algoritmo seqüencial
p < P(n) processadores: cada processador executa sequencialmente o que P(n)/ p processadores executam
– T(n) P(n)/p unidades de tempo
A - algoritmo paralelo n - o tamanho da entrada
Algumas Definições
Speedup , dado o número de processadores p
Se o S(A(n),p) é linear então todos os processadores são efetivamente utilizados
– difícil de ser alcançado devido a natureza dos algoritmos e do ambiente computacional paralelo
– difícil decompor o algoritmo em tarefas completamente independentes, onde cada tarefa leva Ts /p unidades de tempo para ser executada
Algumas Definições
Trabalho de um Algoritmo Paralelo
um algoritmo é descrito como uma seqüência de unidades de tempo, onde em cada unidade um conjunto de instruções concorrentes
trabalho de um algoritmo paralelo é o número total de operações executadas, não incluindo os tempos ociosos de certos processadores
são somadas, a cada unidade de tempo, o número de operações concorrentes podem estar sendo executadas
Voltando: soma de n elementos
• 1a unidade de tempo - n/2 operações (somas em paralelo)
• 2a unidade de tempo - n/4 operações (somas em paralelo)
• 3a unidade de tempo - n/8 operações (somas em paralelo)
• j-ésima unidade de tempo - n/2j operações
Quando termina o algoritmo?
..............
Voltando: soma de n elementos
n/2k = 1 k = log n iterações
Na k-ésima iteração tal que o número de elementos é igual a 1, ou seja:
Voltando: soma de n elementos
Contabilizando agora o número total de operações (ou trabalho do algoritmo paralelo)
• 1a unidade de tempo - n/2 operações (somas em paralelo)
• 2a unidade de tempo - n/4 operações (somas em paralelo)
• 3a unidade de tempo - n/8 operações (somas em paralelo)
• k-ésima unidade de tempo - n/2k operações
Total de operações: O(log n) n/2j = O(n)
..............
Pergunta:
Como seria a sua versão (mais realista) da soma paralela de N números em um número limitado p de processadores?
Implementação I – soma de n números
através de threads, implementar a soma de n números
- em um número qualquer de processadores
- em um número fixo de processadores
vantagens e desvantagens?
Pointer Jumping
T = (V,E) : árvore direcionada
odg(v) e idg(v): graus de saída e entrada do vértice v V
um vértice r tal que
v V-{r}, odg(v) = 1, odg(r)=0
v V-{r}, um caminho de v a r
O vértice r é dita raíz de T
Pointer Jumping é uma técnica usada para processamento de dados
armazenados em forma de um conjunto de árvores direcionadas enraizadas
Pointer Jumping - árvore direcionada
Problema F : floresta de árvores direcionadas enraizadas
especificação: através de um vetor F de n elementos onde
– F(i) = j se (i,j) E (é um arco) j é o pai ou predecessor imediato de i
– F(i) = i se i é a raiz
Problema: determinar a raiz S(j) da árvore contendo o vértice j
Solução Seqüencial - resolve o problema em tempo linear:
identificação das raízes: achar todos os vértices v tal que F(v) = v em O(n)
reversão dos arcos: pois estamos considerando que se (i,j) E então j é pai de i em O(n)
execução de uma busca em profundidade ou largura: nesta busca, podemos saber a partir da raiz r quem são seus descendentes
Solução Paralela
Um algoritmo eficiente foi proposto, sendo um esquema totalmente diferente do esquema seqüencial
inicialmente: i V, S(i) é o pai de i
a técnica pointer jumping consiste em atualizar o sucessor de cada
vértice pelo sucessor do sucessor
– percorrendo desta maneira, corresponde a cada iteração chegar mais e mais próximo doa raiz da árvore
– a cada iteração, a distância entre o vértice i e seu sucessor S(i) dobra
– o ponto de parada: quando S(i) é a raiz procurada;