Você está na página 1de 20

Accelerating Lossless Data

Compression with GPUs


Carlos Henrique Braz
Mayara Marques da Rosa
Sumário
● Codificação de Huffman
○ Histograma
○ Construção da árvore de Huffman
○ Construção da tabela de código variável
● Paralelismo
● Resultados Obtidos
A codificação de Huffman
● A codificação de Huffman pode ser subdividida em 3
partes:
○ Histograma
○ Construção da árvore de Huffman
○ Construção da tabela de código variável
A codificação de Huffman
● A codificação de Huffman pode ser subdividida em 3
partes:
○ Histograma
○ Construção da árvore de Huffman
○ Construção da tabela de código variável
Histograma
Para construção do Histograma é necessário a contagem da
quantidade dos caracteres do arquivo original.
Construção da árvore de Huffman

Uma árvore binária, chamada de árvore de Huffman é


construída recursivamente a partir da junção dos dois
símbolos de menor probabilidade, que são então somados
em símbolos auxiliares e estes símbolos auxiliares
recolocados no conjunto de símbolos.
Construção da tabela de código variável

Para construção da tabela de código variável é utilizada a


arvore como entrada. Para cada aresta da árvore é
associado um dos dígitos binários (0 ou 1) de acordo com
sua posição na árvore, 0 para esquerda e 1 para direita
Construção da tabela de código variável
Paralelismo

Paralelizamos a construção do histograma...


Histograma em CPU
Considere o vetor buffer[] contendo os caracteres do arquivo original que
desejamos contar as frequências...
Histograma em GPU
Adaptar o exemplo histograma na CPU para executar na GPU.O problema com o
cálculo de um histograma a partir dos dados de entrada surge a partir do fato de
que várias threads podem querer incrementar a mesma posição do histograma de
saída, ao mesmo tempo.
Operações Atômicas
Uma operação atômica é capaz de ler, modificar e escrever um valor de volta à
memória sem a interferência de qualquer outra thread, que garante que uma
condição de corrida não irá ocorrer.
Primeira Implementação
Levando em consideração a necessidade de utilizar a operação atômica...
1º Estratégia

● Problema
○ Frequência
Segunda Implementação
Para tentar resolver o problema da quantidade threads.
2º Estratégia

● Problema
○ Speedup
Terceira Implementação
Notamos que provavelmente a operação atômica em memória global estava
causando o problema.
Máquina
● GPU
○ Velocidade de Clock do Processador: 3.0 GHz
○ Memória : 12GB
● CPU
○ Sistema operacional Xubuntu - 64bits versão 15.04

○ Clock: 3.30GHz

○ Núcleos: 4

○ Memória RAM: 8Gb


Resultados
Referências
● Accelerating Lossless Data Compression with GPUs
● http://docs.nvidia.com/cuda/cuda-c-programming-guide/#axzz4CMRrDT0
● http://supercomputingblog.com/cuda/cuda-tutorial-4-atomic-operations/