Roteiro do Encontro
- Estudo do problema do Mandelbrot.
- Estudo de caso para a aplicação paralela.
- Paralelização do código com parallel for.
- Estudo do problema do Mandelbrot.
Conjunto de Mandelbrot é um fractal, definido a partir do seguinte algoritmo sequencial.
Onde para cada pixel da imagem irá calcular se ele pertence ou não ao conjunto de mandelbrot, se ele pertence o pixel será pintado de preto, caso contrario será branco.
A imagem é gerada com o opencv, então para executar o algoritmo ele é necessario.
Exemplo de imagem gerada a partir do algoritmo:
Clique para ampliar. (Fonte: wikipédia) - Estudo de caso para a aplicação paralela.
Já com nosso algoritmo sequencial pronto passamos a analisar as possibilidades de paralelização, onde detectamos as seguintes características em nosso código: - O calculo que define se um ponto pertence ou não ao conjunto é completamente independente, ou seja, para calcular um ponto não precisa esperar o resultado de outro ponto.
- Temos dois laços for aninhados. Nesses laços que estará percorrendo todos os pontos da imagem, como o calculo de todos os pontos não apresentam dependências podemos criar uma distribuição de pontos para cada thread da forma que acharmos adequada.
- Surgiram várias idéias de distribuição do trabalho, entre elas: uma linha por thread, um bloco por thread, um ponto por thread.
- Paralelização do código com parallel for.
Decidimos então utilizar a diretiva parallel for do openmp para paralelizar, definimos a área paralela do código a área correspondente aos laços for.
Nenhum comentário:
Postar um comentário