aula8 - Convolução 2D, continuação

O objetivo da aula de hoje é o de analisar os progressos feitos pelos alunos na implementação da convolução utilizando a memória compartilhada. Iremos discutir as dificuldades encontradas nestas implementações.

Discutimos que existem 3 tipos de implementação utilizando a memória compartilhada:

  1. Sobreposição de threads: cada thread carrega um pixel da memória compartilhada. As threads são decompostas utilizando sobreposição para tratamento da borda. Vão existir threads que não processam nada.
  2. Sobreposição de memória compartilhada. Neste cada cada thread está associado a um pixel do resultado. Cada thread terá que carregar mais que um pixel da memória compartilhada
  3. Incremental. Neste caso, o pixel resultado é calculado por partes, à semelhança do algoritmo de multiplicação de matrizes.

Vimos na aula de hoje que se a origem do kernel for no (0,0), o código poderá ficar mais fácil de escrever e ler.

Vimos também que há necessidade de termos um padrão no uso de variáveis para que possamos mais facilmente entender os códigos feitos pelos colegas.

Desta forma, o exercício para a próxima aula é:

  1. Propor uma nomenclatura padronizado do uso de variáveis dos programas de convolução digital.
  2. Reimplementar alguns códigos já feitos, utilizando o kernel no (0,0)
  3. Procurar avançar na busca de boas implementações CUDA que sejam: simples e ao mesmo tempo eficientes.

O teste previsto na próxima aula será substituído por um artigo curto explicando a sua melhor implementação da convolução. O artigo será escrito no Adessowiki.