En la sección 4.6.7 se realizan una serie de optimizaciones del programa que per- miten obtener mejoras en los resultados de la descodificación. Respecto a ello, el diseño de loskernelsrealizado en este trabajo y explicado a lo largo del capítulo 4 no es el único realizable, sino una posible solución. Por ello, es factible realizar un diseño y codificación de distintoskernelspara el filtrado DBF en el que se realicen más operaciones de identifi- cación de bordes además de las operaciones de filtrado. Por otra parte, una modificación que ofrecería una mejora en el tiempo de descodificación sería la reserva de memoria en la inicialización del programa, evitando así realizar esta operación para cada imagen a filtrar1.
En HEVC, eldeblocking filteres una parte de los filtrosin-loop, la otra parte es el SAO. Este trabajo presenta una metodología que puede servir para realizar una implemen- tación en la GPU de este último tipo de filtrado citado. Esto permitiría aportar más carga de trabajo a la GPU y posiblemente solventar el enmascaramiento de las transferencias
1La liberación de esta memoria reservada se realizaría después de la descodificación de la secuencia de video y antes de terminar la ejecución del programa.
CAPÍTULO 6. CONCLUSIONES 55
de memoria con respecto al tiempo de operaciones en la GPU, puesto que se estaría in- crementando el volumen de información a procesar y mejorando la relación transferencia de memoria/uso de recursos en la GPU. El SAO no es el único bloque funcional de un descodificador que es susceptible de ser migrado a la GPU, ya que el proceso de realizar las transformadas inversas también posee un grado de independencia en sus operaciones que permitiría una implementación en la plataforma NVIDIA Jetson TX2 usando tanto CPU como GPU.
Por último, el uso de la API de OpenMP junto con CUDA se puede analizar para utilizar OpenMP no sólo en la creación y sincronización de hilos en la CPU, sino también para su uso en la GPU.
Capítulo 7
Presupuesto
7.1.
Introducción
En este capítulo se ofrece un estudio del coste, de forma aproximada, que el desa- rrollo de este Proyecto Fin de Grado ha tenido.
En la sección 7.2 se explican los materiales, tanto hardware como software, em- pleados para realizar el proyecto y su respectivo coste. En la sección 7.3 se detalla el coste producido por las horas de trabajo, teniendo el cuenta tanto el ingeniero junior (quien pre- senta este documento), el director del proyecto dentro del grupo de investigación y el tutor de la Escuela. Por último, se ofrece una visión general del presupuesto.
7.2.
Materiales
Este proyecto se ha desarrollado en el laboratorio de investigación del grupo GDEM. El laboratorio ha proporcionado todos los materiales necesarios para el exitoso desarrollo del proyecto. La tabla 7.1 muestra de forma recogida todos los materiales que el grupo a proporcionado junto con una pequeña descripción y su coste.
58 CAPÍTULO 7. PRESUPUESTO
Tabla 7.1. Materiales
Material Descripción Precio (e)
NVIDIA Jetson TX2 Plataforma heterogénea, kit de desarro-
lladores. 649,00
PC
Ordenador principal utilizado para co- nexión remota con la plataforma hetero- génea.
630,00
Linux Ubuntu Sistema operativo utilizado en la plata- forma heterogénea y en el PC. 0,00 OpenHEVC Código fuente del descodificador de ví-
deo. 0,00
Vooya Software para la reproducción de video
en crudo. 0,00
Gitlab Uso del servidor de Gitlab del grupo. 0,00
Total 1.279,00
7.3.
Horas de trabajo
El Proyecto Fin de Grado se ha realizado en un semestre empleando una media de 4 horas diarias entre semana, es decir, de lunes a viernes. En total se obtienen alrededor de 100 horas mensuales y 400 horas trabajadas.
Conociendo que el sueldo de un ingeniero junior está alrededor de 12 e/hora y el número de horas trabajadas, el coste total del ingeniero junior es de 4.800 e. Hay que tener en cuenta que en el proyecto, además del ingeniero junior, también existe la supervisión del director del proyecto y el tutor de la Escuela, esto es, dos ingenieros senior. Suponiendo alrededor de 5 horas semanales en conjunto, resulta en 100 horas que multiplicadas por el sueldo de un ingeniero senior (20e/hora) proporcionan un coste total de 2.000e.
7.4.
Presupuesto final
En la tabla 7.2 se muestra un resumen del prespuesto final para este Proyecto Fin de Grado.
Tabla 7.2. Presupuesto final
Elemento Precio (e)
Materiales 1.279,00
Sueldo ingenieros 6.800,00
Referencias
[1] GDEM, Sitio web CITSEM - Grupo de Diseño Electrónico y Microelectrónico (GDEM). dirección:https://www.citsem.upm.es/index.php/es/investigacion- es / grupos - es / grupo - de - diseno - electronico - y - microelectronico -
gdem-es(visitado 29-04-2019).
[2] Fraunhofer Heinrich Hertz Institute,High Efficiency Video Coding (HEVC) | JCT- VC. dirección:http://hevc.info/(visitado 08-05-2019).
[3] Openhevc,openHEVC – Opensource HEVC decoder. dirección:http://openhevc.
insa-rennes.fr/(visitado 01-04-2019).
[4] NVIDIA, Procesamiento paralelo CUDA | Qué es CUDA | NVIDIA. dirección: https : / / www . nvidia . es / object / cuda - parallel - computing - es . html (visitado 01-05-2019).
[5] ITU, Video Coding Experts Group (VCEG). dirección: https://www.itu.int/
en/ITU-T/studygroups/2017-2020/16/Pages/video/vceg.aspx (visitado
23-05-2019).
[6] MPEG, MPEG | The Moving Picture Experts Group website. dirección: https :
//mpeg.chiariglione.org/(visitado 23-05-2019).
[7] ITU, H.265 : High efficiency video coding. dirección:https://www.itu.int/
rec/T-REC-H.265(visitado 23-05-2019).
[8] T. Wiegand, G. Sullivan, G. Bjontegaard y A. Luthra, «Overview of the H.264/AVC video coding standard», IEEE Transactions on Circuits and Systems for Video Technology, vol. 13, n.o 7, págs. 560-576, jul. de 2003, ISSN: 1051-8215. DOI:
10.1109/TCSVT.2003.815165. dirección:http://ieeexplore.ieee.org/
document/1218189/.
[9] F. Pescador, M. Chavarrias, M. Garrido, E. Juarez y C. Sanz, «Complexity analysis of an HEVC decoder based on a digital signal processor»,IEEE Transactions on Consumer Electronics, vol. 59, n.o2, págs. 391-399, mayo de 2013, ISSN: 0098- 3063. DOI: 10 . 1109 / TCE . 2013 . 6531122. dirección: http : / / ieeexplore .
ieee.org/document/6531122/.
60 REFERENCIAS
[10] G. J. S. Vivienne Sze, Madhukar Budagavi,High Efficiency Video Coding (HEVC) Algorithms and Architectures. 2014, pág. 384, ISBN: 9783319068947. DOI: 10 .
1007/s10560-011-0248-7.
[11] Jacilluch,Mutacion en la forma de una hoja. dirección:https://www.flickr.
com/photos/70626035@N00/7494221594(visitado 23-05-2019).
[12] N.H. Younan, Example images generated from the simulation experiments with the... | Download Scientific Diagram. dirección:https://www.researchgate. net/figure/Example-images-generated-from-the-simulation-experiments-
with-the-adaptive-noise%7B%5C_%7Dfig3%7B%5C_%7D220808862(visitado
23-05-2019).
[13] FFmpeg,FFmpeg. dirección:https://ffmpeg.org/(visitado 29-04-2019). [14] 4ever, 4EVER-2 | for Enhanced Video ExpeRience. dirección: http : / / www .
4ever-2.com/fr/accueil/(visitado 01-05-2019).
[15] 4ever, Le projet | 4EVER-2. dirección: http : / / www . 4ever - 2 . com / fr / le -
projet/?lang=fr(visitado 01-05-2019).
[16] H2B2VS, H2B2VS | HEVC Hybrid Broadcast Broadband Video Services. direc- ción:http://h2b2vs.epfl.ch/(visitado 01-05-2019).
[17] W. Hamidouche, M. Raulet y O. Deforges, «Parallel SHVC decoder: Implemen- tation and analysis»,Proceedings - IEEE International Conference on Multimedia and Expo, vol. 2014-Septe, n.oSeptmber, 2014,ISSN: 1945788X. DOI:10.1109/
ICME.2014.6890300.
[18] P. Cano Megías, «Integración de FVC y OPENHEVC sobre la plataforma Multi- DSP C6687», jul. de 2017. dirección:http://oa.upm.es/52333/.
[19] Fraunhofer Heinrich Hertz Institute,Versatile Video Coding (VVC) | JVET. direc- ción:https://jvet.hhi.fraunhofer.de/(visitado 23-05-2019).
[20] J. Treviño Páez, «Diseño de una metodología para la interconexión de núcleos en la plataforma heterogénea 66AK2H», jul. de 2017. dirección:http://oa.upm.
es/52463/.
[21] D. Garcia, S. Atienza, M. Chavarrias y F. Pescador, «On the implementation of HEVC decoders with high parallelization degree with OpenMP», en 2019 IEEE International Conference on Consumer Electronics (ICCE), IEEE, ene. de 2019, págs. 1-2,ISBN: 978-1-5386-7910-4.DOI:10.1109/ICCE.2019.8661922. direc- ción:https://ieeexplore.ieee.org/document/8661922/.
[22] IEEE,ICCE International Conference On Consumer Electronics. dirección:http:
//www.icce.org/(visitado 23-05-2019).
[23] OpenMP, Home - OpenMP. dirección: https : / / www . openmp . org/ (visitado 13-05-2019).
REFERENCIAS 61
[24] Linux, pthreads(7) - Linux manual page. dirección:http://man7.org/linux/
man-pages/man7/pthreads.7.html(visitado 13-05-2019).
[25] D. F. De Souza, A. Ilic, N. Roma y L. Sousa, «HEVC in-loop filters GPU paralle- lization in embedded systems», Proceedings - 2015 International Conference on Embedded Computer Systems: Architectures, Modeling and Simulation, SAMOS 2015, n.oSamos Xv, págs. 123-130, 2015.DOI:10.1109/SAMOS.2015.7363667. [26] Y. Wang, X. Guo, X. Fan, Y. Lu, D. Zhao y W. Gao, «Parallel In-Loop Filtering in HEVC Encoder on GPU», IEEE Transactions on Consumer Electronics, vol. 64, n.o3, págs. 276-284, 2018,ISSN: 15584127.DOI:10.1109/TCE.2018.2867812. [27] MulticoreWare, x265 HEVC Encoder / H.265 Video Codec. dirección: http : / /
x265.org/(visitado 23-05-2019).
[28] D. F. de Souza, N. Roma y L. Sousa, «Cooperative CPU+GPU deblocking filter pa- rallelization for high performance HEVC video codecs», en2014 IEEE Internatio- nal Conference on Acoustics, Speech and Signal Processing (ICASSP), IEEE, ma- yo de 2014, págs. 4993-4997, ISBN: 978-1-4799-2893-4.DOI:10.1109/ICASSP.
2014.6854552. dirección:http://ieeexplore.ieee.org/document/6854552/.
[29] NVIDIA,Kits de desarrollo y módulos para sistemas embedidos | NVIDIA Jetson. dirección: https : / / www . nvidia . com / es - es / autonomous - machines /
embedded-systems/(visitado 08-05-2019).
[30] NVIDIA,Jetson TX2 Module | NVIDIA Developer. dirección:https://developer.
nvidia.com/embedded/buy/jetson-tx2(visitado 01-05-2019).
[31] NVIDIA,NVIDIA Jetson TX2 Delivers Twice the Intelligence to the Edge | NVIDIA Developer Blog. dirección: https : / / devblogs . nvidia . com / jetson - tx2 -
delivers-twice-intelligence-edge/(visitado 01-05-2019).
[32] NVIDIA,JetPack | NVIDIA Developer. dirección:https://developer.nvidia.
com/embedded/jetpack(visitado 06-05-2019).
[33] NVIDIA, «CUDA C Programming Guide», dirección:https://docs.nvidia.
com/cuda/cuda-c-programming-guide/%7B%5C#%7Dprogramming-model.
[34] NVIDIA, «NVIDIA CUDA Installation Guide for Linux», dirección: https : / / docs.nvidia.com/cuda/cuda- installation- guide- linux/index.html%
7B%5C#%7Ddownload-nvidia-driver-and-cuda-software.
[35] NVIDIA,NVIDIA Developer Tools Overview | NVIDIA Developer. dirección:https:
//developer.nvidia.com/tools-overview(visitado 10-05-2019).
[36] Sublime HQ,Sublime Text - A sophisticated text editor for code, markup and prose. dirección:https://www.sublimetext.com/(visitado 10-05-2019).
62 REFERENCIAS
[38] Yasm,The Yasm Modular Assembler Project. dirección:https://yasm.tortall. net/(visitado 29-05-2019).
[39] Tortall,Yasm. dirección:www.tortall.net/projects/yasm/releases/yasm-
1.2.0.tar.gz(visitado 06-05-2019).
[40] BBC,BBC Anchors HM-10. dirección:ftp://ftp.kw.bbc.co.uk/hevc/hm-
10.0-anchors/bitstreams/(visitado 06-05-2019).
[41] OpenHEVC,OpenHEVC/openHEVC: HEVC decoder. dirección:https://github.
com/OpenHEVC/openHEVC(visitado 06-05-2019).
[42] J. Postel y J. Reynolds, «File Transfer Protocol», dirección: https : / / tools .
ietf.org/html/rfc959.
[43] BBC, Home - BBC News. dirección: https : / / www . bbc . com / news (visitado 14-05-2019).
[44] NVIDIA, TX2 support openmp - NVIDIA Developer Forums. dirección: https : / / devtalk . nvidia . com / default / topic / 1028763 / jetson - tx2 / tx2 -
Apéndice A
Código fuente hevc_kernel.cu
En este apéndice se muestra el código fuente de loskernelsdonde se realizan las operaciones de filtrado para cada una de las componentes de la imagen. Este código fuente es una porción del código del ficherohevc_kernel.cu.
A.1.
Código fuente de los kernels
1 2 _ _ d e v i c e _ _ i n l i n e a v _ c o n s t i n t a v _ c l i p _ c u d a (i n t a , i n t amin , i n t amax ) 3 { 4 i f ( a < amin ) r e t u r n amin ; 5 e l s e i f ( a > amax ) r e t u r n amax ; 6 e l s e r e t u r n a ; 7 } 8 9 _ _ d e v i c e _ _ s t a t i c a v _ a l w a y s _ i n l i n e a v _ c o n s t u i n t 8 _ t a v _ c l i p _ p i x e l _ c u d a ( i n t a ) 10 { 11 i f ( a &(~0 xFF ) ) r e t u r n (−a ) > >31; 12 e l s e r e t u r n a ; 13 } 14 15 # d e f i n e P3 p i x [−4 ∗ x s t r i d e ] 16 # d e f i n e P2 p i x [−3 ∗ x s t r i d e ] 17 # d e f i n e P1 p i x [−2 ∗ x s t r i d e ] 18 # d e f i n e P0 p i x [−1 ∗ x s t r i d e ] 19 # d e f i n e Q0 p i x [ 0 ∗ x s t r i d e ] 20 # d e f i n e Q1 p i x [ 1 ∗ x s t r i d e ] 21 # d e f i n e Q2 p i x [ 2 ∗ x s t r i d e ] 22 # d e f i n e Q3 p i x [ 3 ∗ x s t r i d e ] 23 24 / / l i n e t h r e e . u s e d o n l y f o r d e b l o c k i n g d e c i s i o n 25 # d e f i n e TP3 p i x [−4 ∗ x s t r i d e + 3 ∗ y s t r i d e ] 26 # d e f i n e TP2 p i x [−3 ∗ x s t r i d e + 3 ∗ y s t r i d e ] 63
64 APÉNDICE A. CÓDIGO FUENTE HEVC_KERNEL.CU