Universidade Federal de Itajubá – Campus Itabira Engenharia da Computação – Prof. Juliano Monte-Mor 1ª Lista de Exercícios de Sistemas Paralelos e Distribuídos 1) Discuta as vantagens e desvantagens de se utilizar paralelismo de dados e de controle (funcional). 2) Explique porque algoritmos paralelos em dados são mais escaláveis do que algoritmos paralelos em controle. 3) Dada uma tarefa que pode ser dividida em m subtarefas, cada uma requerendo 1 unidade de tempo, quanto tempo será necessário para que um pipeline de m estágios processe n tarefas? 4) Defina Speedup. 5) Desenvolva algoritmos paralelos, usando threads em Java, para o Crivo de Eratóstenes, considerando as abordagens de paralelismo de dados e de controle. 6) Reescreva os algoritmos do exercício anterior usando OpenMP. 7) Calcule o Speedup dos quatro algoritmos paralelos para o Crivo de Erastóstenes, desenvolvidos nas questões anteriores, considerando de duas até seis unidades de processamento. Plote os valores em um gráfico e discuta os resultados obtidos. 8) Considere o programa sequencial abaixo para o cálculo aproximado de PI. a. Escreva um algoritmo paralelo, em C++, usando a biblioteca pthread; b. Escreva outro algoritmo paralelo, desta vez utilizando OpenMP; c. Calcule o Speedup alcançado pelos algoritmos, considerando de dois até dez processadores, e plote os valores obtidos em um gráfico; d. Discuta os resultados encontrados com a aplicação das duas tecnologias. 9) Considere o seguinte algoritmo sequencial para multiplicação de matrizes MULTIPLICAÇÃO DE MATRIZES Variáveis globais: � 0… � − 1 0… � − 1 � 0… � − 1 0… � − 1 � 0… � − 1 0… � − 1 � �, �, � ���� ∗ ���� = ���� // Matriz A // Matriz B // Matriz C (produto de A e B) // Acumula o produto // Índices para percorrer a matrizes Início do algoritmo ���� � ← 0 ��é � − 1 ��ç� ���� � ← 0 ��é � − 1 ��ç� �←0 ���� � ← 0 ��é � − 1 ��ç� � ← � + � � � ∗ �[�][�] ��� �� ���� � � [�] ← � ��� �� ���� ��� �� ���� Fim do algoritmo a. Desenvolva um algoritmo paralelo em OpenMP para resolver este problema. O algoritmo desenvolvido usa paralelismo de dados ou de controle? 10) Considere o problema de encontrar os dois maiores números de um conjunto de n inteiros (onde n é definido pelo usuário). a. Desenvolva um algoritmo paralelo usando threads para resolver este problema e explique o seu funcionamento. b. Seu algoritmo considera uma abordagem de paralelismo de dados ou de controle? Seria possível adotar a outra abordagem? Justifique sua resposta. 11) Desenvolva um algoritmo paralelo, usando a biblioteca OpenMP, para o cálculo da sequência de Fibonacci. Seu algoritmo considera uma abordagem de paralelismo de dados ou de controle? Seria possível adotar a outra abordagem? Justifique sua resposta. 12) O histograma de uma imagem em escala de cinza considera a distribuição de frequência dos níveis de cinza da imagem, de forma tal que cada entrada no eixo x representa um nível de cinza específico e o eixo y representa o número de ocorrências de cada nível de cinza, conforme ilustrado abaixo. Desenvolva um algoritmo paralelo, usando OpenMP, para o cálculo do histograma de imagens em formato 4K (resolução de 3840 x 2160 pixels). Os níveis de cinza deverão ser agrupados em 16 classes. Ou seja, serão considerados apenas 16 tons de cinza no eixo x, para os 256 níveis possíveis. 13) Desenvolva um algoritmo paralelo, usando OpenMP, para busca em profundidade em grafos.