aula6 - Convolução 2D

Classificação das implementações na GPU

  1. global - acesso direto à memória global, tanto na entrada como na saída
  2. textura (memória global com cache)
  3. memória local compartilhada

Tipicamente, algoritmos acesso global têm um desempenho de tipicamente até 10 vezes de speedup, enquanto que o bom uso da memória local faz o speedup chegar até a 100 vezes de speedup. O uso da textura seria uma opção intermediária.

Na aula foi vista algumas implementações e discutidas estas questões.

Como exercício para entregar na próxima aula, está sendo solicitado o seguinte:

  1. Montar um esquema na sua página de exercícios de medida de corretude e desempenho do algoritmo, comparando-o com o iaconv ou com o iapconv e medir o tempo para diversos tamanhos de kernel. Um bom exemplo a seguir, visto em aula é a implementação do André Korbes.

  2. O próximo algoritmo a ser estudado é a dilatação em nível de cinza, ver a operação ia870:iadil. Esta operação possui a mesma estrutura da convolução, mudando apenas as operações do kernel: em vez da multiplicação é soma e em vez da soma é o maximo . Fazer a implementação comparando os resultados com iadil e medindo o seu desempenho.

  3. Existe uma oportunidade de escrevermos um artigo sobre as estratégias de implementação dos algoritmos de convolução e dilatação (operações de vizinhança de um modo geral). Talvez seja possível escrevermos este artigo como atividade do curso. Para isto, precisamos primeiro conhecer o que está sendo publicado na área. Como atividade 3 buscar artigos que falem sobre isto, implementações em GPU de operações de vizinhança: convolução dilatação, etc.

    Vejam o white paper da Nvidia: Image Convolution

Algoritmos e implementação do iaconv e iapconv:

http://parati.dca.fee.unicamp.br/adesso/wiki/ia636-2009/jahuaman_Ex6/view/