CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto...

28
CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento

Transcript of CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto...

Page 1: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

CMP 167– Programação com Objetos Distribuídos

Prof. Cláudio Geyer

Eduarda Monteiro

Porto Alegre, Julho de 2012

Algoritmo Paralelo para Estimação de Movimento

Page 2: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

2

Sumário Introdução

Conceitos Básicos

Implementação

Resultados

Conclusão

Page 3: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Conceitos Básicos

Compressão de Vídeos Digitais

3

Quadro Blocos

Particionamento em blocos 16x16 16x8 4x88x8 4x4

x

y

Número de Pixels

Page 4: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Vídeo

Tn

Tn+1

Tn+2

Tn+3

Conceitos Básicos

Compressão de Vídeos Digitais

4

Page 5: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Predição INTER

Conceitos Básicos Diagrama de Blocos de um Codificador de

Vídeo

5

Quadro deReferência

+Quadro Atual(reconstruído

)IT

Compensação de Movimento

Codificação de Entropia

Predição INTRA

IQ

- T QQuadro Atual

(original)

Filtro

Estimação de Movimento

Page 6: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Conceitos Básicos

• Estimação de Movimento (ME)– Codificação de vídeo visa eliminar informações

redundantes;

– Explora a redundância temporal;• Alta correlação entre quadros consecutivos;

– Busca similaridades entre quadros vizinhos em um vídeo.• Procura em um (ou mais) quadros de referência

(previamente reconstruído) um bloco que se assemelha com o bloco do quadro atual – Melhor Casamento.

– Um vetor de movimento é gerado para cada bloco atual.

6

Page 7: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Conceitos Básicos Estimação de Movimento (ME)

7 Implementação e Análise de Algoritmos para ME em

Processadores Paralelos tipo GPU

Quadro de Referência Quadro Atual

Vetor de Movimento

Área de Busca

Page 8: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Conceitos Básicos

• Estimação de Movimento (ME)– Métrica de Comparação

• SAD (Sum of Absolute Differences)

– Emprega o uso de algoritmos para encontrar as similaridades existentes: • Algoritmos de Busca:

– Diversos algoritmos podem ser encontrados na literatura:» Full Search (FS)

8

Page 9: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Conceitos Básicos Estimação de Movimento

Algoritmo Full Search (FS) Exaustivo – maior custo computacional; Busca realizada de modo que os blocos se desloquem

pixel a pixel dentro da área de busca; Resultados ótimos

9

Page 10: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Conceitos Básicos Full Search

10

Quadro de Referência Quadro Atual

Vetor de Movimento

Área de Busca

Page 11: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

11

Conceitos Básicos OpenMP

Paralelismo Explícito Anotações são realizadas pelo programador.

Memória Compartilhada Baseado em Threads

Variáveis podem ser: Compartilhadas: acesso por todas as threads Protegidas: duplicadas para cada thread.__________________________________________________

1. #include <omp.h>2. main() {3. 4. int var1, var2, var3;5. 6. parte_sequencial_1();7. #pragma omp parallel private(var1,var2) shared(var3) 8.{9.. parte_paralela(); // executada pelas threads10. ...11. }12. parte_sequencial_2(); }__________________________________________________

Page 12: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

Implementação

12

Ideia GeralEntrada: Sequencia de Vídeo em diferentes formatos YUV Objetivo: Estimação de Movimento para diferentes áreas de busca de diversas dimensões

1: largura argumento {largura do quadro};2: altura argumento {altura do quadro}3: TamanhoAreaBusca argumento {dimensao da area de busca}4: NumQuadros 2 5: TamanhoBloco 4; 6:7: image sequencia de video 8: AreaBusca TamanhoAreaBusca x TamanhoAreaBusca {alocação da area de busca}9: Bloco Atual TamanhoBloco x TamanhoBloco {alocação bloco atual};10: PARA cada bloco atual do quadro11: carrega Bloco Atual12: carrega AreaBusca13:14: Realiza SAD;15:16: FIM PARA17: retorna Vetores Movimento

Page 13: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

13

Implementação Versão OpenMP

1. SAD TamanhoBloco * TamanhoBloco * INT_MAX; {vetor que armazena menores valores de SAD}2. SAD_vector AreaBuscaL* AreaBuscaB; {vetor que armazena blocos candidatos}3. Num_Threads 4;4. Chunk_Full_Search floor(log(Search Area Size));5. Chunk_Full_Decision floor(log(Search Area Size * Search Area Size);

6: #pragma omp parallel 7: seta numero de threads;8: #pragma omp for schedule (Static, Chunk_Full_Search)9: PARA cada pixel que compoe a area de busca - Largura10: #pragma omp parallel for schedule (Static, Chunk_Full_Search) private (indices) shared (SAD_vector)11: PARA cada pixel que compoe a area de busca - Largura12: acc = acumulador de valores de SAD;13: PARA cada pixel que compoe o bloco - Altura14: PARA cada pixel que compoe o bloco - Altura15: acc acc + abs (blocoCandidato[indices] – BlocoAtual[indices];16: fim PARA17: fim PARA18: SAD_vector [ indices] acc;19: fim PARA20: fim PARA

21: #pragma omp parallel for schedule (Static, Chunk_Decision)22: PARA cada elemento do vetor de SAD23: if SAD_vector[k] < SAD_vector[k+1] then24: SAD = SAD_vector[k];25: else 26: SAD = SAD_vector[k+1];27: fim PARA

Page 14: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

14

Implementação Versão OpenMP

1. SAD TamanhoBloco * TamanhoBloco * INT_MAX; {vetor que armazena menores valores de SAD}2. SAD_vector AreaBuscaL* AreaBuscaB; {vetor que armazena blocos candidatos}3. Num_Threads 4;4. Chunk_Full_Search floor(log(Search Area Size));5. Chunk_Full_Decision floor(log(Search Area Size * Search Area Size);

6: #pragma omp parallel 7: seta numero de threads;8: #pragma omp for schedule (Static, Chunk_Full_Search)9: PARA cada pixel que compoe a area de busca - Largura10: #pragma omp parallel for schedule (Static, Chunk_Full_Search) private (indices) shared (SAD_vector)11: PARA cada pixel que compoe a area de busca - Largura12: acc = acumulador de valores de SAD;13: PARA cada pixel que compoe o bloco - Altura14: PARA cada pixel que compoe o bloco - Altura15: acc acc + abs (blocoCandidato[indices] – BlocoAtual[indices];16: fim PARA17: fim PARA18: SAD_vector [ indices] acc;19: fim PARA20: fim PARA

21: #pragma omp parallel for schedule (Static, Chunk_Decision)22: PARA cada elemento do vetor de SAD23: if SAD_vector[k] < SAD_vector[k+1] then24: SAD = SAD_vector[k];25: else 26: SAD = SAD_vector[k+1];27: fim PARA

Região Paralela

Page 15: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

15

Implementação Versão OpenMP

1. SAD TamanhoBloco * TamanhoBloco * INT_MAX; {vetor que armazena menores valores de SAD}2. SAD_vector AreaBuscaL* AreaBuscaB; {vetor que armazena blocos candidatos}3. Num_Threads 4;4. Chunk_Full_Search floor(log(Search Area Size));5. Chunk_Full_Decision floor(log(Search Area Size * Search Area Size);

6: #pragma omp parallel 7: seta numero de threads;8: #pragma omp for schedule (Static, Chunk_Full_Search)9: PARA cada pixel que compoe a area de busca - Largura10: #pragma omp parallel for schedule (Static, Chunk_Full_Search) private (indices) shared (SAD_vector)11: PARA cada pixel que compoe a area de busca - Largura12: acc = acumulador de valores de SAD;13: PARA cada pixel que compoe o bloco - Altura14: PARA cada pixel que compoe o bloco - Altura15: acc acc + abs (blocoCandidato[indices] – BlocoAtual[indices];16: fim PARA17: fim PARA18: SAD_vector [ indices] acc;19: fim PARA20: fim PARA

21: #pragma omp parallel for schedule (Static, Chunk_Decision)22: PARA cada elemento do vetor de SAD23: if SAD_vector[k] < SAD_vector[k+1] then24: SAD = SAD_vector[k];25: else 26: SAD = SAD_vector[k+1];27: fim PARA

Divisão da área debusca entre as threads

Page 16: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

16

Implementação Versão OpenMP

1. SAD TamanhoBloco * TamanhoBloco * INT_MAX; {vetor que armazena menores valores de SAD}2. SAD_vector AreaBuscaL* AreaBuscaB; {vetor que armazena blocos candidatos}3. Num_Threads 4;4. Chunk_Full_Search floor(log(Search Area Size));5. Chunk_Full_Decision floor(log(Search Area Size * Search Area Size);

6: #pragma omp parallel 7: seta numero de threads;8: #pragma omp for schedule (Static, Chunk_Full_Search)9: PARA cada pixel que compoe a area de busca - Largura10: #pragma omp parallel for schedule (Static, Chunk_Full_Search) private (indices) shared (SAD_vector)11: PARA cada pixel que compoe a area de busca - Largura12: acc = acumulador de valores de SAD;13: PARA cada pixel que compoe o bloco - Altura14: PARA cada pixel que compoe o bloco - Altura15: acc acc + abs (blocoCandidato[indices] – BlocoAtual[indices];16: fim PARA17: fim PARA18: SAD_vector [ indices] acc;19: fim PARA20: fim PARA

21: #pragma omp parallel for schedule (Static, Chunk_Decision)22: PARA cada elemento do vetor de SAD23: if SAD_vector[k] < SAD_vector[k+1] then24: SAD = SAD_vector[k];25: else 26: SAD = SAD_vector[k+1];27: fim PARA

Divisão de tarefaentre as threads

Page 17: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

17

Implementação Experimentos:

CPU: Intel Quad-core 2.4GHz

Área Paralelizada: Resolução do Quadro utilizada:

352x288 (CIF)

Bloco: Área de Busca (16x16, 32x32, 64x64, 128x128, 240x240).

Thread: Um bloco do quadro atual (4x4 pixels). Total de 4 threads – OpenMP

Média de 30 execuções para cada dimensão área de busca

Page 18: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

18

Resultados OpenMP x Sequencial – Tempo de

Processamento (s)

16x16 32x32 64x64 128x128 240x2400

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

OpenMP Sequencial

Page 19: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

19

Resultados OpenMP x Sequencial – Tempo de

Processamento (s)

16x16 32x32 64x64 128x128 240x2400

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

Área de Busca

Tem

po d

e P

rocessam

ento

Page 20: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

20

Resultados OpenMP x Sequencial – Tempo de

Processamento (s)

16x16 32x32 64x64 128x128 240x2400

0.02

0.04

0.06

0.08

0.1

0.12

0.14

0.16

0.18

Área de Busca

Tem

po d

e P

rocessam

ento

Page 21: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

21

Resultados OpenMP – Speed-up

16x16 32x32 64x64 128x128 240x2400.55

0.6

0.65

0.7

0.75

0.8

0.85

0.9

0.95

1

Speed-up OpenMP

Área de Busca

Speed-u

p

Page 22: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

22

Resultados OpenMP – Speed-up

16x16 32x32 64x64 128x128 240x2400.55

0.6

0.65

0.7

0.75

0.8

0.85

0.9

0.95

1

Speed-up OpenMP

Área de Busca

Speed-u

p • Crescimento Maior Volume de

dados

Page 23: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

23

Resultados OpenMP x MPI – Tempo de Processamento

16x16 32x32 64x64 128x128 240x2400

20

40

60

80

100

120

MPI - 4 Processos OpenMP

Área de Busca

Tem

po d

e P

rocessam

ento

Page 24: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

24

Resultados OpenMP x MPI – Tempo de Processamento

16x16 32x32 64x64 128x128 240x2400

20

40

60

80

100

120

MPI - 4 Processos OpenMP

Área de Busca

Tem

po d

e P

rocessam

ento MPI Comunicação

Page 25: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

25

Resultados OpenMP x MPI – Speed-up

16x16 32x32 64x64 128x128 240x2400.25

0.35

0.45

0.55

0.65

0.75

0.85

0.95

1.05

Speed-up MPI - 4 Processos Speed-up OpenMP - 4 Threads

Área de Busca

Speed-u

p

Page 26: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

26

Resultados OpenMP x MPI – Speed-up

16x16 32x32 64x64 128x128 240x2400.25

0.35

0.45

0.55

0.65

0.75

0.85

0.95

1.05

Speed-up MPI - 4 Processos Speed-up OpenMP - 4 Threads

Área de Busca

Speed-u

p

Comportamento Coerente

Page 27: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

27

Conclusões Compressão de Vídeo: Algoritmo FullSearch para

Estimação de Movimento;

Aplicação: Exaustiva; Massivamente paralela: independência de dados;

Comparação Sequencial x OpenMP: Pouco ganho – OpenMP Custo / threads x Volume de Execução

Comparação OpenMP x MPI OpenMP – melhor desempenho MPI: comunicação.

Page 28: CMP 167– Programação com Objetos Distribuídos Prof. Cláudio Geyer Eduarda Monteiro Porto Alegre, Julho de 2012 Algoritmo Paralelo para Estimação de Movimento.

CMP 167– Programação com Objetos Distribuídos

Prof. Cláudio Geyer

Eduarda Monteiro

Porto Alegre, Julho de 2012

Algoritmo Paralelo para Estimação de Movimento