Essays.club - TCC, Modelos de monografias, Trabalhos de universidades, Ensaios, Bibliografias
Pesquisar

Verificador de Números Mutuamente Amigos - multithread - OpenMP

Por:   •  29/12/2017  •  834 Palavras (4 Páginas)  •  368 Visualizações

Página 1 de 4

...

Nesta função existe um loop que para cada número ele compara com todo o array (em outro loop) razões iguais, se em ambas as colunas os números(dividendo e divisor) forem iguais então os números são mutuamente amigos, para evitar que números iguais apareçam no printf, coloquei a condição I!=f ou seja o número que esta sendo testado não pode ser igual a ele mesmo, e para evitar repetições coloquei f > I, ou seja enquanto o número testado for menor que a lista de números que esta sendo comparada ele pode printar, evitando assim repetições em ordem inversa.

Deste modo percorremos todo o array de n casas, n vezes a fim de comparar todos os números. E após a comparação printamos na tela todos os números mutuamente amigos.

Solução Paralela.

Para a solução paralela foi utilizada o modelo de programação OpenMP.

O programa é básicamente dividido em 2 grandes funções, acharar as razões e comparar os vetores, a primeira necessita ser finalizada antes de iniciada a segunda, portanto ambas não podem ser executadas em paralelo, sendo assim podemos somar todos os esforços para fazer uma e depois fazer a outra.

Começando pela função acharRazoes;

[pic 6]

Usei a diretiva #pragma omp parallel for schedule(guided) num_threads(nthreads).

#pragma omp parallel define a área da região paralela.

O “for” após esta diretiva permite paralelizar loops de maneira automática, as iterações são distribuídas e executadas em paralelo pelas threads da região paralela.

O schedule(guided) reduz os tamanhos dos blocos de forma exponecial toda vez que o bloco é dado para uma thread, deste modo as diferentes threads conseguem terminar de executar o processamento em tempo parecido, independente do número de threads.

O num_threads(nthreads) é o número de threads que esta região paralela irá utilizar para realizar o processamento.

Utilizamos esta estratégia na função de compararVetores também.

[pic 7]

Resultados:

Foi utilizado um processador intel Core i5, portátil, 2 core, 1,15GHZ.

Trabalho3a → Sequencial;

[pic 8][pic 9][pic 10]

Trabalho3b → Paralelo;

[pic 11][pic 12][pic 13]

Desempenho:

Sequencial

Paralela[pic 14]

[pic 15][pic 16][pic 17]

...

Baixar como  txt (5.4 Kb)   pdf (46.9 Kb)   docx (571.5 Kb)  
Continuar por mais 3 páginas »
Disponível apenas no Essays.club