INTRODUCCIÓN

\label{introduccion}

Las unidades de procesamiento gráfico (GPU) fueron originalmente pensadas y diseñadas para el procesamiento de gráficos en los juegos electrónicos. Sin embargo con el tiempo se ha decidio emplear estos procesadores para aligerar la carga de trabajo del procesador central en tareas como la emulación 3D de los videojuegos, el streaming en video llamadas y démas aplicaciones de video multimedia.

Por otra parte, muchos ingenieros y cientificos vieron en su momento el procesamiento paralelo y capacidad calculo disponible en este tipo de procesadores, lo cual termino por impulsar su incursión en el ámbito del computo y cálculo científico entre los años 2006 y 2007 \cite{Singer:2013:Online}. Hoy día, este tipo de procesadores permiten acelerar la ejecución de aplicaciones cientificas sobre las grandes infraestructuras de computo de alto rendimiento.\cite{Owens_2007}\cite{Brodtkorb_2013}.

Según \cite{Balle:2007:EOS:1791551.1791554}, los beneficos tras la incorporación de la tecnología GPU sobre estas plataformas, se ve claramente reflejada en las metricas de rendimiento de la lista Top500\cite{Top500:2016:Online}; en la cual se clasifican los 500 supercomputadores mas veloces del mundo (en terminos computacionales).

Por otra parte, la tecnologías GPU y coprocesadores trajo consigo nuevos modelos de programación paralela como CUDA, OpenCL, Pthreads, entre otros. por otra parte, la aparicion de un nuevo concepto en la computación conocido como GPGPU \cite{GPGPU:2016:Online}, que tiene como fundamento el aprovechamiento la tecnología GPU para la ejecución de aplicaciones de proposito general.\cite{Nickolls_2010}

CUDA y OpenCL, permiten el desarrollo de aplicaciones con alto grado de paralelismo de datos sobre unidades GPU. Adicionalmente las GPUs, son procesadores masivamente paralelos, que ofrecen un gran nivel de rendimiento para la ejecución de aplicaciones con estas caracteristicas, en comparación con la ejecución sobre unidades CPU.