Ingeniero
Programación Concurrente.
José David Bermúdez Castro
PUC-RIO.
Rio de Janeiro, Brasil. bermudezjosedavid@gmail.com Objetivo: Implementar algunas de las variantes del algoritmo de cuadratura adaptativa, utilizando Pthreads e OpenMP.
El programa realizado utiliza X threads para computar la aproximación, por el método de los trapecios, del área bajo la curva formada por una función f. El número de trapecios a ser calculado para realizar la aproximación depende de una tolerancia E. Para determinado intervalo [a,b], el algoritmo calcula el área dos subtrapecios formados por (a, (b-a)/2),f(a), f((b-a)/2) y por (b-a)/2), b, f((b-a)/2,f(b)). Si la diferencia entre el área del trapecio mayor y la suma de los dos subtrapecios es pequeña en comparación a la tolerancia E, el cálculo del área entre a y b está completo. Caso contrario, se debe repetir el mismo procedimiento para los dos trapecios menores.
En la primera variante, cada thread es responsable de calcular el área de un subintervalo. Luego cuando todos los threads terminan su trabajo, el thread principal muestrar el resultado final.
En la segunda variante, el thread principal inicialmente crea una lista de tareas
1. Na segunda variante, a thread principal inicialmente cria uma lista de tarefas, contendo os extremos dos intervalos, com NUMINICIAL tarefas. Cada thread executa uma tarefa, e se ela gerar subtarefas, coloca uma delas na fila global e processa a outra, até que não encontre mais tarefas na fila (Escreva operaçoes InsereTarefa e RetiraTarefa para manipular essa fila.). A thread principal espera as demais terminarem e mostra o resultado final.
Seu programa deve aceitar facilmente a mudança para outras funções e intervalos, parametrizando o cálculo da integral pelos extremos e por um ponteiro de função.
Execute cada variante para diferentes números de threads (2, 4 e 8), com algumas medidas preliminares dos tempos obtidos para cada combinação. Experimente