Vous êtes sur la page 1sur 8

Otimizao do codicador de vdeo x264

Luiz H. Duma1 , Keiko V. O. Fonseca2 30 de setembro de 2011


Abstract. Digital video coding is an essential resource to produce video for Internet, TV channels and other medias. Through codication, it is possible to improve storage and bandwidth utilization for transmission and reception of video streams. On embedded devices, hardware resources impact on encoder performance, for example, encoders in cell video cameras. This paper assesses some optimization techniques to reduce the execution time but keeping control of video quality degradation. These optimization techniques were applied to the x264 encoder and results show up a reduction of 16% to18% at the execution time of the encoder, without noticeable changes on objective video quality metrics. Resumo. A codicao de vdeo digital um recurso essencial para a produo de vdeo para a internet, canais de TV e outras mdias. Atravs da codicao possvel melhorar a utilizao dos recursos de armazenamento, transmisso e de recepo, como por exemplo, banda. Em sistemas embarcados, a limitao de recursos impacta no desempenho dos codicadores, em especial no tempo de execuo de aplicaes multimdia. Este trabalho avalia o uso de tcnicas de otimizao do acesso a memria aplicadas ao codicador de vdeo x264 com o objetivo de reduzir o tempo de codicao. Os resultados mostram uma melhora entre 16% e 18% no tempo de codicao mantendo-se os mesmos valores das mtricas objetivas de qualidade de vdeo.

1. Introduo
Os codicadores de vdeo so hoje componentes indispensveis para a difuso de vdeos pela internet, canais de TV e outras mdias. A necessidade de alta-resoluo aliada ao uso adequado dos recursos de transmisso disponveis, torna a compresso do sinal um recurso valioso. A capacidade de processamento dos dispositivos computacionais tem aumentado a cada dia, sustentada pelas diversas inovaes ocorrida nas reas de microeletrnica e computao. Em contra-partida, os requisitos exigidos pelas aplicaes atuais tambm tem aumentado e nem sempre esses dispositivos so capazes de atender a todos esses requisitos. Este trabalho apresenta os resultados obtidos com a otimizao do codicador x264 [x264 2011] a partir da reduo no acesso memria nas funes de compensao de movimento que executam a SATD (Sum of Absolute Transformed Difference) e a SAD (Sum of Absolute Differences). Inicialmente, a seo 2 apresenta os conceitos 1

bsicos do padro de codicao de vdeo H.264, da comunicao do processador com o barramento de memria na arquitetura Intel e os recursos de software proling utilizados. A seo 3 apresenta a motivao do trabalho e metodologia aplicada. Na seo 4 apresentada a aplicao de duas tcnicas que permitem reduzir o acesso memria e seus respectivos resultados. Por m, a seo 5 discute os resultados e os possveis impactos no desempenho das aplicaes.

2. Conceitos bsicos
O padro de codicao H.264, implementado no codicador x264 objeto deste estudo. As tcnicas de otimizao aqui descritas referem-se aos conceitos a seguir apresentados. 2.1. Padro de codicao H.264 O padro para codicao de vdeo H.264/AVC, tambm conhecido por MPEG-4 Part 10, foi desenvolvido pelo JVT (Joint Video Team), composto por especialistas dos grupos VCEG (Video Coding Experts Group) e MPEG (Moving Picture Experts Group), respectivamente das organizaes ITU-T e ISO/IEC [Wiegand et al. 2003]. A estrutura bsica desse novo padro de codicao similar de padres anteriores (H.261, MPEG-1, MPEG-2 / H.262, H.263 ou MPEG-4 part 2). Um diagrama em blocos simplicado de um codicador H.264 apresentado na gura 1. Na sequncia apresenta-se uma breve descrio de cada etapa representada pelos blocos.
Vdeo Digital Predio Espacial/Temporal Transformao 2-D Quantizao

Varredura

Codificao de Entropia (VLC ou Aritmtica)

Vdeo Codificado

Figura 1. Diagrama em bloco da codicao H.264/AVC - Adaptado de [Sullivan et al. 2004] .

Na etapa de predio, so determinadas as semelhanas entre macroblocos de um mesmo quadro ou de quadros sucessivos no tempo. Com esse recurso, possvel evitar o processo de compresso de macroblocos semelhantes, podendo-se fazer referncia a macroblocos j codicados, aumentando-se com isso a compresso do vdeo. A etapa de transformao converte o sinal do domnio espacial para o das frequncias e com a quantizao possvel reduzir a redundncia do sinal e aumentar a compresso do vdeo. A etapa de quantizao pode gerar perdas na qualidade do sinal, dependendo do parmetro de quantizao. A varredura serializa as amostras dos macroblocos que so representados de uma forma mais compacta durante a codicao de entropia. Essa ltima etapa comprime o sinal de vdeo sem perda de informao. 2.2. Arquitetura de computadores Entre os equipamentos de uso geral como os Desktops e Notebooks, prevalece ainda a arquitetura clssica denida pela Intel [Tanenbaum 2007], utilizada neste estudo.

Ao longo dos anos, os processadores evoluram em capacidade de processamento e os sistemas de memrias evoluram principalmente em termos de aumento da capacidade de armazenamento. Isto gerou uma distoro entre a velocidade de acesso memria e a taxa de processamento da CPU (Central Processor Unit). Desse modo, o processador precisa aguardar muitos ciclos at que tenha acesso aos dados requisitados memria [Tanenbaum 2007]. Uma soluo para o problema de velocidade de acesso incluir as memrias dentro dos chips dos processadores o que os torna maiores e mais caros. Este custo pode ser reduzido com a adio de uma memria interna de menor capacidade ao processador, chamada de memria cache [Tanenbaum 2007]. Os dados e/ou instrues so armazenados nessa memria intermediria com o objetivo de serem reutilizados, evitando assim acessos desnecessrios ao barramento externo e minimizando o problema da velocidade de acesso.

2.2.1. Branch-Prediction Para aproveitar de forma mais eciente a capacidade de processamento dos sistemas, os projetistas de hardware normalmente implementam mecanismos de pipelines nos processadores, de modo a permitir que o tratamento da prxima instruo seja iniciado antes mesmo da instruo atual ter sido nalizada [Tanenbaum 2007]. Para melhorar a utilizao do pipeline, alguns processadores implementam um mecanismo chamado de branch prediction (BP), que tem a funo de determinar qual a melhor instruo a ser carregada no pipeline. Se aps o inicio do processamento da instruo, for detectada que a predio est incorreta, essa instruo precisa ser removida do pipeline ao custo de vrios ciclos do processador. Neste momento, contabilizado um evento de branch-miss pelo mdulo de monitoramento do processador. [Intel 2011]

2.2.2. Contadores de Performance Os contadores de performance so recursos de hardware de muitos processadores modernos que permitem obter informaes a respeito de diversos eventos internos desses componentes. A quantidade e o tipo de eventos depende de cada processador e podem informar por exemplo a quantidade de ciclos do processador durante um intervalo de tempo, o nmero de ciclos gastos no acesso ao barramento externo entre outros. Com base em alguns desses contadores e nas equaes sugeridas em [Intel 2009] possvel estimar o potencial de otimizao do software e o impacto de alguns eventos sobre a performance do sistema. Neste trabalho so utilizadas duas dessas equaes:
CP I = CP U _CLK_U N HALT ED.CORE IN ST _RET IRED.AN Y (1)

BM P I =

RESOU RCE_ST ALLS.BR_M ISS_CLEAR 100 CP U _CLK_U N HALT ED.CORE

(2)

Para a relao CPI (Clocks Per Instruction Retired Ratio), o valor ideal para a arquitetura utilizada ca em torno de 0,25. Quanto maior o valor, maior oportunidade de otimizao do software em anlise. A relao BMPI (Branch Misprediction Performance Impact) indica a percentagem de ciclos consumidos pelo processador para recuperar-se aps um evento de branch-miss [Intel 2009].

3. Motivao, objetivo e metodologia


Em [Duma et al. 2010] so apresentadas algumas tcnicas que podem ser utilizadas na otimizao de codicadores de vdeo. Essas tcnicas podem envolver a alterao do algoritmo do codicador, a utilizao de forma mais criteriosa dos parmetros de congurao, alm da alterao da estrutura do software de modo a aproveitar de forma mais eciente os recursos de hardware, dentre eles, a memria do sistema. Um objetivo deste trabalho estudar o impacto da reduo no acesso memria externa do sistema, usando os contadores de performance do processador como mtrica para identicar a reduo na quantidade de ciclos gastos para o acesso ao barramento externo. O tempo total de execuo da aplicao foi usado como medida do desempenho, de modo que a reduo no tempo de execuo de uma verso em relao a outra, indica uma melhora na performance. Importante observar que os parmetros objetivos de qualidade do vdeo codicado [Wu and Rao 2005] foram levados em considerao para que o resultado da otimizao fosse considerado. Os vdeos utilizados na codicao foram obtidos a partir de [ASU 2011] e apresentam temas variados, permitindo avaliar a performance do codicador em diversas condies. Todos os vdeos utilizados estavam no formato CIF (Common Intermediate Format) e usando o espao de cores YUV [Albini 2009].

4. Desenvolvimento
A aplicao de duas tcnicas para a reduo no acesso memria pelo codicador de vdeo x264 apresentada nesta seo. O conjunto de ferramentas perf [kernel.org 2011] do Linux foi utilizado para identicar os pontos crticos para a performance da aplicao, bem como para validar os resultados obtidos aps as implementaes, a partir da leitura dos contadores de performance do hardware. Os testes foram executados em um computador equipado com processador Intel Core2 Duo CPU T7250 @ 2.00GHz e 2 Gb de memria RAM, executando o Sistema Operacional Linux Ubuntu 10.04. 4.1. Otimizao do codicador x264 O codicador x264 foi utilizado em conjunto com o software ffmpeg [ffmpeg 2011]. As otimizaes foram aplicadas sobre o x264, nas funes que calculam SAD e SATD para a compensao de movimento. A biblioteca x264 gerada era ento utilizada na compilao do ffmpeg e em seguida o processo de codicao era iniciado, sempre com a utilizao da ferramenta perf para a anlise dos pontos crticos ou obteno dos dados sobre a performance do codicador. No x264, o bit-depth foi congurado para 8 (as amostras do vdeo so tratadas como sendo de 8 bits). O nmero de opes e parmetros de congurao do ffmpeg foi

reduzido ao mximo, sendo habilitados e compilados apenas os utilizados no ambiente de codicao. Essa medida foi tomada para reduzir ao mximo o tamanho do codicador gerado, de modo que ele possa ser utilizado em sistemas embarcados, onde os recursos de armazenamento so limitados. A otimizao para reduo do tamanho do objeto gerado no processo de compilao foi habilitada tanto para o x264 quanto para o ffmpeg. As conguraes utilizadas podem ser obtidas em [LACD 2011]. O processo de anlise e otimizao envolveu as seguintes etapas: 1. 2. 3. 4. 5. Gerao do call-graph da aplicao; Seleo da funo candidata a otimizao; Anlise da funo candidata; Implementao e renamento da otimizao; Validao dos resultados da otimizao;

O call-graph da etapa 1 era obtido com o comando perf report -g graph .... A funo a ser otimizada era ento selecionada dentre as funes com maior percentagem de tempo de execuo. A anlise da funo era feita com base no relatrio gerado pelo comando perf annotate, tendo esse uma indicao da percentagem atribuda a cada instruo em assembly da funo em anlise. No mesmo relatrio so apresentados os cdigos em linguagem C e seu equivalente em assembly. Aps a etapa de implementao, o resultado foi validado com o uso do comando perf stat, que permite coletar os eventos do hardware e do sistema operacional, comparando os resultados entre a verso original e otimizada do codicador. A gura 2 apresenta a implementao da funo x264_pixel_satd_8x4, utilizada para calcular a SATD para macroblocos com tamanho 8x4. Existem outras funes para SATD e SAD, para os diferentes tamanhos de macroblocos. Elas apresentam uma grande semelhana entre si, e as otimizaes foram aplicadas sobre todas essas funes.
1 s t a t i c NOINLINE i n t x 2 6 4 _ p i x e l _ s a t d _ 8 x 4 ( p i x e l p i x 1 , i n t i _ p i x 1 , p i x e l p i x 2 , i n t i _ p i x 2 ) 2 { 3 u i n t 3 2 _ t tmp [ 4 ] [ 4 ] ; 4 u i n t 3 2 _ t a0 , a1 , a2 , a3 ; 5 i n t sum = 0 ; 6 f o r ( i n t i = 0 ; i < 4 ; i ++ , p i x 1 += i _ p i x 1 , p i x 2 += i _ p i x 2 ) 7 { 8 a0 = ( p i x 1 [ 0 ] p i x 2 [ 0 ] ) + ( ( p i x 1 [ 4 ] p i x 2 [ 4 ] ) << 1 6 ) ; 9 a1 = ( p i x 1 [ 1 ] p i x 2 [ 1 ] ) + ( ( p i x 1 [ 5 ] p i x 2 [ 5 ] ) << 1 6 ) ; 10 a2 = ( p i x 1 [ 2 ] p i x 2 [ 2 ] ) + ( ( p i x 1 [ 6 ] p i x 2 [ 6 ] ) << 1 6 ) ; 11 a3 = ( p i x 1 [ 3 ] p i x 2 [ 3 ] ) + ( ( p i x 1 [ 7 ] p i x 2 [ 7 ] ) << 1 6 ) ; 12 HADAMARD4( tmp [ i ] [ 0 ] , tmp [ i ] [ 1 ] , tmp [ i ] [ 2 ] , tmp [ i ] [ 3 ] , a0 , a1 , a2 , a3 ) ; 13 } 14 f o r ( i n t i = 0 ; i < 4 ; i ++ ) 15 { 16 HADAMARD4( a0 , a1 , a2 , a3 , tmp [ 0 ] [ i ] , tmp [ 1 ] [ i ] , tmp [ 2 ] [ i ] , tmp [ 3 ] [ i ] ) ; 17 sum += a b s 2 ( a0 ) + a b s 2 ( a1 ) + a b s 2 ( a2 ) + a b s 2 ( a3 ) ; 18 } 19 r e t u r n ( ( ( u i n t 1 6 _ t ) sum ) + ( ( u i n t 3 2 _ t ) sum > >1 6 ) ) >> 1 ; 20 }

Figura 2. Implementao SATD 8x4

Inicialmente utilizou-se o tipo de dado apresentado na gura 3 para executar as operaes dentro do lao iniciado na linha 6 da gura 2 e que calcula o valor das variveis a0, a1, a2 e a3. Essa primeira abordagem permitiu reduzir a quantidade de ciclos gastos para o acesso memria e os resultados so apresentados na tabela 1. Na sequncia, utilizou-se a tcnica de loop unrolling para esse mesmo lao, reduzindo-se com

isso a quantidade de eventos de branch-miss. O resultado das duas tcnicas aplicadas em conjunto apresentado na tabela 2.
typedef union pixel_64_u { u i n t 8 _ t u8 ; u i n t 6 4 _ t u64 ; } pixel_64_t ;

Figura 3. Tipo de dado para o acesso memria

4.2. Resultados As tabelas 1 e 2 contm os dados obtidos do relatrio da ferramenta perf-stat, sendo que na coluna Reduo, cycles corresponde ao nmero total de ciclos da CPU, bus-cycles so os ciclos utilizados durante o acesso ao barramento externo, branch-misses indica a quantidade desses eventos reportados pelo hardware e o tempo representa o tempo de execuo do codicador para a dada sequncia de vdeo. Foram obtidos os valores para o codicador original e o otimizado, sendo que o valor da reduo percentual de cada evento, refere-se reduo observada no codicador otimizado em relao ao original.
Tabela 1. Performance dos codicadores - acesso memria

Sequncia Akiyo Bridge far Bus Foreman Mobile

cycles 6,165 4,044 4,731 4,324 4,597

Reduo [%] bus-cycles 6,652 4,180 4,903 4,390 4,691

tempo 4,738 4,299 5,352 4,613 4,869

Autoria prpria

Os dados da tabela 1 foram obtidos com o uso do tipo de dado indicado na gura 3 e a tabela 2 foi obtida com a execuo do codicador otimizado com o uso do tipo de dado da gura 3 em conjunto com a tcnica de loop unrolling sobre as mesmas funes de SAD e SATD.
Tabela 2. Performance dos codicadores - reduo de brach-miss

Sequncia Akiyo Bridge far Bus Foreman Mobile

Quantidade quadros 300 2101 150 300 300

cycles 16,270 15,709 17,449 16,547 16,708

Reduo [%] bus-cycles branch-misses 16,583 28,023 15,847 28,460 17,566 33,544 16,612 31,745 16,772 30,661

tempo 16,986 16,116 18,210 16,807 16,984

Fonte: Autoria prpria

Os valores para as taxas CPI e BMPI da verso original e otimizada do codicador, obtidos respectivamente com as equaes ( 1 ) e ( 2 ), so apresentados na tabela 3. A coluna Variao contm o valor percentual da variao de cada taxa do codicador otimizado em relao ao codicador original.

Tabela 3. Valores obtidos para CPI e BMPI

Sequncia Akiyo Bridge far Bus Foreman Mobile

CPI Variao Original Otimizado [%] 0,491 0,498 1,661 0,501 0,510 1,825 0,487 0,494 1,564 0,491 0,498 1,422 0,494 0,503 1,725

BMPI Variao Original Otimizado [%] 1,2 1,072 -10,615 1,220 1,056 -13,388 1,047 0,825 -21,161 1,090 0,887 -18,691 1,131 0,934 -17,481

Fonte: Autoria prpria

Os valores obtidos com as mtricas objetivas de qualidade PSNR (Peak Signal-toNoise Ratio), MSE (Mean Square Error) e SSIM (Structural Similarity) para os vdeos codicados foram iguais tanto para o codicador original quanto para o otimizado.

5. Comentrios nais
A principal contribuio deste trabalho, foi apresentar o potencial de aumento na performance das aplicaes focando unicamente na melhor utilizao do barramento de memria. A metodologia de anlise aqui aplicada para a escolha de possveis pontos do cdigo que podem ser otimizados no se limita a codicadores de vdeo. Neste trabalho, a reduo no tempo de execuo foi considerado como medida de desempenho. Pode-se concluir para os casos apresentados, que a reduo no nmero de ciclos para o acesso ao barramento est diretamente ligada, em termos percentuais, melhora na performance do aplicao. Os ganhos mais expressivos foram obtidos com a reduo dos eventos de branch-miss gerados pelas funes SAD e SATD. A primeira abordagem para reduo no acesso memria gerou uma reduo da ordem de 4% no tempo de codicao. Incluindo a reduo dos branch-misses, foi possvel atingir redues de at 18%. Para o codicador otimizado, esperava-se um reduo nos valores da taxa CPI apresentada na tabela 3, o que indicaria uma melhor relao na quantidade de instrues executadas por ciclo do processador. Esse pequeno aumento no valor de CPI indica que existe ainda um potencial de otimizao a ser explorado, a partir da anlise de outros fatores que podem impactar no desempenho. O objetivo de reduzir a quantidade de eventos de branch-miss foi atingido, de acordo com a taxa BMPI obtida. O acesso ao barramento externo dos computadores atuais ainda um gargalo que limita a utilizao de todo o potencial dos processadores. As arquiteturas de hardware tem evoludo para diminuir essa limitao mas ela estar presente por muito tempo ainda. Alm disso, importante aproveitar de forma eciente os recursos oferecidos pelos processadores modernos como os pipelines, utilizando para isso ferramentas de anlise, principalmente as baseadas nos contadores de performance dos processadores.

Agradecimentos
O desenvolvimento deste trabalho recebeu suporte nanceiro da CAPES atravs do projeto "Formao de Pessoal Qualicado em TV Digital no Paran", Processo 23038.23556/2008-16 AUX-PE-RH-TVD 249/2008. A equipe do laboratrio de

pesquisas LCD do Programa de Ps-graduao em Engenharia Eltrica de Informtica Industrial da UTFPR, campus Curitiba, agradece o apoio recebido.

Referncias
[Albini 2009] Albini, F. L. P. (2009). Gerao de artefatos em vdeo digital. Masters thesis, Universidade Tecnolgica Federal do Paran. [ASU 2011] ASU (2011). Vdeo traces. Xiph.org Test Media. http://trace.eas.asu.edu/yuv/. Acessado em Junho de 2011. Disponvel em

[Duma et al. 2010] Duma, L. H. D., Fonseca, K. V. O., and Pohl, A. d. A. P. (2010). Tcnicas de otimizao para codicadores h.264. ANAIS DO CONGRESSO DA SOCIEDADE BRASILEIRA DE ENGENHARIA DE TELEVISO, (4). [ffmpeg 2011] ffmpeg (2011). Ffmpeg - solution to record, convert and stream audio and video. Disponvel em http://www.ffmpeg.org. Acessado em Junho de 2011. [Intel 2009] Intel (2009). Intel 64 and IA-32 Architectures timization Reference Manual. Intel. Disponvel http://www.intel.com/content/www/us/en/processors/architectures-softwaredeveloper-manuals.html. Acessado em Junho de 2011. Opem

[Intel 2011] Intel (2011). Intel 64 and IA-32 Architectures Software Developers Manual Volume 3 (3A & 3B). Intel. Disponvel em http://www.intel.com/content/www/us/en/processors/architectures-softwaredeveloper-manuals.html. Acessado em Junho de 2011. [kernel.org 2011] kernel.org (2011). Perf - the linux performance counter subsystem. Disponvel em https://perf.wiki.kernel.org. Acessado em Junho 2011. [LACD 2011] LACD (2011). Laboratrio de comunicao de dados. http://200.17.96.117/ lacd. Acessado em Julho 2011. Disponvel em

[Sullivan et al. 2004] Sullivan, G. J., Topiwala, P., and Luthra, A. (2004). The h.264/avc advanced video coding standard: Overview and introduction to the delity range extensions. In SPIE conference on Applications of Digital Image Processing XXVII, pages 454474. [Tanenbaum 2007] Tanenbaum, A. S. (2007). Organizao Estruturada de Computadores. Pearson Education do Brasil, 5a edio edition. [Wiegand et al. 2003] Wiegand, T., Sullivan, G., Bjontegaard, G., and Luthra, A. (2003). Overview of the h.264/avc video coding standard. Circuits and Systems for Video Technology, IEEE Transactions on, 13(7):560576. [Wu and Rao 2005] Wu, H. R. and Rao, K. R. (2005). Digital Video Image Quality and Perceptual Coding (Signal Processing and Communications). CRC Press, Inc., Boca Raton, FL, USA. [x264 2011] x264 (2011). x264 - a free h264/avc encoder. Disponvel em http://www.videolan.org/developers/x264.html. Acessado em Junho 2011.

Vous aimerez peut-être aussi