Você está na página 1de 4

Resolução de Exercícios-REO2

1) Suponha que um vetor de 10.000 posições será alocado a 20 elementos de processamento de forma
cíclica, ou seja, o dado armazenado na primeira posição será alocado ao primeiro elemento de
processamento, o da segunda posição será alocado ao segundo e assim por diante.

a) Quantas posições do vetor serão processados por cada elemento de processamento?

b) Que elemento de processamento é responsável pela posição j, onde 0 <= j < 10.000? Considere que os
elementos de processamento são numerados a partir de 0.

Solução:

Considere que tenhamos um vetor de 20 posições e 20 elementos de processamento.

Nesse caso, cada posição j do vetor ficará em um elemento de processamento de mesmo índice.

Agora considere que temos um vetor de 40 posições e 20 elementos de processamento e a alocação ocorre de
forma cíclica.

Então, a posição j será alocada ao elemento de processamento j%número_elementos_processamento (resto da


divisão inteira):
Posição 0 será alocada ao elemento de processamento 0%20 = 0.
Posição 1 será alocada ao elemento de processamento 1%20 = 1.

Posição 19 será alocada ao elemento de processamento 19%20 = 19.
Posição 20 será alocada ao elemento de processamento 20%20 = 0.
Posição 22 será alocada ao elemento de processamento 21%20 = 1.
...
Posição 39 será alocada ao elemento de processamento 39%20 = 19.

Resposta:
a) A quantidade de posições do vetor que serão processadas por cada elemento de processamento é dada
por: quantidade de posições do vetor / pelo número de elementos de processamento. Para este exercício
10.000/20=500
b) O elemento de processamento responsável pela posição j do vetor em uma alocação cíclica é dado por:
j%número de elementos de processamento (resto da divisão inteira)

2) Para o problema da questão anterior, se a alocação de trabalho aos elementos de processamento for em
blocos (subvetores), ou seja, o primeiro bloco alocado ao primeiro elemento de processamento, o segundo
bloco ao segundo elemento de processamento e assim por diante, como ficariam as respostas
das letras a) e b)?
Solução:
Na letra a), dividimos o número total de posições pelo número de elementos de processamento. Para este
exercício 10.000/20=500. Mas se essa divisão não for exata temos que atribuir as posições aos elementos de
processamento. Por exemplo, 10050/20 = 502 e sobram 10 posições. Essas 10 posições podem ser atribuídas aos
10 primeiros elementos de processamento, visando balancear a carga de trabalho dos elementos de
processamento. Como a alocação é em blocos, os elementos de processamentos de índices 0 a 9, por exemplo,
poderiam ficar responsáveis por blocos contíguos de 503 posições do vetor e de 10 a 19 por 502 posições.
Se (quantidade de posições do vetor % pelo número de elementos de processamento ==0){
tamanho do bloco = quantidade de posições do vetor / pelo número de elementos de processamento
} else {
tamanho do bloco = quantidade de posições do vetor / pelo número de elementos de processamento
restante = quantidade de posições do vetor % pelo número de elementos de processamento
para cada elemento de processamento 0 <= p < restante {
tamanho do bloco = tamanho do bloco +1;
}
}
Resposta da letra a):
Para a quantidade de posições do vetor igual a 10000, a divisão é exata, não há resto, então o tamanho do bloco
é de 500 elementos.

Expressão para o intervalo de posições j atribuído ao elemento de processamento.


identificador do elemento de processamento*tamanho do bloco <= j < identificador do elemento de
processamento*tamanho do bloco +tamanho do bloco. (expressão E1)

Exemplo:
Para um total de 10000 posições no vetor:
tamanho do bloco = quantidade de posições do vetor / pelo número de elementos de processamento
tamanho do bloco = 500
Intervalo de cada elemento de processamento é dado:
identificador do elemento de processamento*tamanho do bloco <= j < identificador do elemento de
processamento*tamanho do bloco +tamanho do bloco.
Elemento de processamento 0: 0*500 <= j < 0*500 + 500 => 0 <= j < 500
Elemento de processamento 1: 1*500 <= j < 1*500 + 500 => 500 <= j < 1000

Assim, cada elemento de processamento poderá fazer o cálculo do seu intervalo de posições no vetor baseado na
expressão E1.

Resposta da letra b)
Elemento de processamento = j / tamanho do bloco
3) O grafo de tarefas mostrado na Figura 1.10 representa uma aplicação de processamento de imagens.
Cada círculo representa um tarefa sequencial. Há 12 tarefas: uma tarefa de entrada, 10 tarefas de
computação e uma tarefa de saída. Cada uma das 12 tarefas podem ser realizada em uma unidade de
tempo do processador. A tarefa de entrada deve ser completada antes de qualquer tarefa computacional
começar. Todas as 10 tarefas computacionais devem completar antes da tarefa de saída começar. A tarefa
de entrada consome a largura de banda inteira do dispositivo de entrada. A tarefa de saída consome a
largura de banda inteira do dispositivo de saída. Qual é o grau máximo de concorrência e o tamanho do
caminho crítico?

Solução:
O grau máximo de concorrência é o número máximo de tarefas independentes (sem arestas entre elas) que
podem ser executadas ao mesmo tempo. Para este grafo, o grau máximo de dependência é 10.
O tamanho do caminho crítico é o tamanho do maior caminho entre um nó raiz e um nó folha. Para este grafo, o
tamanho do caminho crítico é 3.
4) Considere os grafos de tarefas da Figura 1.11 e assuma que cada tarefa gasta uma unidade de tempo
para ser executada e o tempo de comunicação entre os elementos de processamento é zero. Determine: i) o
grau máximo de concorrência; ii) o tamanho do caminho crítico

Solução:

Grafo Grau máximo de concorrência Tamanho do caminho crítico

(a) 8 4

(b) 8 4

(c) 8 7

(d) 2 8

(e) 8 15

Você também pode gostar