COMPUTAÇÃO PARALELA COM ARQUITETURA DE PROCESSAMENTO GRÁFICO CUDA APLICADA A UM CODIFICADOR DE VÍDEO H.264

Tamanho: px
Começar a partir da página:

Download "COMPUTAÇÃO PARALELA COM ARQUITETURA DE PROCESSAMENTO GRÁFICO CUDA APLICADA A UM CODIFICADOR DE VÍDEO H.264"

Transcrição

1 CENTRO UNIVERSITÁRIO UNIVATES CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE ENGENHARIA DE CONTROLE E AUTOMAÇÃO AUGUSTO LIMBERGER LENZ COMPUTAÇÃO PARALELA COM ARQUITETURA DE PROCESSAMENTO GRÁFICO CUDA APLICADA A UM CODIFICADOR DE VÍDEO H.64 Lajeado 0

2 AUGUSTO LIMBERGER LENZ COMPUTAÇÃO PARALELA COM ARQUITETURA DE PROCESSAMENTO GRÁFICO CUDA APLICADA A UM CODIFICADOR DE VÍDEO H.64 Trabalho de Conclusão de Curso apresentado ao Centro de Ciências Exatas e Tecnológicas do Centro Universitário UNIVATES, como parte dos requisitos para a obtenção do título de bacharel em Engenharia de Controle e Automação. Área de concentração: Computação paralela ORIENTADOR: Ronaldo Hüsemann Lajeado 0

3 AUGUSTO LIMBERGER LENZ COMPUTAÇÃO PARALELA COM ARQUITETURA DE PROCESSAMENTO GRÁFICO CUDA APLICADA A UM CODIFICADOR DE VÍDEO H.64 Este trabalho foi julgado adequado para a obtenção do título de bacharel em Engenharia de Controle e Automação do CETEC e aprovado em sua forma final pelo Orientador e pela Banca Examinadora. Orientador: Prof. Ronaldo Hüsemann, UNIVATES Doutor pelo PPGEE/UFRGS Porto Alegre, Brasil Banca Examinadora: Prof. Marcelo de Gomensoro Malheiros, UNIVATES Mestre pela FEEC/UNICAMP Campinas, Brasil Prof. Maglan Cristiano Diemer, UNIVATES Mestre pelo PPGCA/UNISINOS São Leopoldo, Brasil Coordenador do curso de Engenharia de Controle e Automação Prof. Rodrigo Wolff Porto Lajeado, Junho de 0.

4 Dedico este trabalho ao meu pai, Edu, e a minha mãe, Ivone, por acreditarem na importância da educação.

5 AGRADECIMENTOS À minha família, pelo apoio, incentivo e compreensão nos momentos difíceis, no transcorrer da realização desse trabalho e demais atividades da graduação. Ao professor Ronaldo Hüsemann, pela sua orientação, pelas oportunidades de trabalhar em projetos de pesquisa e pela amizade cultivada ao longo desse período. Aos colegas do Laboratório de Engenharia Aplicada: Anderson Giacomolli, Diego Schwingel e Marco Gobbi pelas contribuições no desenvolvimento desse trabalho. Aos colegas de curso, pela amizade e companhia durante o decorrer desta jornada. À Luisa por todo o amor, carinho e compreensão.

6 RESUMO Este trabalho investiga a utilização de processadores gráficos (GPUs) como coprocessadores em arquiteturas de computadores no contexto da codificação de vídeo. O objetivo específico é implementar módulos do codificador H.64 em tecnologia CUDA, presente nas placas de vídeo da empresa NVIDIA. Dessa forma, algoritmos paralelizáveis são executados na GPU de forma a acelerar a codificação e aliviar a carga da CPU principal. O primeiro estudo de caso foi a implementação do módulo computacional, situado no codificador intraquadro, que foi integrado ao software de referência para validação e testes. Os resultados obtidos apontam um ganho de cerca de 3,9 vezes no tempo de execução deste módulo para vídeos de alta definição. No segundo estudo de caso foi abordado o codificador interquadros através da estimação de movimento. Um algoritmo de busca adequado à arquitetura paralela em questão foi proposto e implementado, além da implementação do cálculo de SAD. Os resultados obtidos na estimação de movimento apontam para um aumento na velocidade de execução em torno de 5,7 vezes para vídeos de alta definição. Palavras-chaves: Codificação de Vídeo, Computação Paralela, GPGPU, CUDA.

7 ABSTRACT This work investigates the use of graphical processing units (GPUs) as co-processors for computer architectures in the context of video encoding. The specific goal is to implement modules of the H.64 encoder in CUDA, present in NVIDIA video cards. Thus, parallelizable algorithms have been implemented on the GPU to accelerate the encoding and reduce the load of the main CPU. The first case study was the implementation of computational module, situated in the intra-frame encoder, that was integrated into the reference software for validation and testing. The results show a speedup of 3.9 times in the execution of computational module for high-definition video. In the second case study, the inter-frame encoder was approached through motion estimation. A search algorithm suitable for parallel architecture was proposed and implemented, in addition to the SAD calculation. The results show a speedup of 5.7 times in the execution for high-definition videos. Keywords: Video Coding, Parallel Computing, GPGPU, CUDA.

8 SUMÁRIO INTRODUÇÃO...5 UNIDADE DE PROCESSAMENTO GRÁFICO...9. Histórico das GPUs Primeira geração Segunda geração Terceira Geração Quarta geração Quinta geração.... Pipeline gráfico tradicional....3 Processamento de propósito geral em GPU Visão Geral da CUDA Arquitetura de hardware Modelo de programação Função Kernel Hierarquia de threads Hierarquia de memória Detalhamento dos espaços de memória Registradores e memória local Memória compartilhada Memória global Memória de textura e superfície Memória de constantes CODIFICAÇÃO DE VÍDEO Vídeo digital Compressão de vídeo Introdução ao H Descrição do codec H Predição intraquadro Transformadas diretas e inversas Transformada discreta de cossenos Transformada de Hadamard Quantização Estimativa de movimento Algoritmos de busca Critérios de similaridade Compensação de movimento Trabalhos relacionados DESCRIÇÃO DO SISTEMA DESENVOLVIDO Codificação intraquadro Algoritmos de computação intra Implementação da DCT direta e inversa Implementação da Transformada de Hadamard Implementação da Quantização...60

9 4.3 Codificação interquadros Algorítimo de busca proposto Implementação da estimação de movimento RESULTADOS PRÁTICOS Integração com o software de referência Avaliação dos resultados no módulo computacional intra Avaliação do algoritmo de busca proposto Avaliação dos resultados da estimativa de movimento em GPU GPU profiling CONCLUSÃO...77

10 LISTA DE FIGURAS Figura Shader tradicional x shader unificado, adaptado de (IKEDA, 0)...4 Figura Escalabilidade da arquitetura CUDA, adaptada de (NVIDIA, 0a)...5 Figura 3 Cenários comuns de branch divergence, adaptada de (HAN; ABDELRAHMAN, 0)...6 Figura 4 Organização das threads, adaptada de (NVIDIA, 0a)...9 Figura 5 Fluxo típico de uma aplicação CUDA...30 Figura 6 Padrões de acesso coalescido (CONRAD, 00)...3 Figura 7 Acesso não coalescido (CONRAD, 00)...33 Figura 8 Estrutura do codificador H.64 (REDIESS, 006)...38 Figura 9 Modos de predição para blocos 6x6 de luminância. (AGOSTINI, 007)...39 Figura 0 Modos de predição para blocos 4x4 de luminância (AGOSTINI, 007)...40 Figura Bloco de entrada (a) e resultado da DCT (b) (RICHARDSON, 003)...4 Figura Macroblocos de crominância e luminância com componentes DC destacados (MAJOLO, 00)...44 Figura 3 Quadros consecutivos de vídeo (RICHARDSON, 003)...49 Figura 4 Na esquerda, o resíduo sem estimativa de movimento. Na direita, o resíduo com estimativa de movimento (RICHARDSON, 003)...49 Figura 5 Predição interquadro (DINIZ, 009)...50 Figura 6 Algoritmo de busca completa (PORTO, 0)...5 Figura 7 Large Diamond Search (LDS) e Small Diamond Search (SDS) (PORTO, 008)...5 Figura 8 Algoritmo de busca logarítmica (RICHARDSON, 00)...5 Figura 9 Processo de codificação intraquadro, adaptada de (DINIZ, 009)...57 Figura 0 Etapas do módulo computacional...58 Figura Arquitetura proposta para módulo computacional usando GPUs NVIDIA (HUSEMANN et al., 0b) Figura Relacionamento das threads com os componentes DC...60 Figura 3 Padrão de busca do algoritmo proposto...6 Figura 4 Procedimento de redução usado no cálculo de SAD, adaptado de (NVIDIA, 0)...64 Figura 5 Distribuição do tempo entre as etapas...76

11 LISTA DE CÓDIGOS Listagem Declaração e chamada de um kernel...8 Listagem Protótipo da função intrínseca usad...63 Listagem 3 Primeira etapa da redução...64

12 LISTA DE TABELAS Tabela Evolução da distribuição dos estágios entre CPU e GPU...3 Tabela Características dos espaços de memória na arquitetura CUDA séries G80 e G Tabela 3 Passos de quantização...46 Tabela 4 Valores de PF para cada posição...47 Tabela 5 Fator de multiplicação...47 Tabela 6 Complexidade dos módulos do codificador H Tabela 7 Principais características das duas placas utilizadas...66 Tabela 8 Comparação dos tempos de processamento para vídeos 4CIF...68 Tabela 9 Comparação dos tempos de processamento vídeo HD...68 Tabela 0 Avaliação do algoritmo de busca proposto para 3 Mbps...70 Tabela Avaliação do algoritmo de busca proposto para 4 Mbps...70 Tabela Avaliação do algoritmo de busca proposto para 5 Mbps...7 Tabela 3 Comparação dos desempenho em QCIF...7 Tabela 4 Comparação dos desempenho em CIF...73 Tabela 5 Comparação dos desempenho em 4CIF...73 Tabela 6 Comparação dos desempenho em 70p...74 Tabela 7 Comparação dos desempenho em 080p...75

13 LISTA DE ABREVIATURAS AMD Advanced Micro Devices ANSI American National Standards Institute API Application Programming Interface AVC Advanced Video Coding CAD Computer Aided Design CIF Common Intermediate Format CPU Central Unit Processing CUDA Compute Unified Device Architecture DC Direct Current DCT Discrete Cosine Transform DSP Digital Signal Processor DVD Digital Versatile Disc FS Full Search GLSL OpenGL Shading Language GPU Graphics Processing Unit GPGPU General Purpose GPU HD High Definition HLSL High Level Shader Language IBM International Business Machines IEC International Electro-technical Commission ISO International Organization for Standardization ITU-T International Telecommunication Union Telecommunication Standardization Sector JSVM Joint Scalable Video Model JVT Joint Video Team LDS Large Diamond Search LS Logarithmic Search MAE Mean Square Error MSE Mean Square Error

14 MC Compensação de movimento ME Estimativa de movimento MF Multiplication Factor MPEG Motion Picture Experts Group PC Personal Computer PCIe Peripheral Component Interconnect Express PF Post-Scaling Factor PGC Professional Graphics Controller QP Quantization Parameter RAM Random Access Memory RGB Red Green Blue SAD Sum of Absolute Differences SD Standard Definition SDS Small Diamond Search SGI Silicon Graphics International SIMD Single Instruction, Multiple Data SIMT Single-Instruction, Multiple-Thread SLI Scalable Link Interface SM Streaming Multiprocessor SP Scalar Processors SSE Streaming SIMD Extensions SVC Scalable Video Coding VRAM Video Random Access Memory

15 5 INTRODUÇÃO A capacidade de armazenar e transportar vídeo em formato digital tornou as aplicações que fazem uso desta tecnologia parte do cotidiano das pessoas. Atualmente, o vídeo digital está presente em televisores, Digital Versatile Discs (DVDs), videoconferência e sistemas de telemedicina (FUJITSU, 00). A codificação de vídeo é a técnica essencial que possibilita a utilização de vídeos de forma eficiente. Essa técnica permite a transformação do sinal de vídeo em uma representação comprimida, onde são eliminadas redundâncias, e, com isso reduzir a largura de banda necessária para transportar o vídeo ou o espaço em disco necessário para armazená-lo. O processo de decodificação recupera o sinal de vídeo original ou uma aproximação deste, de forma que possa ser visualizado em sua forma original (RICHARDSON, 003). A necessidade por técnicas de compressão de vídeo pode ser ilustrada pelo seguinte cenário. Considerando-se, por exemplo, um vídeo com standard definition (SD), que possui 70 x 480 pixeis, e utilizando o sistema de três cores primárias red green blue (RGB), com 8 bits de representação para cada cor e 30 quadros por segundo, seriam necessários aproximadamente 30 MB para armazenar apenas um segundo de vídeo. Dada esta necessidade, surgiram diversas formas de realizar a codificação. Pode-se dizer que a base das técnicas empregadas na maioria dos codificadores atuais foi estabelecida na norma H.6 da International Telecommunication Union Telecommunication Standardization Sector (ITU-T) definida em 989, da qual pode-se destacar como algoritmos principais a estimativa de movimento, transformada discreta de cosseno (DCT), quantização linear e codificação de entropia (GHANBARI, 003). Posteriormente, foi desenvolvido o padrão MPEG- pelo Motion Picture Experts Group (MPEG) e também adotado pela ITU-T, como uma norma conjunta das duas entidades e passando a ser chamado H.6/MPEG-, que tornou-se extremamente popular. O MPEG- foi empregado, por exemplo, nos DVDs e em diversos sistemas de televisão digital (MAJOLO, 00). Este padrão continuou popular ao longo dos anos, sendo largamente empregado ainda nos dias de hoje. A criação de técnicas inovadoras, como a codificação de cenas sintéticas e naturais em um modelo de codificação baseado em objetos independentes e a possibilidade de codificação realizada sobre objetos não necessariamente retangulares, resultou no padrão MPEG-4 (RICHARDSON, 003).

16 6 As entidades MPEG e ITU-T uniram novamente esforços para desenvolver um novo padrão de codificação. Este grupo de trabalho é conhecido como Joint Video Team (JVT). Como resultado surgiu o padrão chamado de Advanced Video Coding (AVC), publicado como a recomendação H.64 da ITU-T e como a parte dez do MPEG-4 (AGOSTINI, 007). A elaboração do codec H.64 foi feita com o aumento da eficiência da compressão sendo o principal objetivo, resultando em aumentos significativos nas taxas de compressão. No entanto, esta evolução levou inevitavelmente ao aumento dos requisitos de processamento para os dispositivos codificadores e decodificadores (RICHARDSON, 003). Os algoritmos empregados para codificação de vídeo requerem computação intensa, tornando necessárias técnicas computacionais sofisticadas e o uso de arquiteturas dedicadas que tornem possível a execução destes algoritmos em tempo real. Dentre as soluções que vêm sendo adotadas pode-se destacar a utilização de arquiteturas do tipo Single Instruction, Multiple Data (SIMD), Digital Signal Processor (DSP) e o desenvolvimento de coprocessadores dedicados em hardware (GREENE; TULJAPURKAR, 007). Uma alternativa recentemente explorada para aumento de desempenho de algoritmos é a utilização de unidades de processamento gráfico, ou Graphics Processing Unit (GPU), como plataformas para processamento de propósito geral. Este conceito, que é conhecido como General Purpose GPU (GPGPU), torna possível explorar o poder de processamento das placas aceleradoras de vídeo em aplicações que não necessariamente façam uso de recursos gráficos (CHEUNG et al., 00). As GPUs possuem uma arquitetura altamente paralela, capaz de executar a mesma operação em um grande número de elementos ao mesmo tempo. Esta forma de organização é apropriada ao seu objetivo original - processamento de gráficos em três dimensões (3D), mas também pode ser empregada na implementação de algoritmos úteis em diversos outros campos (IKEDA, 0). Nos últimos anos, foram criadas tecnologias para adequar a GPU ao processamento de propósito geral e facilitar o desenvolvimento de programas que possam fazer uso deste recurso. Um exemplo notável é a arquitetura de computação paralela da NVIDIA denominada Compute Unified Device Architecture (CUDA) (NVIDIA, 0d). Outros exemplos são: Advanced Micro Devices (AMD) Stream (AMD, 0), o framework OpenCL (KHRONOS, 0) e a application programming interface (API) Microsoft Direct Compute (MICROSOFT, 009). Acredita-se que a utilização de placas de vídeo como ferramenta de auxílio na tarefa de codificação de vídeo seja de grande interesse, dada a variedade de aplicações com vídeo

17 7 digital e a grande disseminação destes dispositivos em computadores pessoais. Portanto, este trabalho se propõe a investigar a utilização de GPUs, presentes nas placas de vídeo compatíveis com a tecnologia NVIDIA CUDA, como coprocessadores da Central Unit Processing (CPU) no contexto da codificação de vídeo. Mais especificamente, o objetivo é implementar módulos do codificador H.64 que possuam algoritmos paralelizáveis na GPU, de forma a acelerar a codificação e aliviar a carga da CPU principal. Desta forma, foi explorada a implementação de referência do codificador H.64 de forma a identificar pontos onde a utilização da arquitetura CUDA seja vantajosa. A partir dessa análise e da revisão da literatura, foram definidos dois módulos do codificador a serem trabalhados como estudos de caso: módulo computacional e módulo de estimação de movimento. O primeiro estudo de caso aborda o codificador intraquadros através da implementação dos algoritmos do módulo computacional: transformada discreta de cossenos direta e inversa, transformada de Hadamard direta e inversa, quantização e quantização inversa. Já o segundo estudo de caso aborda a codificação interquadros através da implementação de algoritmos da estimação de movimento: algoritmo de busca e cálculo de similaridade. Para tornar possível a validação e a avaliação dos módulos desenvolvidos foi realizada a integração com o codificador de referência do padrão H.64. Dessa forma, o software de referência serviu como base de comparação em termos do desempenho alcançado e a validação dos resultados será obtida através da comparação dos vídeos comprimidos gerados pelo software original com os vídeos obtidos pela versão paralela. A fim de embasar o desenvolvimento deste trabalho foram pesquisados trabalhos relacionados. Sprandlin et al. (009) por exemplo analisou a viabilidade de implementar um codificador MPEG- na arquitetura CUDA. Chan et al. (009), Cheung et al. (00) e Huang, Shen e Wu (009) por sua vez exploraram diferentes abordagens para acelerar a execução dos algoritmos de estimativa de movimento também utilizando CUDA. Monteiro et al. (0) realizaram a implementação do algoritmo de busca completa em CUDA, obtendo ganhos de velocidade de 600 vezes. Os trabalhos estudados apontam que a utilização da tecnologia CUDA pode trazer avanços à área de codificação de vídeo, de forma a tornar viável a execução em tempo real de complexas técnicas de codificação em vídeos de alta resolução. O texto desta monografia foi organizado da seguinte forma. O capítulo apresenta uma revisão de literatura acerca da evolução da arquitetura das GPUs que culminou no conceito de GPGPU. O capítulo 3 define os conceitos relacionados à codificação de vídeo, as

18 8 características básicas do padrão H.64 e uma descrição dos trabalhos relacionados estudados. O capítulo 4 formaliza a proposta de trabalho que guiou a execução das atividades. O capítulo 5 apresenta os estudos de caso realizados. Por fim, o capítulo 6 apresenta as conclusões obtidas e aponta possíveis trabalhos futuros.

19 9 UNIDADE DE PROCESSAMENTO GRÁFICO A Unidade de Processamento Gráfico é um processador dedicado à aceleração de aplicações gráficas. A arquitetura das GPUs difere substancialmente das tradicionais CPUs, pois direcionam-se a necessidades específicas, como processamento de dados 3D com ponto flutuante. Sua organização interna torna possível uma intensidade aritmética muito maior, através da execução de diversas operações iguais em dados independentes (OWNEW et al., 005). Essas características surgiram da necessidade de processar um grande número de pixeis para gerar uma imagem a ser exibida. Como cada pixel é independente dos demais é possível calcular os valores de vários pixeis simultaneamente. Esta arquitetura paralela possibilita portanto a execução de um grande número de operações por unidade de tempo.. Histórico das GPUs A ideia de se utilizar processadores especificamente para as tarefas relacionadas a vídeo remonta ao ano de 984 quando a International Business Machines (IBM) lançou a primeira placa de vídeo com microprocessador próprio (Intel 8088) de forma a amenizar a carga da CPU principal. Nesta época, o processador era empregado apenas para gerar os sinais de vídeo, a fim de possibilitar melhores taxas de atualização da tela. Essa solução, conhecida como Professional Graphics Controller (PGC), era destinada a custosos sistemas de Computer Aided Design (CAD) e não se disseminou para o mercado de massa (DUKE; WALL, 985). Em 986, a Texas Instruments lançou o processador TMS3400. Este chip, além de possuir uma memória dedicada para vídeo, chamada de Video Random Access Memory (VRAM) e suporte a display, foi um dos primeiros a apresentar um conjunto de instruções voltado ao processamento gráfico (GUTTAG et al., 988). Entretanto, no final dos anos 80 surgiram as primeiras placas de vídeo compatíveis com a arquitetura IBM-PC (Personal Computer), que possuíam implementações em hardware das primitivas gráficas de duas dimensões (D) e, por isso, tornaram-se conhecidas como placas aceleradoras D (CROW, 004). No início dos anos 90, a Silicon Graphics International (SGI), que era líder no mercado de gráficos 3D, criou a API OpenGL, que posteriormente tornou-se um padrão mantido por diversas entidades. O surgimento da OpenGL trouxe uma forma uniforme de acesso às diferentes placas gráficas e deixou aos fabricantes a responsabilidade de

20 0 desenvolver device drivers para os seus produtos. Posteriormente, a empresa Microsoft lançou o conjunto de APIs DirectX, que inclui a API Direct3D que tornou-se grande competidora da OpenGL. A possibilidade de escrever software utilizando uma API de alto nível compatível com uma grande diversidade de placas de vídeo teve um forte impacto no mercado para aplicativos gráficos (CROW, 004). No início da década de 90 começavam a se tornar comuns aplicativos com gráficos 3D que faziam uso do poder de processamento da CPU, criando uma demanda crescente por aceleração 3D em hardware. Por volta de 995, surgiram os primeiros produtos a implementar essa ideia: S3 ViRGE, ATI Rage, Matrox Mystique e 3dfx Voodoo. O passo seguinte à aceleração 3D foi o surgimento das GPUs, que ocorreu por volta de 998, acrescentando processamento gráfico 3D ao hardware. No entanto, nesse período o processamento gráfico ainda era realizado por funções fixas definidas no projeto da GPU. A partir desse ponto, a evolução pode ser definida em cinco gerações (IKEDA, 0)... Primeira geração No final da década de 90, haviam três grandes empresas no segmento: NVIDIA, ATI e 3Dfx (com seus respectivos produtos, RIVA TNT - NV5, Rage 8 e Voodoo3). Nos dispositivos dessa geração não havia processamento na placa além da rasterização, texturização e geração dos sinais para o monitor. A rasterização consiste na conversão de representações vetoriais de objetos 3D em uma representação matricial, também conhecida como raster. Já a texturização é responsável pela aplicação de uma textura às faces de um objeto tridimensional. A imagem 3D é sintetizada por um conjunto de polígonos (comumente triângulos), resultantes da projeção para um espaço bidimensional (AZEVEDO, 003)... Segunda geração Em 999, o lançamento da GeForce 56 (NV0) pela empresa NVIDIA, destacou-se pela introdução do pipeline gráfico, tornando a GPU responsável pela transformação e iluminação dos polígonos, especificados em coordenadas de mundo. Neste período a ATI lançou a família de produtos Radeon R00 com a tecnologia HyperZ, que permitia evitar cálculos desnecessários em pixeis não visíveis na projeção final. O pipeline gráfico é um modelo conceitual composto por estágios que aplicam uma série de algoritmos aos dados processados por uma GPU. Os dados de entrada são um

21 conjunto de vértices e os respectivos atributos. Após a execução de todos os estágios do pipeline, obtém-se a representação de uma imagem a ser exibida na tela. A adoção dessa arquitetura possibilitou um grande avanço nos jogos e aplicações gráficas em tempo real, pois boa parte das tarefas que antes eram feitas pela CPU foram levadas para o hardware da GPU. Esta arquitetura permitia uma certa flexibilidade ao desenvolvedor, que podia configurar os módulos da GPU (IKEDA, 0). A empresa 3DFX, por sua vez, lançou a tecnologia Scalable Link Interface (SLI), que permitia a conexão e utilização em paralelo de duas placas de vídeo. Posteriormente, a 3DFX foi adquirida pela NVIDIA, que passou a utilizar esta tecnologia em sua linha de produtos. Neste mesmo período, ATI e NVIDIA tinham produtos com características semelhantes dando início a uma concorrência acirrada (IKEDA, 0)...3 Terceira Geração Em 00, a NVIDIA lançou a primeira GPU programável GeForce 3 (NV0), que competiu diretamente com a Radeon 8500 (R00) lançada pela ATI. A introdução das técnicas de pixel shading e vertex shading foi a grande evolução desta geração (VIANA, 009). O pixel shading torna possível desenvolver programas capazes de manipular os pixeis após a rasterização, de forma a criar efeitos na imagem, como por exemplo, rugosidade ou desfoque. Já vertex shading possibilita a criação de programas capazes de manipular a estrutura dos vértices do modelo tridimensional (ou seja, antes de rasterização), para otimizar os modelos 3D ou alterar o modelo dinamicamente. Os programas desenvolvidos com essas duas técnicas são conhecidos como shaders. Ambas as técnicas são utilizadas a fim de obter maior realismo nas imagens sem sobrecarregar a CPU principal, pois os shaders são executados inteiramente pela GPU (ST-LAURENT, 004). A capacidade de processamento desta geração era limitada, sendo necessário utilizar a linguagem de montagem (assembly) da GPU. Entretanto, a partir desta fase a GPU começou a ser encarada com um hardware vetorial programável (VIANA, 009)...4 Quarta geração A quarta geração introduziu o tratamento de variáveis de ponto flutuante e uma maior flexibilidade na utilização de dados de textura. Nesse período, com início por volta de 003, a

22 concorrência foi intensa com o lançamento da série FX (NV30) e GeForce 6 pela NVIDIA e da série R300 e X pela ATI. Este foi um momento importante na evolução das placas de vídeo, devido a ser a primeira vez na história em que foi possível desenvolver, ainda que precariamente, aplicativos de propósito geral sobre tecnologias de GPU (NVIDIA, 009)...5 Quinta geração O ponto marcante das placas dessa geração são as arquiteturas elaboradas para explorar a computação paralela de propósito geral em GPUs. Pode-se dizer, portanto, que somente a partir de meados de 006 que a computação paralela em hardware gráfico tornouse de grande interesse no mercado, indo além da comunidade científica (IKEDA, 0). O conceito de desenvolvimento de programas de propósito geral para GPUs é um dos focos deste trabalho e, portanto, será detalhado a partir da Subseção.3.. Pipeline gráfico tradicional O processo executado por todo o pipeline pode ser dividido em duas etapas principais: processamento de geometria e renderização. A primeira etapa transforma as coordenadas dos objetos de três dimensões em representações de duas dimensões, apropriadas à exibição. A segunda etapa preenche a área entre as coordenadas D com pixeis que representam a superfície dos objetos. O estágio de geometria ainda pode ser subdividido em: transformações e iluminação (CROW, 004). Inicialmente, apenas a renderização era implementada em hardware, por ser uma operação simples e repetitiva, e as outras operações eram executadas pela CPU. Com a evolução no desenvolvimento das GPUs, cada vez mais tarefas foram alocadas às placas de vídeo, a fim de diminuir a carga da CPU (NVIDIA, 999). A ideia do pipeline é fazer com que cada um desses módulos opere em paralelo, ao invés de tratar um pixel de cada vez. Nas placas de vídeo modernas, o pipeline completo é replicado diversas vezes, de forma a obter maior vazão no processamento. Ao longo dos anos, mais etapas do pipeline foram sendo trazidas da CPU para a GPU, chegando ao cenário atual, onde apenas a lógica da aplicação e as computações da cena são executadas pela CPU principal. A Tabela lista os estágios do pipeline gráfico e a evolução da distribuição dos mesmos entre CPU e GPU.

23 3 As características do pipeline delinearam a arquitetura das GPUs. O fato de todos os pixeis necessitarem passar pelos mesmos módulos de execução levou as GPUs a adotarem arquiteturas paralelas. Tabela Evolução da distribuição dos estágios entre CPU e GPU. Estágio Lógica da aplicação CPU CPU CPU CPU Computações da cena CPU CPU CPU CPU Transformações CPU CPU CPU GPU Iluminação CPU CPU CPU GPU Criação dos triângulos CPU Processador gráfico Processador gráfico GPU Renderização Processador gráfico Processador gráfico Processador gráfico GPU Fonte: NVIDIA, Processamento de propósito geral em GPU O uso da GPU para processamento de propósito geral começou com a utilização de linguagens de shading, como Direct3D High Level Shader Language (HLSL) e OpenGL Shading Language (GLSL). Dessa forma, aplicações em diversas áreas foram aceleradas, no entanto exigindo que todos os algoritmos fossem adaptados para trabalhar com dados expressos em termos de vértices e texturas. Nas primeiras soluções, haviam outras limitações, como a impossibilidade de leituras e escritas em posições aleatórias da memória (NVIDIA, 009). O uso de chips e APIs gráficas neste contexto revelou um grande potencial na aceleração de algoritmos que possuam uma estrutura passível de paralelização, fazendo uso de hardware padrão presente em um grande número de computadores. O surgimento deste novo segmento resultou na criação de arquiteturas que tornam as GPUs mais apropriadas ao processamento geral e ao desvinculamento de seus ambientes de desenvolvimento das APIs gráficas tradicionais. A primeira arquitetura de GPGPU, também chamada de computação para GPU, foi criada pela empresa NVIDIA e será detalhada a seguir..4 Visão Geral da CUDA CUDA é a arquitetura de computação paralela de propósito geral que faz uso da capacidade de processamento presente nas GPUs da NVIDIA. A arquitetura CUDA provê um modelo de programação escalável baseado em três conceitos centrais: uma hierarquia de grupos de threads, memória compartilhada entre as threads e barreiras de sincronização.

24 4 Esses conceitos são expostos ao desenvolvedor como um conjunto de extensões à linguagem C (NVIDIA, 0a). A arquitetura CUDA definiu duas alterações principais na organização das GPUs: a unificação dos shaders (vertex e pixel shaders) e a criação de memória compartilhada. O componente resultante da união dos shaders é chamado stream processor (SP). Essas alterações transformaram as GPUs em dispositivos adequados ao processamento de propósito geral (HUANG; SHEN; WU, 009). A Figura ilustra a arquitetura unificada dos shaders em contraste aos shaders tradicionais. A unificação dos shaders transformou as unidades especializadas em processamento de vértices ou pixeis, por exemplo, em unidades de computação genérica interconectadas por um escalonador dinâmico que divide a carga de processamento entre as diversas unidades que compõe a GPU. Dessa forma, a utilização dos recursos de hardware foi flexibilizada. Figura Shader tradicional x shader unificado, adaptado de (IKEDA, 0). Os grupos de threads são escalonados para execução em um dos núcleos, sequencialmente ou simultaneamente, sem que seja necessário explicitar em qual núcleo o bloco será alocado. Desta forma, um mesmo programa poderá ser executado em GPUs com diferentes quantidade de núcleos e, ainda assim, fará uso de todo o poder de computação disponível. A Figura ilustra a execução de um mesmo programa em duas placas de vídeo, a da esquerda possui uma GPU com dois núcleos e a da direita com quatro núcleos. O programa em questão foi parametrizado para execução com oito blocos de threads. No primeiro caso, cada núcleo fica responsável pela execução de quatro blocos. Já no segundo caso, os oito

25 5 blocos são divididos entre os quatro núcleos disponíveis. Esse escalonamento é realizado internamente pela GPU e não é determinado pelo código da aplicação. Dessa forma, a arquitetura provê um ambiente escalável para a execução dos programas. Figura Escalabilidade da arquitetura CUDA, adaptada de (NVIDIA, 0a). A arquitetura CUDA já sofreu algumas alterações desde a sua concepção inicial. Algumas características foram sendo implementadas ao longo do tempo, a fim de aprimorar o desempenho das GPUs. Portanto, diferentes placas podem conter um conjunto de características diferentes. A fim de identificar as características presentes em um determinado dispositivo, todas as placas são categorizadas em compute capabilities identificados por um versionamento numérico. Os manuais da NVIDIA apresentam as características do hardware de acordo com essa numeração. Por exemplo, um determinada funcionalidade pode estar presente apenas nos dispositivos de compute capability.. Se a funcionalidade for descrita para o compute capability.x, significa que todos as placas com versão suportam-na, independentemente do outro algarismo..5 Arquitetura de hardware As placas de vídeo compatíveis com a tecnologia CUDA possuem um conjunto escalável de multiprocessadores, que são chamados streaming multiprocessors (SMs). Os SMs são compostos por uma série de processadores escalares (scalar processors SP), uma unidade de instrução multi thread e memória compartilhada. Os blocos de threads criados

26 6 pelo kernel são escalonados para execução em SMs com capacidade ociosa. As threads dentro de um mesmo bloco são executadas concorrentemente, pois cada thread é mapeada em um SP, com seus próprios registradores. A NVIDIA chamou essa arquitetura de SingleInstruction, Multiple-Thread (SIMT) (NVIDIA, 0a). O escalonador de threads separa-as em grupos, chamados warps. A cada ciclo de instrução um warp é selecionado para execução, então a mesma instrução é executada em todas as threads ativas neste warp (NVIDIA, 0c). Apesar de todas as threads começaram a execução no mesmo ponto do código, há a possibilidade de que haja ramificação na execução. Neste caso, nem todas as threads estarão ativas no mesmo momento, resultando na serialização da execução. Portanto, para que seja alcançada eficiência máxima na execução paralela das threads é necessário que não hajam ramificações no fluxo de execução (branch divergence) dentro de um mesmo warp (HAN; ABDELRAHMAN, 0). A Figura 3 apresenta três casos típicos onde ocorre a divergência no fluxo de execução. Na situação (a), o incremento executado dentro do bloco condicional faz com que os SPs destinados às threads que não executam o incremento fiquem inativos por alguns ciclos. O cenário (b) pode ser interpretado como duas instruções condicionais na sequência, com as mesmas implicações do exemplo anterior. No terceiro caso, o número de iterações executadas no laço pode diferir para cada thread. A diferença no número de iterações do laço para cada thread resultará que os SPs alocados para as threads com menor número de iterações ficarão inativos, enquanto os outros SPs executam as últimas iterações para as outras threads do mesmo warp (HAN; ABDELRAHMAN, 0). Figura 3 Cenários comuns de branch divergence, adaptada de (HAN; ABDELRAHMAN, 0). Esta arquitetura criada pela NVIDIA é similar às arquiteturas SIMD presentes em diversas CPUs, no entanto, existem diferenças importantes (REN et al. 00). Nas arquiteturas SIMD, diversos elementos de dados são salvos em um registrador. A largura dos

27 7 registradores, que determina o nível de paralelismo em nível de instrução, é exposta ao software. Na arquitetura SIMT, por outro lado, o paralelismo se dá pela execução de diversas threads que podem executar trechos de código distintos (NVIDIA, 0c). O comportamento específico da arquitetura SIMT pode ser ignorado pelo programador a fim de obter-se uma implementação meramente funcional de determinado algoritmo, mas através da adequação da implementação às características próprias do hardware (GPU) é possível obter maiores ganhos de desempenho. Analogamente, nas arquiteturas tradicionais é possível ignorar a largura das linhas de cache e, ainda assim, obter implementações funcionais. No entanto, quando almeja-se obter picos de desempenho essa informação precisa ser considerada (NVIDIA, 0c)..6 Modelo de programação O modelo de programação do CUDA permite que o programador crie um grande número de threads que executarão código escalar, ou seja, cada thread analisada isoladamente contém código que será executado sequencialmente, sem nenhum nível de paralelismo. O modelo de programação criado pela NVIDIA possibilita aos desenvolvedores criar aplicações paralelas com certo grau de facilidade, mesmo aqueles que não possuem grande familiaridade com arquiteturas paralelas (BAKHODA et al., 009). As características do modelo de programação são expostas ao programador através de uma extensão da linguagem de programação ANSI C (American National Standards Institute). Os três conceitos chave desse modelo são descritos nas subseções seguintes: kernel, hierarquia de threads e hierarquia de memória..6. Função Kernel A extensão da linguagem C criada pela NVIDIA possibilita a criação de funções que serão executadas na GPU. Para tanto, existem três palavras-chave: global, device e host. A primeira delas específica uma função que será executada na GPU, mas será chamada da CPU. Uma função com esta característica é chamada de kernel e cabe ao programador especificar quantas vezes esta função deve ser executada paralelamente. Para tanto, na chamada do kernel é definido o tamanho do grid, ou seja, a quantidade de blocos de threads (NVIDIA, 0). Na Listagem, a linha um contém o protótipo com a declaração de um kernel e a linha dois a chamada do kernel, com a especificação dos parâmetros de execução.

28 8 global kernel_function(char *buffer); kernel_function<<<dimgrid,dimblock,0,stream>>>(buffer); Listagem Declaração e chamada de um kernel. A palavra-chave device, por outro lado, declara uma função que será executada pela GPU e poderá ser invocada somente por código executado na própria GPU. Já a palavrachave host declara funções convencionais, ou seja, que são chamadas e executadas pela CPU. host é o qualificador padrão na declaração de funções, portanto, não precisa estar explícito no protótipo da função..6. Hierarquia de threads A organização das threads se dá na forma de blocos com uma, duas ou três dimensões. Esse arranjo torna simples a execução de cálculos em elementos de vetores, matrizes ou volumes. A identificação da thread que está sendo executada é possível através dos índices que identificam a posição da thread dentro do bloco. Os índices são disponibilizados ao programador através da variável tridimensional threadidx que contém três campos de inteiros sem sinal: x, y, z. Os blocos contém grupos de threads que são organizados em um grid, que também pode ter até três dimensões. O tamanho do grid é determinado a partir da quantidade de dados a serem manipulados ou pela quantidade de processadores. Os blocos são identificados dentro do grid de mesma forma que as threads dentro de um bloco. Para tanto, existe a variável blockidx, do tipo uint3. Já o tamanho dos blocos, ou seja, a quantidade de threads pode ser obtido através da variável blockdim. As variáveis threadidx, blockidx e blockdim são chamadas built-in, ou seja, elas são automaticamente acessíveis dentro do kernel, mesmo sem terem sido explicitamente declaradas. A execução dos blocos de threads poderá ocorrer em qualquer ordem, serialmente ou paralelamente. Portanto, a operação executada em um bloco não pode depender de resultados obtidos em outros blocos. Essa característica possibilita a escalabilidade do código, de forma a utilizar diferentes quantidades de núcleos de processamento disponíveis (NVIDIA, 0a). As threads que residem no mesmo bloco são executadas no mesmo SM podendo cooperar entre si através do compartilhamento de dados (pela memória compartilhada) e sincronização da execução com funções intrínsecas que servem como barreiras na execução,

29 9 de forma que a execução prossiga apenas quando todas as threads tenham finalizado a execução de uma determinada sequência de instruções. AFigura 4 ilustra a forma de organização hierárquica das threads. Figura 4 Organização das threads, adaptada de (NVIDIA, 0a).6.3 Hierarquia de memória CUDA expõe seu modelo de memória, que é composto por diferentes espaços de memória, tornando necessário ao desenvolvedor conhecer a arquitetura e definir onde cada conjunto de dados da aplicação deve residir. A correta utilização das diferentes memórias presentes na placa de vídeo, geralmente, tem implicação direta no desempenho do aplicativo. A Tabela apresenta um visão geral das memórias disponíveis na arquitetura CUDA. Pode-se observar que as memórias mais abundantes possuem uma latência elevada por estarem localizadas fora do chip. A quinta coluna da tabela define que as memórias de constantes e de texturas possuem acesso somente de leitura, ou seja, é possível escrever nestas memórias apenas através de código executado na CPU. A subseção seguinte apresenta um detalhamento de cada uma dessas memórias. O fluxo dos dados na aplicação geralmente segue o seguinte padrão: inicialmente os dados são copiados da memória RAM (random access memory) do computador (host) para a memória global da GPU (device), através do barramento Peripheral Component Interconnect Express (PCIe). Após essa cópia os dados já estão acessíveis às threads, no entanto, é comum realizar a transferência da memória global para a memória compartilhada de um SM, de forma a minimizar a quantidade de acessos à memória global. Dessa forma, a memória compartilhada é utilizada como um cache entre a memória global e o aplicativo, para reduzir os efeitos da alta latência no acesso a memória global.

30 30 Tabela Características dos espaços de memória na arquitetura CUDA séries G80 e G00. Memória Localização Tamanho Latência Somente leitura Escopo Registradores SM até 64 kb por SM ~ 0 ciclos não thread Local Placa de vídeo depende da global ciclos não thread Compartilhada SM 6 kb por SM >= 4 ciclos não Todas as threads em um bloco Global Placa de vídeo até 04 MB ciclos não Todas as threads + host Constante Placa de vídeo 64 kb ciclos sim Todas as threads + host sim Todas as threads + host Placa de depende da ciclos vídeo3 global Fonte: Adaptado de NVIDIA, 0b e Conrad, 00. Textura Após esta etapa, as threads manipulam os dados que estão na memória compartilhada, utilizando os registradores para armazenar variáveis de controle e resultados intermediários. Ao final do processamento, cada thread escreve o resultado da sua execução na memória global, a fim de tornar acessível ao host os resultados obtidos. Por fim, o host copia os resultados que estão na memória global de volta para a memória do computador. Figura 5 Fluxo típico de uma aplicação CUDA. Esta memória possui cache nos dispositivos.x. Esta memória possui cache em todos os dispositivos. 3 Esta memória possui cache em todos os dispositivos.

31 3.7 Detalhamento dos espaços de memória A seguir serão apresentados os detalhes relevantes de cada memória..7. Registradores e memória local Os registradores são utilizados para armazenar as variáveis automáticas (também chamadas de variáveis locais). Se não houver espaço suficiente, o compilador alocará as variáveis na memória local. Dessa forma, estruturas ou vetores (automáticos) grandes possivelmente serão alocados na memória local. Como a memória local está localizada fora do chip e não possui cache (em dispositivos.x), apresenta tempo acesso elevado (NVIDIA, 0b). A memória local é apenas uma abstração sobre a memória global, com escopo limitado a cada thread (IKEDA, 0). Portanto, a quantidade e o tamanho das variáveis automáticas podem influenciar diretamente o desempenho do aplicativo..7. Memória compartilhada A memória compartilhada está localizada dentro de cada multiprocessador, por isso, possui latência cerca de cem vezes menor do que a memória global ou local, porém o tamanho total desta memória é reduzido (NVIDIA, 0b). A memória compartilhada pode ser utilizada como uma memória cache explicitamente gerenciada, ou seja, cabe ao programador utilizar esse recurso para minimizar a quantidade de acessos a memória global. A memória compartilhada é organizada em bancos, ou seja, módulos que podem ser acessados simultaneamente, a fim de obter uma alta largura de banda. Essa arquitetura permite que diversas requisições, que acessem endereços localizados em diferentes bancos, possam ser atendidas ao mesmo tempo. Por outro lado, se uma requisição de acesso a memória contiver acessos em endereços localizados no mesmo banco haverá um conflito de acesso. Nessa situação, os acessos serão separados em requisições consecutivas separadas para que não contenham nenhum conflito (NVIDIA, 0a). A ocorrência de conflitos se dá quando mais de uma thread pertencente ao mesmo half-warp4 solicitam acesso a posições de memória que localizam-se em um mesmo banco. Há uma exceção no caso de todas as threads de um half-warp executarem uma leitura no mesmo endereço, neste caso o conteúdo lido é disponibilizado para todas as threads através de um broadcast. Em dispositivos com compute capability.x há também a possibilidade de 4 Half-warp é um grupo de threads, com metade do tamanho de um warp. Em dispositivos com compute capability.x, o half-warp é menor unidade escalonada pelo SM. Já em dispositivos com compute capability.x a menor unidade escalonada é o próprio warp.

32 3 multicast, onde o conteúdo lido é disponibilizado para um grupo de threads, mas não necessariamente para todas (NVIDIA, 0b)..7.3 Memória global A memória global está localizada na placa de vídeo, no entanto, não sendo integrada ao chip da GPU, possui alta latência no acesso. Esta memória pode ser acessada através de transações de 3, 64 ou 8 bytes, alinhadas. Isto é, o endereço do primeiro elemento manipulado precisa ser um múltiplo do tamanho do segmento (NVIDIA, 0a). As requisições de acesso à memória global efetuadas por um half-warp (em dispositivos com compute capability.x) ou por um warp (em dispositivos com compute capability.x) são combinadas resultando na menor quantidade de transações possível, que obedeça as regras de alinhamento impostas pela arquitetura de hardware (NVIDIA, 0b). As regras que definem o agrupamento dos acessos à memória global em transações variam entre dispositivos com diferentes compute capabilities. Inicialmente, a arquitetura da GPU impunha restrições mais severas no padrão de acesso que resultava na combinação de vários acessos em uma transação. Entretanto, as placas de vídeo mais recentes, que possuem compute capability.x, apresentam avanços nesse quesito. A Figura 6 ilustra padrões de acesso que permitem o acesso coalescido, ou seja, o acesso a várias posições de memória em apenas uma transação. Desta forma, os efeitos da latência de acesso são diluídos. A figura (a) exemplifica o acesso coalescido a variáveis float de quatro bytes. A figura (b) ilustra o acesso coalescido por um warp divergente, ou seja, neste caso nem todas as threads acessam as respectivas variáveis. Figura 6 Padrões de acesso coalescido (CONRAD, 00). A Figura 7, por outro lado, exemplifica padrões de acesso que não possibilitam o acesso coalescido. A figura (a) possui um padrão de acesso não sequencial, ou seja, as

33 33 threads não acessam as suas respectivas posições. Já a figura (b) apresenta um padrão de acesso sequencial. No entanto, o acesso é desalinhado o que impossibilita o coalescing. Figura 7 Acesso não coalescido (CONRAD, 00). Uma característica dos dispositivos com compute capability.x que pode amenizar o impacto da alta latência no acesso a memória global é a presença de dois níveis de cache (cache L e L) entre o SM e a memória global. O cache L é composto de linhas de 8 bytes que mapeiam segmentos alinhados na memória global. Já o cache L é composto por linhas de 3 bytes. O tamanho das linhas determinam o tamanho da transação que será usada para acessar os dados através do cache. Em certas circunstâncias pode ser vantajoso utilizar apenas o cache L, por exemplo, quando os acessos são dispersos na memória a utilização de cache com linhas mais estreitas resulta numa menor quantidade de leituras ou escritas desnecessárias. Por esse motivo, o compilador possui um parâmetro que permite definir se os acessos a memória global utilizarão os caches L e L ou apenas o L (NVIDIA, 0a)..7.4 Memória de textura e superfície A memória de textura ou superfície está localizada na memória da placa de vídeo e possui cache otimizado para acesso a dados que apresentem localidade espacial em duas dimensões, ou seja, dados localizados em posições próximas. Além disso, esse espaço de memória é projetado de forma a obter fluxos de leitura com latência constante. Dessa forma, uma leitura do cache reduz a largura de banda demandada, mas a latência se mantém constante (NVIDIA, 0a).

34 34 Quando um warp necessita de um dado que está presente no cache há um ganho significativo no tempo de leitura, caso o dado não esteja disponível no cache o tempo de acesso será o mesmo de uma leitura na memória global convencional. A memória de textura pode ser escrita a partir do host, mas do ponto de vista da GPU é uma memória somente de leitura..7.5 Memória de constantes A memória de constantes está localizada no dispositivo e possui memória cache. Possui acesso somente de leitura pela GPU. Além de ser usada explicitamente, em dispositivos com compute capability.x esta memória pode ser utilizada pelo compilador através de instruções específicas (NVIDIA, 0a).

35 35 3 CODIFICAÇÃO DE VÍDEO Um codificador de vídeo transforma o vídeo de sua forma original em uma representação comprimida, de forma a permitir uma utilização mais eficiente de recursos como largura de banda (nos sistemas de comunicação) e espaço (nos sistemas de armazenamento). A utilização do vídeo codificado requer um decodificador, que é o sistema capaz de realizar a conversão inversa, a fim de obter o vídeo na sua forma natural. O par codificador/decodificador é o que se chama codec (RICHARDSON, 00). 3. Vídeo digital O vídeo digital baseia-se na utilização de dados amostrados temporalmente e espacialmente. A partir da amostragem, obtém-se uma matriz retangular com valores que representam a informação visual que é composta por três componentes, devido às características fisiológicas do sistema visual humano (GONZALEZ, 000). A forma de representação das três componentes é chamado espaço de cores. Existem diversos espaços empregados em diferentes aplicações. Os monitores de vídeo utilizam o RGB, baseado nas componentes vermelha, verde e azul. Já os sistemas de televisão e os codificadores de vídeo utilizam o YCbCr, que define a luminância (Y), a crominância azul (Cb) e a crominância vermelha (Cr) (SHI; SUN, 008). A utilização do espaço de cores YCbCr associado com a subamostragem das crominâncias é realizada através de padrões de amostragem bem estabelecidos, como 4:4:4, 4:: e 4::0. Na amostragem 4:4:4 as crominâncias são mantidas intactas, portanto, todos os pixeis possuem uma amostra de cada componente (Y, Cb e Cr). No caso 4::, a amostragem das crominâncias possui a metade da resolução no sentido horizontal, ou seja, para cada quatro amostras de luminância existem duas amostras de cada crominância. Por fim, o formato 4::0 reduz a resolução tanto horizontalmente quanto verticalmente, ou seja, para cada quatro amostras de luminância é utilizada apenas uma amostra de cada crominância, obtendo 50% menos bits na representação, se comparado com o formato 4:4:4 (RICHARDSON, 003). A subamostragem é amplamente utilizada nos codificadores atuais, devido à redução do espaço de informação ocupado por esta técnica. Por exemplo, um vídeo em formato YCbCr 4::0 obtém uma taxa de compressão de 50% em relação a um vídeo em RGB ou YCbCr 4:4:4 com perdas de qualidade pouco significativas (AGOSTINI, 007).

36 36 3. Compressão de vídeo As técnicas de compressão com perdas são amplamente utilizadas nos codificadores de vídeo atuais, de forma a explorar as limitações do sistema de visão humano. Além disso, o olho humano possui sensibilidade diferenciada em relação a diferentes componentes ou características da imagem (GONZALEZ, 000). Entretanto, a representação digital de vídeos apresenta uma enorme quantidade de dados redundantes que possibilita a utilização de técnicas de codificação preditiva sem perdas. Os altos níveis de compactação obtidos pelos codecs atuais são possíveis com a combinação destas técnicas (com e sem perdas) (DINIZ, 009). Um codificador de vídeo, de forma geral, é composto por três partes principais: módulo temporal, módulo espacial e codificador de entropia. Cada um desses módulos é responsável por remover um tipo de redundância presente no vídeo (AGOSTINI, 007): a) Redundância Espacial: devida à correlação existente entre os pixeis ao longo de um quadro (por isso, chamada intraquadro). A remoção dessa redundância é realizada no domínio espacial e no domínio das frequências, pela predição intraquadro e quantização, respectivamente. A quantização é uma operação irreversível, pois gera perdas na codificação. No entanto, as perdas tendem a ser pouco significativas na qualidade visual da imagem. b) Redundância Temporal: se deve à correlação existente entre os diversos quadros (por isso, chamada interquadro) temporalmente adjacentes. Essas redundância pode ser visualizada como uma dimensão adicional da redundância espacial (GONZALEZ, 000). Esta correlação temporal é tratada pelo módulos de estimativa e compensação de movimento. c) Redundância Entrópica: relaciona-se com a probabilidade de ocorrência de determinados símbolos, sendo que quanto maior a probabilidade de ocorrência de um determinado símbolo, menos informação estará sendo codificada através dele. A codificação de entropia utiliza algoritmos de compressão sem perdas objetivando a codificação da maior quantidade de informação possível por símbolo. A entropia é a medida da quantidade média de informação codificada por símbolo (SHI; SUN, 007).

37 Introdução ao H.64 H.64 é um padrão internacional de codificação de vídeo para a indústria. É composto por um documento publicado pela ITU-T e ISO/IEC (como sendo a parte 0 do MPEG-4) que possui instruções que definem o formato do vídeo codificado. Além disso, é definido, em detalhes, o funcionamento de um decodificador capaz de decodificar o formato especificado (ITU-T, 003). Assim como em outros padrões de codificação, não são especificados os detalhes do codificador. A única restrição imposta na implementação do codificador, é que ele precisa gerar um bitstream (fluxo de vídeo codificado) conforme a especificação, de forma que possa ser decodificado corretamente por qualquer implementação do decodificador (RICHARDSON, 003). O H.64 define um conjunto de técnicas e ferramentas de compressão, o codificador pode optar por qual desses itens irá fazer uso. O padrão H.64 foi originalmente publicado em 003 e sofreu diversas revisões e atualizações desde então. Os conceitos básicos deste codec são os mesmos presentes no MPEG- e MPEG-4 Visual, no entanto, os avanços sugeridos proporcionam um aumento potencial na eficiência, qualidade e flexibilidade da compressão (RICHARDSON, 00). 3.4 Descrição do codec H.64 O codificador possui dois caminhos por onde os dados fluem: o caminho direto, através do qual é gerado a sequência de bytes que representa o vídeo codificado e o caminho de reconstrução do vídeo, através do qual o codificador monta os quadros decodificados a serem usados como referência. Inicialmente, cada macrobloco5 do quadro original a ser codificado é subtraído de um macrobloco de referência obtido pela predição intraquadro ou pela compensação/estimativa de movimento. Os macroblocos de referência utilizados são oriundos de quadros reconstruídos pelo caminho de reconstrução, que executa as operações identicamente a um decodificador (RICHARDSON, 003). Os macroblocos de diferenças (geralmente chamados de macroblocos de resíduos) são processados pelos módulos de transformadas e quantização. Os coeficientes quantizados e as informações de controle, que indicam as decisões tomadas pelo codificador, são repassadas ao codificador de entropia que irá reduzir o nível de redundância entrópica do fluxo de bits de saída (bitstream). Por fim, o vídeo codificado será colocado dentro de pacotes 5 Macrobloco é um bloco de 6x6 pixeis.

38 38 padronizados, referenciados como NAL (Network Abstraction Layer) (RICHARDSON, 003). As técnicas de compressão baseadas em predição de blocos da imagem fazem uso de blocos da vizinhança (temporal ou espacial) que foram codificados anteriormente ao bloco atual. Tanto o codificador quanto o decodificador executam o procedimento de compensação, de forma que o codificador utilize como quadro de referência o mesmo resultado que será obtido pelo decodificador. Portanto, o resultado quantizado será processado pelo bloco de quantização inversa e transformadas inversas. O resultado desta etapa será somado ao resultado da predição intraquadro ou interquadro e filtrado (para diminuir os efeitos do particionamento da imagem em blocos) e então formará a próxima imagem de referência, ou seja, uma versão decodificada do bloco original (RICHARDSON, 003). A Figura 8 apresenta os blocos constituintes do codificador H.64. Figura 8 Estrutura do codificador H.64 (REDIESS, 006) Predição intraquadro A predição intraquadro tem por objetivo diminuir a redundância espacial dentro um quadro. Sua característica principal é permitir a compressão de dados de cada quadro de forma auto contida, ou seja, cada quadro da sequência de vídeo pode ser processado de forma independente de todos os demais. Este procedimento é aplicado a todos elementos dos macroblocos no domínio espacial (AGOSTINI, 007). O padrão H.64 define a aplicação da predição intraquadro nos componentes de luminância e crominância dos macroblocos I (Intra), resultando em macroblocos preditos com base em amostras reconstruídas, ou seja, que já percorreram todo o caminho de reconstrução

39 39 do codificador. O resultado desta predição é subtraído do macrobloco original a fim de gerar um macrobloco de resíduos a serem codificados. Segundo a norma H.64, existem dois tipos de blocos I: de tamanho 4x4 e 6x6. No primeiro caso o conjunto de 6x6 amostras é processado separadamente em blocos de 4x4. Já no segundo caso, o macrobloco é tratado sem divisões. Para cara tipo de macrobloco I, existem vários modos de predição que visam atacar determinados padrões espaciais no quadro de vídeo. Por exemplo, as Figuras 9 e 0, apresentam os quatro modos de predição para macroblocos I 6x6 e os nove modos de predição para macroblocos I 4x4, respectivamente (RICHARDSON, 003). Figura 9 Modos de predição para blocos 6x6 de luminância. (AGOSTINI, 007) As crominâncias são processadas em blocos 8x8 e existem quatro modos de predição possíveis. No entanto, as duas crominâncias sempre utilizam o mesmo modo (RICHARDSON, 003). A decisão de qual modo de predição será empregado em cada macrobloco fica a cargo do codificador. Existem duas abordagens para a tomada desta decisão: algoritmos de busca completa (que calculam todos os modos possíveis a fim de encontrar qual fornece a melhor eficiência na compressão) e algoritmos rápidos (que baseiam-se em alguma heurística, usando informação do vídeo a ser codificado, de forma a diminuir a complexidade da decisão) (AGOSTINI, 007).

40 40 Figura 0 Modos de predição para blocos 4x4 de luminância (AGOSTINI, 007) Transformadas diretas e inversas A codificação por transformadas é uma técnica de compressão que explora a correlação entre os pixeis de uma imagem, sendo empregada tanto em codificação de imagens quanto codificação de vídeo. Este estágio do codificador converte blocos da imagem de entrada ou de resíduos da predição em outro domínio. O domínio para o qual os dados de entrada são convertidos deve conter a informação original separada em componentes descorrelacionadas e com a maior parte da energia do sinal concentrada em um pequeno número de componentes. Além disso, é necessário que a transformada seja reversível, de forma que seja possível voltar à representação original. A transformada adotada na maior parte dos codecs é a DCT bidimensional (SHI; SUN, 008). O padrão H.64 define a utilização de duas transformadas: DCT e Transformada de Hadamard. O codificador H.64 transforma e quantiza os blocos de coeficientes residuais. A transformada utilizada é uma versão aproximada da DCT, chamada core transform. Após esta etapa, em certos casos, é empregada a Transformada de Hadamard aos coeficientes DC6 obtidos na etapa anterior (RICHARDSON, 003). As seções seguintes apresentarão os detalhes de cada uma dessas transformadas. 6 Coeficientes DC são aqueles que possuem frequência zero.

41 Transformada discreta de cossenos A DCT é uma transformada derivada da Transformada de Fourier cujo objetivo é converter um bloco de dados de entrada para o domínio das frequências. A equação define a DCT (RICHARDSON, 003). Y =A X AT () Onde Y é a matriz de saída X é a matriz de entrada A é a matriz de coeficientes da transformada AT é a matriz A transposta A matriz A é definida pela Equação. Aij =C i cos j i n () Onde C i =0 = n (3) (4) C i 0 = n Onde i e j representam a posição do elemento na matriz (linha e coluna, respectivamente) e n representa o número de linhas ou colunas do bloco. A partir das Equações, 3 e 4 obtém-se a seguinte matriz de coeficientes para aplicar a transformada em blocos 4x4: A= [ cos 0 cos 8 cos 8 3 cos 8 cos 0 3 cos 8 6 cos 8 9 cos 8 cos 0 5 cos 8 0 cos 8 5 cos 8 cos 0 7 cos 8 4 cos 8 cos 8 ] (5) A Figura exemplifica o funcionamento desta transformada. É possível notar que o bloco resultante (b) possui as componentes mais significativas concentradas na parte superior esquerda do bloco.

42 4 Figura Bloco de entrada (a) e resultado da DCT (b) (RICHARDSON, 003). Como pode-se observar, implementações dessa transformada requerem o uso de aproximações de fatores irracionais. Se forem adotadas diferentes aproximações no codificador e no decodificador, pode haver uma certa discrepância entre predições usadas como referência, resultando distorção na saída do processo de decodificação. Padronizações anteriores, como o MPEG- ou MPEG-4 adotaram diferentes medidas para minimizar o impacto dessas aproximações. No entanto, o H.64 (e outros codecs recentes) abordaram esse problema definindo um algoritmo adequado à implementação com aritmética inteira com precisão limitada, de forma a eliminar a necessidade da utilização de valores aproximados. Além disso, a implementação das transformadas em aritmética inteira contribui para a diminuição do custo computacional das transformações (HUSEMANN et al., 00). A matriz da transformada definida em 5 pode ser reescrita da seguinte forma: [ a a a a A= b c c b a a a a c b b c ] (6) Onde a= (7) b= cos 8 (8) 3 c= cos 8 (9) Considerando-se as definições, 6, 7, 8 e 9 obtém-se:

43 43 [ ][ a a a a T b c c b Y =A X A = X a a a a c b b c a b a c a c a b a c a b a b a c ] (0) que pode ser fatorada em: Y =A X AT = C X C T E [ ] a [ ][ ] () ab Y = a ab ab b 4 ab b² 4 a ab a² ab ab b² 4 ab b² 4 () Onde significa que cada elemento da matriz C X CT é multiplicado pelo elemento correspondente na matriz E. Essa multiplicação ponto-a-ponto não é efetivamente calculada na implementação da DCT, no entanto, estes fatores de escala são compensados durante a quantização. Os fatores a e b da matriz E são aproximados para simplificar a implementação. a= (3) (4) b= 5 A DCT inversa é necessária para transformar os dados para o seu domínio original, tanto no decodificador quanto no laço de realimentação do codificador. A DCT inversa é definida pela Equação 5. X =AT Y A Onde X é a matriz recuperada Y é a matriz transformada A é a matriz de coeficientes da transformada AT é a matriz A transposta (5)

44 44 As mesmas considerações feitas na transformada direta são aplicadas à transformada inversa, de forma a obter a operação inversa equivalente, resultando na Equação 6. A multiplicação ponto-a-ponto, analogamente, será compensada na quantização inversa. [ ][ ] T X =A X A= X (6) Transformada de Hadamard O padrão H.64 define a aplicação da transformada de Hadamard aos coeficientes DC dos blocos após o cálculo da DCT, de forma aumentar a compressão em áreas homogêneas (RICHARDSON, 003). Por exemplo, um macrobloco de luminâncias (6 blocos de 4x4 amostras) resulta em um bloco 4x4 de componentes DC a serem processadas pela transformada de Hadamard. No caso de um macrobloco de crominâncias, o bloco de componentes DC é x, devido à utilização de subamostragem nas crominâncias. A Figura destaca os componentes DC dentro dos macroblocos de crominância (a) e luminância (b). Figura Macroblocos de crominância e luminância com componentes DC destacados (MAJOLO, 00). A definição matricial da transformada de Hadamard, aplicada às amostras de luminância, é apresentada na Equação 7.

45 45 [ ] [ Y L = X L ] (7) Onde XL é matriz 4x4 dos coeficientes DC resultantes da execução da DCT em um bloco de 6x6 luminâncias; YL é a matriz com os resultados obtidos pela transformada de Hadamard. Quando aplicada às amostras de crominâncias, a transformada é definida pela Equação 8. [ ] [ Y L= X C ] (8) Onde XC é a matriz com os valores DC resultantes da DCT aplicada às crominâncias YL é a matriz que contém o resultado da transformada. A equação da transformada inversa de Hadamard (para blocos 4x4 de luminâncias) é obtida através da manipulação da Equação 7, resultando em: [ ][ X L = Y L 8 ] (9) A divisão por oito na Equação 9 não é realizada no cálculo da Hadamard inversa, no entanto, é compensado durante a quantização inversa. O mesmo procedimento aplicado à Equação 8 resulta na equação para transformada inversa de Hadamard aplicada aos blocos x de crominâncias. X C= [ ] [ YC ] (0) Quantização O padrão H.64 conta com um módulo quantizador escalar. A quantização dos coeficientes obtidos pelas transformadas resulta na redução da informação e, consequentemente, na compressão dos dados. A quantização consiste, basicamente, de uma divisão por valor inteiro, de maneira a reduzir a faixa dos valores (RICHARDSON, 003).

46 46 A equação básica que define a quantização é: FQ ij =round X ij Qstep () Onde FQ é o resultado da quantização; X é o valor a ser quantizado; Qstep é o passo de quantização; round é uma função que aproxima o valor para o inteiro mais próximo. O parâmetro Qstep determina a intensidade da quantização, ou seja, quanto maior o Qstep maior a compressão atingida e, consequentemente, maior a perda de informação gerada no arredondamento. A determinação do valor do Qstep é um passo importante na configuração do codificador (MAJOLO, 00). A determinação do Qstep é realizada indiretamente através de uma tabela com 5 valores que podem ser assumidos pelo Qstep, que são indexados pelo Quantization Parameter (QP). A relação entre o Qstep e QP é a seguinte: para cada incremento de seis unidades do QP, o Qstep é multiplicado por dois. Essa relação é apresentada na Tabela 3. A utilização desta tabela foi adotada a fim de evitar a necessidade de operações custosas como, cálculos com ponto flutuante e divisões (RICHARDSON, 003). Tabela 3 Passos de quantização. QP 0 3 Qstep 0,65 0,6875 0,85 0,875 4 QP Qstep ,5,5,37,6,75,5, Fonte: RICHARDSON, 003 Como foi mencionado na subseção sobre a transformada DCT, uma multiplicação escalar oriunda daquela transformada não é implementada, precisando ser compensada durante a quantização. Essa compensação é feita através da variável Post-Scaling Factor (PF), definida pela Tabela 4, resultando na Equação. As variáveis a e b são definidas nas Equações 3 e 4. FQ ij =round X ij PF Qstep ()

47 47 Tabela 4 Valores de PF para cada posição. Posição (i, j) (0,0), (,0), (0,) e (,) (,), (,3), (3,) e (3,3) Outras PF a² b²/4 ab/ Fonte: RICHARDSON, 003. Para fins de substituir divisões por deslocamento de bits, o termo PF / Qstep na Equação pode ser substituído por: PF MF = qbits Qstep (3) Onde MF é o fator de multiplicação definido na Tabela 5; qbits é definido por QP 6 sendo floor a função que realiza o arredondamento para baixo. qbits=5 floor (4) A equação final, em aritmética inteira, é expressa por: FQ ij = X ij MF f qbits (5) sign FQ ij =sign X ij (6) Onde f é qbits/3 para blocos da predição intra e qbits/6 para blocos da predição inter; >> é o descolocamento binário para direita; sign é a função que acessa o sinal do número. Tabela 5 Fator de multiplicação. Posições Posições QP (0,0), (,0), (,) e (0,) (,), (,3), (3,) e (3,3) Outras posições Fonte: RICHARDSON, 003. Por fim, apresenta-se a definição da quantização inversa, que serve para recuperar o valor anterior. Como a quantização é um procedimento que causa perdas, o valor recuperado é uma aproximação do valor original, que depende do parâmetro QP. Este parâmetro terá o

48 48 mesmo valor na quantização direta e inversa. A equação da quantização inversa para os componentes AC7 de luminâncias é definida em 7. X ' ij =FQ ij V ij QP /6 (7) Onde X'ij é o valor recuperado; FQij é o valor quantizado; Vij é uma constante definida em 8; QP é o parâmetro de quantização. V ij =Qstep PF ij 64 (8) A quantização inversa para os componentes DC é expressa pela equação 9. X ' ij =FQ ij V 0,0 floor QP /6 para QP >= X ' ij =[ FQ ij V 0,0 floor QP /6 ] QP /6 para QP < (9) Onde floor é operação que arredonda o número para baixo; >> é deslocamento binário para direita Estimativa de movimento A estimação de movimento trabalha no modelo temporal do vídeo com o objetivo de encontrar e remover dados redundantes em quadros temporalmente adjacentes, algo relativamente comuns em sequências de vídeo naturais. A partir do modelo temporal, aproveitam-se as similaridades entres os quadros baseando-se em dados previamente processados a fim de obter um quadro estimado (RICHARDSON, 00). A Figura 3 apresenta dois quadros temporalmente consecutivos no vídeo. Já a Figura 4a ilustra a similaridade entre os dois quadros através da codificação diferencial, ou seja, o quadro é obtido através da simples subtração entre os dois quadros originais. Nas figuras, o tom acinzentado predominante indica as regiões em que não há diferença entre os dois quadros, o que pode ser explorado para reduzir a quantidade de dados realmente necessários para construir a segunda imagem a partir da primeira. A utilização das técnicas de estimação de movimento possibilitam reduzir os resíduos obtidos pela codificação diferencial. A Figura 4b ilustra o resíduo obtido após a realização da estimação de movimento. 7 Coeficientes AC são aqueles que possuem frequência diferente de zero.

49 49 (a) (b) Figura 3 Quadros consecutivos de vídeo (RICHARDSON, 003). (a) (b) Figura 4 Na esquerda, o resíduo sem estimativa de movimento. Na direita, o resíduo com estimativa de movimento (RICHARDSON, 003). A obtenção da estimativa de movimento se dá pela determinação de qual bloco dos quadros de referência mais se assemelha ao macrobloco que está sendo processado, a fim de que possa-se codificar apenas a diferença entre o bloco atual e o bloco selecionado e um vetor de movimento que define a posição da região usada na predição. Este vetor é incluído no bitstream de forma a permitir ao decodificador a realização do processo inverso (compensação de movimento) (PORTO, 008). A estimação de movimento baseia-se em algoritmos de busca, que visam encontrar o bloco que possui a maior similaridade com o bloco atual (melhor casamento), e em critérios de similaridade que serão detalhados nas subseções seguintes. A Figura 5 ilustra o procedimento de estimativa de movimento, que em conjunto com a compensação de movimento constitui a predição interquadro. Segundo (PURI; CHEN; LUTHRA, 004) o codificador interquadros é o módulo que contém a maior complexidade computacional em um codificador de vídeo. O padrão H.64/AVC inovou na predição interquadro ao inserir a possibilidade de blocos de tamanho variável, interpolação de valores intermediários (atingindo resolução de

50 50 meio ou quarto de pixel) e utilização de múltiplos quadros de referência (incluindo quadros futuros) (RICHARDSON, 003). Figura 5 Predição interquadro (DINIZ, 009) Algoritmos de busca Os algoritmos de busca especificam como a busca pelo bloco com maior similaridade será realizada dentro de uma área de tamanho pré-definido chamada janela de busca. Em geral, os algoritmos mais utilizados são os baseados em blocos de pixeis (em oposição aos baseados em objetos). A escolha de um algoritmo de busca é extremamente importante, pois tem impacto significativo, tanto na eficiência da compressão, quanto na complexidade computacional do codificador (PORTO, 0). Os algoritmos de busca podem ser divididos em algoritmos ótimos e rápidos: os algoritmos ótimos obtém o vetor de movimento correspondente ao bloco com maior similaridade em relação ao bloco atual através da análise de todos os possíveis candidatos. Por outro lado, os algoritmos rápidos obtém uma diminuição do tempo de busca através de heurísticas que diminuem a quantidade de candidatos a serem analisados, ao custo de obterem um vetor de movimento subótimo (PORTO, 008). O algoritmo Full Search (FS) é um algoritmo ótimo, pois compara a similaridade de todos os possíveis blocos dentro da janela de busca. A iteração sobre todos os candidatos pode ser de diversas formas, começando no canto superior esquerdo e finalizando no canto inferior direito ou realizando uma busca em formato de espiral ao redor de uma posição central, por

51 5 exemplo. Os diferentes blocos candidatos são obtidos através do deslocamento da borda do bloco em uma amostra, conforme ilustrado na Figura 6. Figura 6 Algoritmo de busca completa (PORTO, 0) O algoritmo FS dificilmente é empregado em aplicações práticas que requerem codificação em tempo real de altas resoluções, a menos que seja utilizada uma arquitetura desenvolvida especialmente para este fim. Este algoritmo não possui dependência de dados, portanto, é possível explorar um grande nível de paralelismo (SOARES, 007). Os algoritmos rápidos tentam obter bons vetores de movimentos mesmo sem fazer uma busca exaustiva, ou seja, sem testar todos os possíveis blocos. Dentre as diversas formas de realizar a busca propostas na literatura, a seguir serão abordados dois algoritmos de interesse no contexto deste trabalho: Diamond Search (DS) e Logarithmic Search (LS). O algoritmo DS é um algoritmo rápido que realiza a busca em um formato de diamante. Este formato determina a posição dos blocos considerados candidatos dentro da janela de busca. Usualmente, esse algoritmo emprega dois padrões de busca: Large Diamond Search (LDS) e Small Diamond Search (SDS) (ZHU; MA, 000). Inicialmente a LDS compara as similaridades entre o bloco atual e nove blocos candidatos ao redor da posição central da janela de busca. Se o bloco que resultar no menor resíduo não estiver no centro do diamante, esta etapa será repetida com base em uma nova posição central localizada no melhor bloco encontrado. Este procedimento se repete até que o bloco de maior similaridade esteja na posição central. Num segundo momento, a SDS realiza um refinamento ao redor da posição determinada na etapa anterior. Para tanto, é realizada a comparação entre a similaridade da posição central e de quatro blocos vizinhos. A Figura 7

52 5 ilustra este procedimento. As posições L fazem parte do diamante grande e S do diamante pequeno. Figura 7 Large Diamond Search (LDS) e Small Diamond Search (SDS) (PORTO, 008) O algoritmo LS, inicialmente, compara o bloco atual com cinco blocos candidatos: a posição (0, 0) e quatro blocos a S pixeis da origem na horizontal e na vertical, onde S é o valor do passo inicial. Na etapa seguinte, a origem é posicionada no melhor bloco encontrado na etapa anterior e o procedimento é repetido nessa nova posição. Quando o melhor casamento ocorrer na posição central o valor do passo é dividido por dois, até que o passo chegue ao valor um. Na sequência, as oito posições ao redor do bloco anteriormente selecionado são testadas. O bloco com menor similaridade nesta etapa resulta no vetor de movimento para a realização da predição. A Figura 8 ilustra o funcionamento do algoritmo LS com o passo S valendo dois inicialmente. No exemplo dado, para cada iteração da busca o bloco com maior similaridade é destacado em negrito. Figura 8 Algoritmo de busca logarítmica (RICHARDSON, 00). A quantidade de iterações executadas na LDS depende do vídeo em questão, o que dificulta a análise do desempenho. Entretanto, o algoritmo DS diminui, em média, cerca de 50 vezes o número de blocos candidatos a terem a similaridade calculada e comparada, em relação ao algoritmo de busca completa (PORTO, 0). No padrão de busca LS ocorre a

53 53 mesma situação: o número de comparações necessárias depende da quantidade de iterações efetuadas e varia em cada caso. Uma técnica muitas vezes empregada conjuntamente a algoritmos de busca rápidos como DS e LS é a determinação de uma posição inicial para a busca diferente de (0, 0) através de vetores de movimento previamente obtidos (TOURAPIS, 00). Por exemplo, pode-se determinar a posição inicial da busca baseando-se nos vetores de movimento encontrados nos blocos adjacentes do quadro atual. Essa ideia explora a localidade espacial, ou seja, o fato de que blocos vizinhos tendem a ter movimentação semelhante. No entanto, dessa forma cria-se uma dependência de dados entre os blocos de um mesmo quadro, o que dificulta a utilização de paralelismo em nível de bloco. Uma outra alternativa é escolher a posição inicial de busca a partir de dados proveniente de quadros previamente processados, ou seja, a exploração da localidade temporal. Essa ideia baseia-se na premissa de que o mesmo bloco em quadros temporalmente adjacentes possuam movimentação semelhante. Essa abordagem cria uma dependência de dados entre os quadros, mas, possibilita o paralelismos em nível de blocos dentro de um mesmo quadro Critérios de similaridade Os critérios de similaridade são usados para determinar o grau de semelhança entre dois blocos de pixeis. Diversos critérios foram propostos na literatura: Mean Square Error (MSE), Mean Absolute Error (MAE), Sum of Absolute Differences (SAD) entre outros (RICHARDSON, 00). A Equação 30 define o cálculo do SAD, que é usualmente empregado na estimativa de movimento devido a sua simplicidade e em resultar em uma boa aproximação da energia do bloco (PORTO, 0). N N SAD= C ij Rij i =0 j=0 Onde N é o tamanho do bloco Cij é o pixel na posição (i,j) do bloco atual Rij é o pixel na posição (i,j) do bloco de referência (30)

54 Compensação de movimento A compensação de movimento tem por objetivo encontrar, a partir do vetor de movimento obtido pela estimação de movimento, os blocos mais semelhantes com o atual dentre os blocos previamente codificados para obter o bloco predito. Para tanto, a compensação de movimento necessita obter os parâmetros gerados pela estimação de movimento (AZEVEDO, 006). O vídeo será, inicialmente, reconstruído com base no quadro predito. Em seguida, serão corrigidas as diferenças entre o quadro original e o quadro estimado, utilizando o quadro residual. 3.5 Trabalhos relacionados Sprandlin et al. (009) avaliaram a viabilidade de paralelizar a implementação de referência do codificador MPEG-, utilizando a tecnologia CUDA, e obtiveram significativos ganhos de velocidade em partes específicas da implementação. No entanto, esses resultados são severamente diluídos se analisado o aplicativo como um todo. Foi destacada a importância de minimizar as transferências de dados entre a CPU e a placa de vídeo, pois a alta latência e a pequena largura de banda do barramento PCIe foram apontadas como fatores que limitaram os resultados. Chan et al. (009) demonstraram a viabilidade de implementar o algoritmo piramidal de estimação de movimento do padrão H.64 utilizando CUDA. O resultado obtido foi uma diminuição de 56 vezes no tempo gasto na execução do algoritmo, no entanto, foi utilizada uma aproximação do vetor predito a fim de eliminar interdependências que diminuiriam o nível de paralelismo alcançável. Ren et al. (00) propuseram duas implementações do módulo de predição-intra do codificador H.64 em GPU. Na primeira implementação, foram eliminados dois modos de predição a fim de alcançar um maior paralelismo em nível de blocos 4x4. A outra alternativa explora o paralelismo em nível de macrobloco. No entanto, para eliminar as dependências entre macroblocos vizinhos é necessária uma alteração no algoritmo (com consequências insignificantes na qualidade em vídeos de alta definição). Os ganhos obtidos nas duas implementações propostas ficaram em torno de cinco vezes em relação à implementação de referência. Huang, Shen e Wu (009) estudaram a utilização de CPUs multi núcleo em conjunto com GPUs, atuando como coprocessadores, para a implementação de um codificador de vídeo

55 55 H.64/SVC (extensão do H.64/AVC com técnicas de codificação escalável). Foi estudada a divisão das tarefas entre as duas arquiteturas (CPUs e GPUs) e a transição de dados entre elas. Os resultados obtidos apontaram que a execução do algoritmo de busca completa na estimativa de movimento na GPU resultou em melhor desempenho se comparado à implementação utilizando CPU multi núcleo. Cheung et al. (00) investigaram o uso de GPUs para codificação e decodificação de vídeo. Este trabalho faz uma revisão da literatura acerca da estruturação e particionamento dos módulos entre CPU e GPU. Por fim, é implementada a estimativa de movimento do H.64 na GPU, através da qual é explorado o trade-off entre os ganhos de velocidade e a qualidade obtida. Os experimentos levam a resultados de execução cerca de três vezes mais rápida com a utilização da GPU e foi destacada a importância de expor o máximo paralelismo de dados possível à GPU. Monteiro et al. (0) exploraram o uso da arquitetura CUDA no contexto da estimativa de movimento, obtendo um ganho de velocidade de 600 vezes na implementação do algoritmo de busca completa.

56 56 4 DESCRIÇÃO DO SISTEMA DESENVOLVIDO O aumento na complexidade computacional no padrão H.64 em relação aos padrões anteriores é significante. Essa característica torna desafiadora a implementação de um sistema capaz de executar a codificação em tempo real, especialmente para vídeos de alta resolução (DINIZ, 009). Inserido nesse contexto, o presente trabalho consiste na investigação da utilização de GPUs, presentes nas placas de vídeo da NVIDIA, como coprocessadores no contexto da codificação de vídeo. Para tanto, utilizou-se a tecnologia NVIDIA CUDA, apresentada no segundo capítulo deste trabalho. Um ponto importante foi a identificação dos algoritmos de codificação de vídeo que são apropriados à implementação em arquiteturas paralelas. Por isso, faz-se necessária a revisão de literatura apresentada previamente e o estudo da implementação de referência do codificador H.64. A complexidade computacional dos diversos módulos do codificador H.64 foi analisada em diversos trabalhos encontrados na literatura. Em geral, as análises consideram o tempo de processamento necessário por cada módulo, o que equivale aproximadamente ao número de operações executadas (HOROWITZ, 003). A Tabela 6 apresenta o percentual da complexidade computacional dos principais módulos do H.64, segundo a avaliação de Zhang et al. (005). Tabela 6 Complexidade dos módulos do codificador H.64. Módulo ME / MC T / Q / T- / Q- Predição intraquadro Filtro Outros Complexidade % 8,78 5,49 5,9 0,8 6,6 Fonte: ZHANG et al., 003. Pode-se notar claramente que a parcela mais significativa localiza-se na estimativa e compensação de movimento. Essas técnicas situam-se na predição interquadro, ou seja, exploram as redundâncias temporais do vídeo. Por outro lado, na exploração das redundâncias espaciais dentro de um quadro do vídeo, destacam-se as transformadas e quantização diretas e inversas (que juntas compõe o que pode ser chamado de módulo computacional) e a própria predição intraquadro. O desenvolvimento deste trabalho foi dividido em duas etapas: o estudo dos algoritmos relacionados à codificação intraquadro e codificação interquadro.

57 57 4. Codificação intraquadro A arquitetura do codificador intra é apresentada pela Figura 9, que também ilustra a relação do módulo computacional com as demais etapas do processo. Figura 9 Processo de codificação intraquadro, adaptada de (DINIZ, 009). O módulo computacional está localizado no laço de codificação intra. A predição-intra depende dos dados oriundos dos estágios T/Q/T-/Q-, o que inviabiliza a implementação de um pipeline entre estas etapas. Por este motivo o módulo computacional adiciona uma latência ao codificador intraquadro. Uma alternativa para diminuir essa latência é a exploração do paralelismo encontrado nos algoritmos de computação intra (AGOSTINI, 007). Portanto, no contexto deste trabalho, optou-se por explorar, dentre os estágios da codificação intraquadro, o paralelismo no módulo computacional. 4. Algoritmos de computação intra Os blocos de transformadas e quantização diretas e inversas em conjunto compõe o módulo computacional. Este módulo é uma das ferramentas de codificação que explora as redundâncias espaciais dentro de um quadro do vídeo. No contexto deste estudo de caso, foi implementada uma função kernel responsável por processar os 6 blocos 4x4 que compõe um macrobloco de luminâncias. A Figura 0 apresenta as etapas que são executadas sequencialmente por esta função. As três primeiras etapas fazem parte do processo de codificação e resultam na matriz de coeficientes que é fornecida ao codificador de entropia. Já as três últimas etapas fazem parte do laço de realimentação, fornecendo os macroblocos de referência a serem utilizados pela predição intra.

58 58 Figura 0 Etapas do módulo computacional. A solução proposta explora dois tipos de paralelismo. O primeiro deles se deve à paralelização das operações executadas dentro de cada algoritmo. Isto é possível devido à independência de cada posição da matriz em relação as demais. Já o segundo tipo de paralelismo refere-se a diferentes tarefas dentro do laço de codificação, mais especificamente o fornecimento de um macrobloco quantizado ao codificador de entropia enquanto o módulo computacional já está processando os próximos macroblocos. A implementação proposta organiza a execução do kernel em blocos com 6x6x threads, ou seja, os blocos tridimensionais da arquitetura CUDA foram diretamente mapeados para os macroblocos da imagem. Já as dimensões do grid, que definem a quantidade de blocos, são calculadas de acordo com o tamanho do vídeo que estiver sendo codificado. A Figura apresenta uma visão geral do funcionamento do kernel proposto. Figura Arquitetura proposta para módulo computacional usando GPUs NVIDIA (HUSEMANN et al., 0b). Um ponto importante é a minimização da quantidade de acessos à memória global devido à alta latência deste acessos. Por este motivo, a memória compartilhada, que possui acesso mais veloz, foi utilizada como uma espécie de cache. Dessa forma, cada bloco de threads quando alocado para execução em um SM copia um macrobloco da memória global. Como cada thread copia o seu respectivo elemento do macrobloco, essas cópias podem ser combinadas em um menor número de transações de acesso à memória global. Após isto, a memória global só é acessada novamente para disponibilizar os dados de saída.

PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1

PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1 PARALELIZAÇÃO DE APLICAÇÕES NA ARQUITETURA CUDA: UM ESTUDO SOBRE VETORES 1 DUTRA, Evandro Rogério Fruhling 2 ; VARINI, Andre Luis 2 ; CANAL, Ana Paula 2 1 Trabalho de Iniciação Científica _UNIFRA 2 Ciência

Leia mais

Capítulo 8 Arquitetura de Computadores Paralelos

Capítulo 8 Arquitetura de Computadores Paralelos Capítulo 8 Arquitetura de Computadores Paralelos Necessidade de máquinas com alta capacidade de computação Aumento do clock => alta dissipação de calor Velocidade limitada dos circuitos => velocidade da

Leia mais

Computação Heterogênea Programação paralela, clusters e GPUs

Computação Heterogênea Programação paralela, clusters e GPUs Computação Heterogênea Programação paralela, clusters e GPUs Profa. Dra. Denise Stringhini (ICT- Unifesp) Primeiro Encontro do Khronos Chapters Brasil Belo Horizonte, 20/09/2013 Conteúdo Computação heterogênea:

Leia mais

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora OpenGL Uma Abordagem Prática e Objetiva Marcelo Cohen Isabel Harb Manssour Novatec Editora Capítulo 1 Introdução A Computação Gráfica é uma área da Ciência da Computação que se dedica ao estudo e ao desenvolvimento

Leia mais

SSC510 Arquitetura de Computadores. 12ª aula

SSC510 Arquitetura de Computadores. 12ª aula SSC510 Arquitetura de Computadores 12ª aula EVOLUÇÃO DA ARQUITETURA INTEL PROFA. SARITA MAZZINI BRUSCHI 1 Pentium - Modelos 2 Pentium - Arquiteturas Netburst P7 Sétima geração dos processadores da arquitetura

Leia mais

LICENCIATURA EM COMPUTAÇÃO PROCESSADOR TEGRA 2

LICENCIATURA EM COMPUTAÇÃO PROCESSADOR TEGRA 2 LICENCIATURA EM COMPUTAÇÃO PROCESSADOR TEGRA 2 SANTO AMARO 2011 ANGELO RAMOS JACKELINE BARBOSA JEANDERVAL SANTOS PROCESSADOR TEGRA 2 Trabalho apresentado ao Instituto Federal de Ciências e Tecnologia da

Leia mais

Recomendação H.261 para serviços audiovisuais a taxas de transmissão p*64 kbit/s

Recomendação H.261 para serviços audiovisuais a taxas de transmissão p*64 kbit/s 1. Introdução A compressão digital de imagem tem vindo a ganhar uma importância crescente, em especial nos sistemas de transmissão, uma vez que a capacidade dos canais é normalmente limitada e muito inferior

Leia mais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias: Arquitetura de Computadores Estrutura e Funcionamento da CPU Prof. Marcos Quinet Universidade Federal Fluminense P.U.R.O. Revisão dos conceitos básicos O processador é o componente vital do sistema de

Leia mais

Auditoria de senhas em hardware paralelo com o John the Ripper O impacto das tecnologias de processamento paralelo na quebra de senhas

Auditoria de senhas em hardware paralelo com o John the Ripper O impacto das tecnologias de processamento paralelo na quebra de senhas Auditoria de senhas em hardware paralelo com o John the Ripper O impacto das tecnologias de processamento paralelo na quebra de senhas Claudio André claudio.andre@correios.net.br Motivação Seu computador

Leia mais

Gráficos e Físicos em Plataforma para Jogos

Gráficos e Físicos em Plataforma para Jogos Universidade Federal Fluminense Processadores Gráficos e Físicos em Plataforma para Jogos Grupo 7: Arthur Figueiredo Diego Knopp Lucas S. Silva Yuri Freire GPU: Início dos anos 80: As atuais GPUs são advindas

Leia mais

Codificação/Compressão de Vídeo. Tópico: Vídeo (Codificação + Compressão)

Codificação/Compressão de Vídeo. Tópico: Vídeo (Codificação + Compressão) Tópico: Vídeo (Codificação + Compressão) Um vídeo pode ser considerado como uma seqüência de imagens estáticas (quadros). Cada um desses quadros pode ser codificado usando as mesmas técnicas empregadas

Leia mais

AULA1 Introdução a Microprocessadores gerais

AULA1 Introdução a Microprocessadores gerais AULA1 Introdução a Microprocessadores gerais Disciplina: Aplicações Avançadas de Microprocessadores (AAM) Prof. Eduardo Henrique Couto ehcouto@hotmail.com 2014/1 Apresentação do Professor: Cronograma:

Leia mais

7 Processamento Paralelo

7 Processamento Paralelo 7 Processamento Paralelo Yes, of course, who has time? Who has time? But then if we do not ever take time, how can we ever have time? (The Matrix) 7.1 Introdução Classificação de Sistemas Paralelos Diversas

Leia mais

Arquitetura e Programação de GPU. Leandro Zanotto RA: 001962 Anselmo Ferreira RA: 023169 Marcelo Matsumoto RA: 085973

Arquitetura e Programação de GPU. Leandro Zanotto RA: 001962 Anselmo Ferreira RA: 023169 Marcelo Matsumoto RA: 085973 Arquitetura e Programação de GPU Leandro Zanotto RA: 001962 Anselmo Ferreira RA: 023169 Marcelo Matsumoto RA: 085973 Agenda Primeiras Placas de Vídeo Primeira GPU Arquitetura da GPU NVIDIA Arquitetura

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas de Entrada/Saída Princípios de Hardware Sistema de Entrada/Saída Visão Geral Princípios de Hardware Dispositivos de E/S Estrutura Típica do Barramento de um PC Interrupções

Leia mais

Padrões ITU-T H.261 e H.263

Padrões ITU-T H.261 e H.263 Padrões ITU-T H.261 e H.263 Acadêmicos: Orlando L. Pelosi Jr. Rodrigo Matheus da Costa Vinicius Mariano de Lima Professor: Prof. Adair Santa Catarina Vídeo Digital Vídeos são compostos por frames que contém

Leia mais

Visão Geral de Hardwares de Renderização e Ferramentas de Avaliação. Carlos Eduardo Rodrigues

Visão Geral de Hardwares de Renderização e Ferramentas de Avaliação. Carlos Eduardo Rodrigues Visão Geral de Hardwares de Renderização e Ferramentas de Avaliação Carlos Eduardo Rodrigues Motivação Os chips gráficos monolíticos da década de 80 evoluíram bastante, e hoje são denominados GPUs (Graphics

Leia mais

Bruno Pereira Evangelista. www.brunoevangelista.com

Bruno Pereira Evangelista. www.brunoevangelista.com Bruno Pereira Evangelista www.brunoevangelista.com 2 Introdução Shaders Pipeline de Renderização Evolução dos Shaders Como Programar Shaders Programando Shaders com XNA Ferramentas Conclusões 3 Durante

Leia mais

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores I. de Computadores Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de I Organização Básica B de (Parte V, Complementar)

Leia mais

Introdução as Unidades de Processamento Gráfico (GPUs) Giovane Roslindo Kuhn

Introdução as Unidades de Processamento Gráfico (GPUs) Giovane Roslindo Kuhn Introdução as Unidades de Processamento Gráfico (GPUs) Giovane Roslindo Kuhn Computação Gráfica x Realidade Consulta ao BD SELECT nome FROM Pessoa WHERE idade > 25 Sumário Pipeline Gráfico Fixo (Overview)

Leia mais

PROCESSADOR CELL BROADBAND ENGINE (MECANISMO DE BANDA LARGA)

PROCESSADOR CELL BROADBAND ENGINE (MECANISMO DE BANDA LARGA) PROCESSADOR CELL BROADBAND ENGINE (MECANISMO DE BANDA LARGA) SACCA, Juliana 1 ; KOYAMA, Julio César Hiroshi 2 ; TAMAE, Yoshio Rodrigo 3, MUZZI, Fernando Augusto Garcia 3. 1 Acadêmico do Curso de Sistemas

Leia mais

FACULDADE PITÁGORAS PRONATEC

FACULDADE PITÁGORAS PRONATEC FACULDADE PITÁGORAS PRONATEC DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos carlos@oficinadapesquisa.com.br www.oficinadapesquisa.com.br Objetivos Ao final desta apostila,

Leia mais

HARDWARE GRÁFICO. Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR

HARDWARE GRÁFICO. Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR HARDWARE GRÁFICO Adair Santa Catarina Curso de Ciência da Computação Unioeste Campus de Cascavel PR Mar/2012 Introdução Características do hardware Funcionalidades do hardware gráfico Influência da área

Leia mais

Programação Paralela Híbrida em CPU e GPU: Uma Alternativa na Busca por Desempenho

Programação Paralela Híbrida em CPU e GPU: Uma Alternativa na Busca por Desempenho 124 - Encontro Anual de Tecnologia da Informação Programação Paralela Híbrida em CPU e GPU: Uma Alternativa na Busca por Desempenho André Luís Stefanello¹, Crístian Cleder Machado1, Dioni da Rosa¹, Maurício

Leia mais

Utilização. de Shaders de efeitos realistas para jogos. Bruno Pereira Evangelista. Pontifícia Universidade Católica de Minas Gerais

Utilização. de Shaders de efeitos realistas para jogos. Bruno Pereira Evangelista. Pontifícia Universidade Católica de Minas Gerais Utilização de Shaders para criação de efeitos realistas para jogos Bruno Pereira Evangelista Pontifícia Universidade Católica de Minas Gerais Sumário 2/48 Apresentação pessoal Introdução Pipeline de renderização

Leia mais

H.264: UMA BREVE DISCUSSÃO ACERCA DA CODIFICAÇÃO DE VÍDEO

H.264: UMA BREVE DISCUSSÃO ACERCA DA CODIFICAÇÃO DE VÍDEO H.264: UMA BREVE DISCUSSÃO ACERCA DA CODIFICAÇÃO DE VÍDEO Eduardo Viana Rezende eduardo.viana@superig.com.br Centro Universitário de Belo Horizonte Av. Prof. Mário Werneck, 1685 - Estoril CEP: 30455-610

Leia mais

Arquitetura de Computadores. Arquitetura de Computadores 1

Arquitetura de Computadores. Arquitetura de Computadores 1 Computadores Computadores 1 Introdução Componentes: Processador; UC; Registradores; ALU s, FPU s, etc. Memória (Sistema de armazenamento de informações; Dispositivo de entrada e saída. Computadores 2 Introdução

Leia mais

UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO

UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO PROGRAMAÇÃO DE PROPÓSITO GERAL EM PLACAS GRÁFICAS NVIDIA UTILIZANDO CUDA FELIPE PORTO MEISTER JUNHO 2009 i UNIVERSIDADE

Leia mais

Introdução ao Processador CELL BE

Introdução ao Processador CELL BE 1 Introdução ao Processador CELL BE por: José Ricardo de Oliveira Damico 17 / Maio / 2007 São Paulo SP 2 SUMÁRIO LISTA DE FIGURAS 3 RESUMO 4 1.) INTRODUÇÃO 5 1.1) O que é? 5 2.) Utilização 5 3.) FUNCIONAMENTO

Leia mais

PAPEL BRANCO. Padrão de compactação de vídeo H.264. Novas possibilidades em vigilância por vídeo.

PAPEL BRANCO. Padrão de compactação de vídeo H.264. Novas possibilidades em vigilância por vídeo. PAPEL BRANCO Padrão de compactação de vídeo H.264. Novas possibilidades em vigilância por vídeo. Índice 1. Introdução 3 2. Desenvolvimento do H.264 3 3. Como funciona a compactação de vídeo 4 4. Perfis

Leia mais

LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU

LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU CURITIBA 2009 LUIS HENRIQUE ALVES LOURENÇO PROCESSAMENTO PARALELO DE ÁUDIO EM GPU Trabalho de Conclusão de Curso apresentado como requisito

Leia mais

4 Computação Paralela 4.1. Introdução

4 Computação Paralela 4.1. Introdução 4 Computação Paralela 4.1. Introdução Nos últimos anos observa-se uma tendência cada vez maior do aumento da demanda computacional na resolução de grandes problemas. Exemplos de aplicações que exigem alto

Leia mais

Um Tutorial sobre GPUs

Um Tutorial sobre GPUs Um Tutorial sobre GPUs Silvia Esparrachiari e Victor H. P. Gomes Instituto de Matemática e Estatística Universidade de São Paulo (USP) São Paulo SP Brasil {silviaeg,vhpgomes}@ime.usp.br Abstract. The present

Leia mais

29/3/2011. Primeira unidade de execução (pipe U): unidade de processamento completa, capaz de processar qualquer instrução;

29/3/2011. Primeira unidade de execução (pipe U): unidade de processamento completa, capaz de processar qualquer instrução; Em 1993, foi lançada a primeira versão do processador Pentium, que operava a 60 MHz Além do uso otimizado da memória cache (tecnologia já amadurecida) e da multiplicação do clock, o Pentium passou a utilizar

Leia mais

Introdução às arquiteturas paralelas e taxonomia de Flynn

Introdução às arquiteturas paralelas e taxonomia de Flynn Introdução às arquiteturas paralelas e taxonomia de Flynn OBJETIVO: definir computação paralela; o modelo de computação paralela desempenhada por computadores paralelos; e exemplos de uso da arquitetura

Leia mais

Arquitetura de Computadores. Professor: Vilson Heck Junior

Arquitetura de Computadores. Professor: Vilson Heck Junior Arquitetura de Computadores Professor: Vilson Heck Junior Agenda Conceitos Estrutura Funcionamento Arquitetura Tipos Atividades Barramentos Conceitos Como já discutimos, os principais componentes de um

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 6 - ARQUITETURAS AVANÇADAS DE COMPUTADORES 1. INTRODUÇÃO As arquiteturas dos processadores têm evoluído ao longo dos anos, e junto com ela o conceito de arquitetura avançada tem se modificado. Nos

Leia mais

Alcides Carneiro de Araújo Neto. Comparação Sequência-Família em GPU

Alcides Carneiro de Araújo Neto. Comparação Sequência-Família em GPU Alcides Carneiro de Araújo Neto Comparação Sequência-Família em GPU Campo Grande MS 2014 Alcides Carneiro de Araújo Neto Comparação Sequência-Família em GPU Dissertação de Mestrado apresentada à Faculdade

Leia mais

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 1 2 Revisão de Hardware 2.1 Hardware O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware 2.1.1 Processador O Processador

Leia mais

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva Arquitetura de Computadores - Arquitetura RISC por Helcio Wagner da Silva Introdução RISC = Reduced Instruction Set Computer Elementos básicos: Grande número de registradores de propósito geral ou uso

Leia mais

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 6 - ALGORÍTIMOS PARALELOS MPI - Parallel Virtual Machine e PVM - Parallel Virtual Machine 1. INTRODUÇÃO Inicialmente é necessário conceber alguns conceitos para entendimento dos algoritmos paralelos:

Leia mais

Análise de desempenho e eficiência energética de aceleradores NVIDIA Kepler

Análise de desempenho e eficiência energética de aceleradores NVIDIA Kepler Análise de desempenho e eficiência energética de aceleradores NVIDIA Kepler Emilio Hoffmann, Bruno M. Muenchen, Taís T. Siqueira, Edson L. Padoin e Philippe O. A. Navaux Universidade Regional do Noroeste

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 3 ARQUITETURA DE VON NEUMANN E DESEMPENHO DE COMPUTADORES Prof. Luiz Gustavo A. Martins Tipos de Arquitetura Arquitetura de von Neumann: Conceito de programa armazenado; Dados

Leia mais

- Aula 1 - ARQUITETURA DE COMPUTADORES

- Aula 1 - ARQUITETURA DE COMPUTADORES - Aula 1 - ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza

Leia mais

BARRAMENTO DO SISTEMA

BARRAMENTO DO SISTEMA BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade

Leia mais

Organização de Computadores 2005/2006 Processamento Paralelo

Organização de Computadores 2005/2006 Processamento Paralelo Organização de Computadores 2005/2006 Processamento Paralelo Paulo Ferreira paf a dei.isep.ipp.pt Maio de 2006 Introdução 2 Porquê?...........................................................................................

Leia mais

INTRODUÇÃO AO CUDA UTILIZANDO MÉTODOS NUMÉRICOS

INTRODUÇÃO AO CUDA UTILIZANDO MÉTODOS NUMÉRICOS CENTRO UNIVERSITÁRIO VILA VELHA CURSO DE CIÊNCIA DA COMPUTAÇÃO Kassiane de Almeida Pretti Rocha Luciano José Varejão Fassarella Filho INTRODUÇÃO AO CUDA UTILIZANDO MÉTODOS NUMÉRICOS VILA VELHA 2010 Kassiane

Leia mais

SIS17-Arquitetura de Computadores

SIS17-Arquitetura de Computadores Sistema de Computação SIS17-Arquitetura de Computadores Apresentação da Disciplina Peopleware Hardware Software Carga Horária: 40 horas 2 Computadores atuais Unidade Central de Processamento Entrada Computadores

Leia mais

Placas de Vídeo. Prof. Alexandre Beletti Ferreira

Placas de Vídeo. Prof. Alexandre Beletti Ferreira Placas de Vídeo Prof. Alexandre Beletti Ferreira Introdução Dispositivo responsável pela comunicação entre a placa mãe e o monitor de vídeo para reproduzir imagens. Dispositivo básico de output. Converte

Leia mais

Introdução à Organização de Computadores Entrada e Saída. Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007

Introdução à Organização de Computadores Entrada e Saída. Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007 Introdução à Organização de Computadores Entrada e Saída Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007 Tópicos Processadores Memória Principal Memória Secundária

Leia mais

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas:

Paralelismo. Computadores de alto-desempenho são utilizados em diversas áreas: Computadores de alto-desempenho são utilizados em diversas áreas: - análise estrutural; - previsão de tempo; - exploração de petróleo; - pesquisa em fusão de energia; - diagnóstico médico; - simulações

Leia mais

Um Estudo Sobre o Padrão H.264/AVC de Compressão de Vídeo

Um Estudo Sobre o Padrão H.264/AVC de Compressão de Vídeo UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA Um Estudo Sobre o Padrão H.264/AVC de Compressão de Vídeo por André Marcelo Coelho da Silva Trabalho Individual

Leia mais

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários.

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários. Os sistemas computacionais atuais permitem que diversos programas sejam carregados na memória e executados simultaneamente. Essa evolução tornou necessário um controle maior na divisão de tarefas entre

Leia mais

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução Arquitetura e Organização de Computadores Capítulo 0 - Introdução POR QUE ESTUDAR ARQUITETURA DE COMPUTADORES? 2 https://www.cis.upenn.edu/~milom/cis501-fall12/ Entender para onde os computadores estão

Leia mais

Arquitetura NUMA 1. Daniel de Angelis Cordeiro. INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França

Arquitetura NUMA 1. Daniel de Angelis Cordeiro. INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França Arquitetura NUMA 1 Daniel de Angelis Cordeiro INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França 6 de Outubro de 2010 1 Baseado em slides feitos por Christiane Pousa

Leia mais

Arquitetura e Organização de Computadores

Arquitetura e Organização de Computadores Arquitetura e Organização de Computadores Aula 01 Tecnologias e Perspectiva Histórica Edgar Noda Pré-história Em 1642, Blaise Pascal (1633-1662) construiu uma máquina de calcular mecânica que podia somar

Leia mais

Ricardo José Cabeça de Souza ricardo.souza@ifpa.edu.br 2010 Atualização em Hardware Manutenção de Microcomputadores Processador

Ricardo José Cabeça de Souza ricardo.souza@ifpa.edu.br 2010 Atualização em Hardware Manutenção de Microcomputadores Processador Instituto Federal do Pará - IFPA Ricardo José Cabeça de Souza ricardo.souza@ifpa.edu.br 2010 Atualização em Hardware Manutenção de Microcomputadores Processador SUMÁRIO Conceitos Básicos Hardware Software

Leia mais

Compressão com perdas

Compressão com perdas Compressão com perdas Codificação por transformadas e o padrão JPEG Anderson L Menezes Leonardo G Tampelini Maxiwell S Garcia Introdução Um método é dito com perdas (lossy data) quando a informação obtida

Leia mais

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01 Unidade Central de Processamento (CPU) Processador Renan Manola Introdução ao Computador 2010/01 Componentes de um Computador (1) Computador Eletrônico Digital É um sistema composto por: Memória Principal

Leia mais

glslangel: Uma Ferramenta de Depuração para a Linguagem GLSL

glslangel: Uma Ferramenta de Depuração para a Linguagem GLSL UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA CURSO DE CIÊNCIA DA COMPUTAÇÃO BÁRBARA BELLAVER GONÇALVES glslangel: Uma Ferramenta de Depuração para a Linguagem GLSL Trabalho de Graduação

Leia mais

Bits internos e bits externos. Barramentos. Processadores Atuais. Conceitos Básicos Microprocessadores. Sumário. Introdução.

Bits internos e bits externos. Barramentos. Processadores Atuais. Conceitos Básicos Microprocessadores. Sumário. Introdução. Processadores Atuais Eduardo Amaral Sumário Introdução Conceitos Básicos Microprocessadores Barramentos Bits internos e bits externos Clock interno e clock externo Memória cache Co-processador aritmético

Leia mais

Implementação e Análise de Algoritmos para Estimação de Movimento em Processadores Paralelos tipo GPU (Graphics Processing Units)

Implementação e Análise de Algoritmos para Estimação de Movimento em Processadores Paralelos tipo GPU (Graphics Processing Units) UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA PROGRAMA DE PÓS-GRADUAÇÃO EM COMPUTAÇÃO EDUARDA RODRIGUES MONTEIRO Implementação e Análise de Algoritmos para Estimação de Movimento em

Leia mais

Aula 04 A. Barramentos. Prof. Ricardo Palma

Aula 04 A. Barramentos. Prof. Ricardo Palma Aula 04 A Barramentos Prof. Ricardo Palma Definição Em ciência da computação barramento é um conjunto de linhas de comunicação que permitem a interligação entre dispositivos, como o CPU, a memória e outros

Leia mais

Compressão de Imagens

Compressão de Imagens Compressão de Imagens Compressão de Imagens Geradas por Computador (Gráficos) Armazenamento (e transmissão) como um conjunto de instruções (formato de programa) que geram a imagem Utilização de algum esquema

Leia mais

CAPÍTULO 2 ORGANIZAÇÃO DE COMPUTADORES

CAPÍTULO 2 ORGANIZAÇÃO DE COMPUTADORES CAPÍTULO 2 ORGANIZAÇÃO DE COMPUTADORES 2.1 Organização de um Computador Típico : Armazena dados e programas. Processador (CPU - Central Processing Unit): Executa programas armazenados na memória, interpretando

Leia mais

Introdução. O que é GPU?

Introdução. O que é GPU? Introdução As placas de vídeo são itens de hardware responsáveis pela geração das imagens que são exibidas na tela do computador (incluindo videogames, smartphones, etc). Há tanta variedade de placas com

Leia mais

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução Arquitetura e Organização de Computadores Capítulo 0 - Introdução POR QUE ESTUDAR ARQUITETURA DE COMPUTADORES? 2 https://www.cis.upenn.edu/~milom/cis501-fall12/ Entender para onde os computadores estão

Leia mais

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann Universidade Federal de Santa Maria NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann O modelo (ou arquitetura) de von

Leia mais

1. NÍVEL CONVENCIONAL DE MÁQUINA

1. NÍVEL CONVENCIONAL DE MÁQUINA 1. NÍVEL CONVENCIONAL DE MÁQUINA Relembrando a nossa matéria de Arquitetura de Computadores, a arquitetura de Computadores se divide em vários níveis como já estudamos anteriormente. Ou seja: o Nível 0

Leia mais

Simplifique a complexidade do sistema

Simplifique a complexidade do sistema 1 2 Simplifique a complexidade do sistema Com o novo controlador de alto desempenho CompactRIO Rodrigo Schneiater Engenheiro de Vendas National Instruments Leonardo Lemes Engenheiro de Sistemas National

Leia mais

Informática I. Aula 5. http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1

Informática I. Aula 5. http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1 Informática I Aula 5 http://www.ic.uff.br/~bianca/informatica1/ Aula 5-13/05/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

Técnicas de Computação de Alto Desempenho para o Processamento e Análise de Imagens Complexas da Cavidade Pélvica Feminina

Técnicas de Computação de Alto Desempenho para o Processamento e Análise de Imagens Complexas da Cavidade Pélvica Feminina Técnicas de Computação de Alto Desempenho para o Processamento e Análise de Imagens Complexas da Cavidade Pélvica Feminina Carlos Alex S. J. Gulo Orientador: Prof. Dr. João Manuel R. S. Tavares Co-Orientador:

Leia mais

Placa de vídeo em CUDA

Placa de vídeo em CUDA Placa de vídeo em CUDA Matheus Costa Leone de Souza Krystian Aparacido Resumo Quando você tem um cálculo que possa ser grande demais para você realizar a mão, a primeira solução que lhe vem a cabeça é

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 SISTEMA DE INTERCONEXÃO (BARRAMENTOS) Prof. Luiz Gustavo A. Martins Arquitetura de von Newmann Componentes estruturais: Memória Principal Unidade de Processamento Central

Leia mais

Professores: Aula 10. Lúcia M. A. Drummond Simone de Lima Martins. Conteúdo: Arquiteturas Avançadas. - Arquiteturas RISC - Processamento Paralelo

Professores: Aula 10. Lúcia M. A. Drummond Simone de Lima Martins. Conteúdo: Arquiteturas Avançadas. - Arquiteturas RISC - Processamento Paralelo 1 Professores: Aula 10 Lúcia M. A. Drummond Simone de Lima Martins Conteúdo: Arquiteturas Avançadas - Arquiteturas RISC - Processamento Paralelo 2 Arquiteturas RISC Reduced Instruction Set Computer se

Leia mais

Definindo melhor alguns conceitos

Definindo melhor alguns conceitos Definindo melhor alguns conceitos Processamento Paralelo: processamento de informação concorrente que pertencem a um ou mais processos que resolvem um único problema. Processamento Distribuído: processamento

Leia mais

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA 8 CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA A porta paralela, também conhecida por printer port ou Centronics e a porta serial (RS-232) são interfaces bastante comuns que, apesar de estarem praticamente

Leia mais

1 - Processamento de dados

1 - Processamento de dados Conceitos básicos sobre organização de computadores 2 1 - Processamento de dados O que é processamento? O que é dado? Dado é informação? Processamento é a manipulação das informações coletadas (dados).

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos cpgcarlos@yahoo.com.br www.oficinadapesquisa.com.br ESQUEMA EXTERNO DE UM MICROCOMPUTADOR Agora que

Leia mais

Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano

Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano Arquitetura e Organização de Computadores 1 Unidade 14: Arquiteturas CISC e RISC Prof. Daniel Caetano Objetivo: Apresentar os conceitos das arquiteturas CISC e RISC, confrontando seus desempenhos. Bibliografia:

Leia mais

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquiteturas RISC. (Reduced Instructions Set Computers) Arquiteturas RISC (Reduced Instructions Set Computers) 1 INOVAÇÕES DESDE O SURGIMENTO DO COMPU- TADOR DE PROGRAMA ARMAZENADO (1950)! O conceito de família: desacoplamento da arquitetura de uma máquina

Leia mais

UNIVERSIDADE FEDERAL DE SANTA CATARINA MODELAGEM DE UMA PLATAFORMA VIRTUAL PARA SISTEMAS EMBUTIDOS BASEADA EM POWERPC

UNIVERSIDADE FEDERAL DE SANTA CATARINA MODELAGEM DE UMA PLATAFORMA VIRTUAL PARA SISTEMAS EMBUTIDOS BASEADA EM POWERPC UNIVERSIDADE FEDERAL DE SANTA CATARINA DANIEL CARLOS CASAROTTO JOSE OTÁVIO CARLOMAGNO FILHO MODELAGEM DE UMA PLATAFORMA VIRTUAL PARA SISTEMAS EMBUTIDOS BASEADA EM POWERPC Florianópolis, 2004 DANIEL CARLOS

Leia mais

Multi-processamento. Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores

Multi-processamento. Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores Multi-processamento Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores Arquitecturas MIMD de memória distribuída Massive Parallel Computers Sistemas distribuídos Ainda

Leia mais

CPU - Significado CPU. Central Processing Unit. Unidade Central de Processamento

CPU - Significado CPU. Central Processing Unit. Unidade Central de Processamento CPU - Significado CPU Central Processing Unit Unidade Central de Processamento CPU - Função Na CPU são executadas as instruções Instrução: comando que define integralmente uma operação a ser executada

Leia mais

O que é Arquitetura de Computadores?

O que é Arquitetura de Computadores? O que é Arquitetura de Computadores? Forças Coordenação de um conjunto de níveis de abstração de um computador sobre um grande conjunto de forças de mudança Arquitetura de Computadores = Arquitetura de

Leia mais

William Stallings Arquitetura e Organização de Computadores 8 a Edição

William Stallings Arquitetura e Organização de Computadores 8 a Edição William Stallings Arquitetura e Organização de Computadores 8 a Edição Capítulo 7 Entrada/saída Os textos nestas caixas foram adicionados pelo Prof. Joubert slide 1 Problemas de entrada/saída Grande variedade

Leia mais

Barramentos - BUS. Professor Especialista: Airton Ribeiro de Sousa

Barramentos - BUS. Professor Especialista: Airton Ribeiro de Sousa Professor Especialista: Airton Ribeiro de Sousa É o percurso principal dos dados entre dois ou mais componentes de um sistema de computação, neste caso são os caminhos arquitetados na PLACA MÃE até o ponto

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

COMPUTAÇÃO GRÁFICA REPRESENTAÇÃO DE IMAGENS

COMPUTAÇÃO GRÁFICA REPRESENTAÇÃO DE IMAGENS COMPUTAÇÃO GRÁFICA REPRESENTAÇÃO DE IMAGENS Curso: Tecnológico em Análise e Desenvolvimento de Sistemas Disciplina: COMPUTAÇÃO GRÁFICA 4º Semestre Prof. AFONSO MADEIRA ARQUITETURA GRÁFICA Frame-buffer

Leia mais

Processos e Threads (partes I e II)

Processos e Threads (partes I e II) Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa

Leia mais

Visão Geral de Sistemas Operacionais

Visão Geral de Sistemas Operacionais Visão Geral de Sistemas Operacionais Sumário Um sistema operacional é um intermediário entre usuários e o hardware do computador. Desta forma, o usuário pode executar programas de forma conveniente e eficiente.

Leia mais

Adriano Mauro Cansian 2

Adriano Mauro Cansian 2 Números binários i e Linguagens g de Programação André Proto Adriano Mauro Cansian UNESP - São José do Rio Preto http://adriano.acmesecurity.org/lc (Linguagem Computacional) Neste tópico veremos: A representação

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA DEPARTAMENTO DE ELETRÔNICA E COMPUTAÇÃO PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA

UNIVERSIDADE FEDERAL DE SANTA MARIA DEPARTAMENTO DE ELETRÔNICA E COMPUTAÇÃO PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA UNIVERSIDADE FEDERAL DE SANTA MARIA DEPARTAMENTO DE ELETRÔNICA E COMPUTAÇÃO PROGRAMA DE PÓS-GRADUAÇÃO EM INFORMÁTICA Estudo e aperfeiçoamento da técnica de Steering Behaviors na simulação física de fluidos

Leia mais

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy) Capítulo 4 João Lourenço Joao.Lourenco@di.fct.unl.pt Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa 2007-2008 MARIE (Machine Architecture Really Intuitive and Easy) Adaptado dos transparentes

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais SISTEMAS COM MÚLTIPLOS PROCESSADORES LIVRO TEXTO: CAPÍTULO 13, PÁGINA 243 Prof. Pedro Luís Antonelli Anhanguera Educacional INTRODUÇÃO Arquiteturas que possuem duas ou mais CPUs interligadas

Leia mais

Sistema de Visão Computacional sobre Processadores com Arquitetura Multi Núcleos

Sistema de Visão Computacional sobre Processadores com Arquitetura Multi Núcleos Roberto Kenji Hiramatsu Sistema de Visão Computacional sobre Processadores com Arquitetura Multi Núcleos Tese apresentada à Escola Politécnica da Universidade de São Paulo para obtenção do Título de Doutor

Leia mais

Utilização de Computação Heterogénea na Codificação de Vídeo

Utilização de Computação Heterogénea na Codificação de Vídeo FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO Utilização de Computação Heterogénea na Codificação de Vídeo João Paulo Abreu Nogueiro Estevinho Mestrado Integrado em Engenharia Informática e Computação

Leia mais

3.1. Paralelização em CUDA (GPU-PGLIQ)

3.1. Paralelização em CUDA (GPU-PGLIQ) 44 3 3.1. Paralelização em CUDA (GPU-PGLIQ) Aplicação: Aceleração Base No algoritmo serial de PGLIQ, o maior tempo de processamento está na avaliação da função de aptidão, embora este procedimento seja

Leia mais

Figura 1 - O computador

Figura 1 - O computador Organização e arquitectura dum computador Índice Índice... 2 1. Introdução... 3 2. Representação da informação no computador... 4 3. Funcionamento básico dum computador... 5 4. Estrutura do processador...

Leia mais

Sistemas Distribuídos Conceitos HW e SW. Edeyson Andrade Gomes www.edeyson.com.br

Sistemas Distribuídos Conceitos HW e SW. Edeyson Andrade Gomes www.edeyson.com.br Sistemas Distribuídos Conceitos HW e SW Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Roteiro da Aula Conceitos de Hardware Conceitos de Software Combinações de SW e HW 3 Sistemas Distribuídos

Leia mais