aula7 - Convolução 2D

Existem duas definições de convolução que estamos trabalhando: a convolução linear, implementada pelo iaconv e a convolução periódica, implementada pelo iapconv.

Na aula de hoje trabalhamos na implementação da convolução 1D feita pela Natasha como uma forma de ajudar os alunos com maior dificuldade de entender a estilo da programação CUDA.

A solução feita em aula se encontra em: courseIA366F2S2010:ns108753_03. Ela procurou implementar a convolução 1D periódica, contando inclusive com a medida de desempenho. Existe uma diferença na definição entre a iapconv e a implementada pois na iapconv, a origem do kernel se encontra no centro da máscara enquanto que na implementação na gpu, a origem do kernel é no primeiro elemento à esquerda. Ficou como exercício, a Natasha modificar o programa para ficar igual ao iapconv.

Exercício para a próxima aula

Implementar minimamente as partes iniciais do white paper da Nvidia.
Image Convolution

Particularmente vamos implementar o iapconv pois à princípio é mais fácil pelo fato do tamanho da imagem de saída ser igual ao tamanho da imagem de entrada. Sugiro que busquem a otimização relativo ao acesso à imagem local compartilhada. Vejam se é possível criar as threads apenas nos pixels que precisam ser calculados, mas carregar a memória local com os pixels englobando a vizinhança, para aumentar o desempenho. Fica opcional neste momento a otimização na parte de coalizão de acesso à memória, abertura de laços, etc.

O exercício de dilatação fica adiado.