27 de abril de 2012

Encontro 3 - Mandelbrot com parallel for

Roteiro do Encontro

  1. Estudo do problema do Mandelbrot.
  2. Estudo de caso para a aplicação paralela.
  3. 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