You are on page 1of 2

Conceptos bsicos sobre Opencl

OpenCL (Open Computing Language, en espaol lenguaje de computacin abierto) es un estndar


de programacin para propsitos generales en sistemas heterogneos, llmese heterogneo a sistemas
computaciones que constan de distintos tipos de arquitecturas tales como procesadores Intel o,AMD,
procesadores de tarjetas grficas, FPGA's . Consta de una interfaz de programacin de aplicaciones y
de un lenguaje de programacin y esta est basado en lenguaje C, la finalidad de OpenCL es tener un
lenguaje comn entre los distintos dispositivos que pueden tener arquitecturas y formas de
programacin diferentes entre si y darle as una posibilidad de comunicacin entre ellos, sin tener que
saber mucho acerca del dispositivo como tal. Apple cre la especificacin original y fue desarrollada en
conjunto con AMD, IBM, Intel y NVIDIA. Apple la propuso al Grupo Khronos para convertirla en un
estndar abierto y libre de derechos.
Una de las principales ventajas de OpenCL es que permite paralelismo a nivel de datos, con lo cual una
simple instruccin puede ser ejecutada a muchos datos de manera simultanea, si no se esta
familiarizado con la programacin en paralelo de computadores y la programacin tradicional una
forma de ver esto es imaginare los siguiente:
Se quiere realizar un calculo matemtico que consiste en sumar 1000 parejas de nmeros, el resultado
seria 1000 nmeros con la suma de las parejas de estos nmeros, primero le damos la tarea a un
matemtico experto muy hbil en clculos, el sumaria cada pareja de numero y copiara el resultado ,
luego le damos a la misma tarea a 200 personas personas que tienen una habilidad promedio para las
matemticas regular , quien terminara primero?
Aunque el experto matemtico fuera mas rpido que cualquier de las dems 200 personas en un solo
calculo, tiene que hacer 1000 sumas y escribir el resultado, en cambio las 200 personas solo tiene que
realizar 5 sumas y escribir su resultado que se hara en forma simultanea o paralela.
El experto matemtico hbil seria equivalente a tener un gran procesador mono ncleo, capaz de hacer
clculos muy rpido pero de manera secuencial, las 200 personas serian pequeos procesadores que no
tienen tanto poder de calculo pero trabajan de manera simultanea. Si lo desean poden visitar el siguinte
enlace http://www.youtube.com/watch?v=fKK933KK6Gg
El anterior prrafo pone en evidencia las ventajas de poder programar con cierto nivel de paralelismo y
una de las mejores formas de poder realizar eso consiste en la utilizacin de tarjetas grficas (GPU
graphics processing unit ); aunque estas fueron diseadas mas que todo para videojuegos y
procesamiento de vdeos o imgenes, la arquitectura de las tarjetas de vdeo generalmente cuentan con
muchos procesadores (80, 200, 1000 o mas), cada uno de ellos es pequeo y no tiene tanto poder de
calculo, pero al trabajar juntos como en el ejemplo anterior pueden obtener en muchas ocasiones
ventaja sobre otro tipo de procesadores mas grandes en poder pero no tan numerosos.
OpenCL al trabajar en sistemas heterogneos es capaz de trabajar sobre las GPU's al igual que
procesadores tradicionales de los computadores, el cual seria complicado de hacer al no tener las
herramientas adecuadas o al no saber como es el funcionamiento de una especifica tarjeta o
configuracin. Aunque hay entornos tales como CUDA que permiten hacer los mismo sobre las tarjetas
de vdeo, CUDA esta restringido solo a tarjetas de la marca NVIDIA, OpenCL puede ejecutarse en

cualquier tipo que sea compatible.


Otra ventaja de OpenCL es que provee de nos tipos especiales de datos con los cuales puede pasar
estos datos a travs de diferentes dispositivos que muy a menudo tienen tipos de datos diferentes y
poder realizar operaciones con ellos y esto nos lleva tambin a su portabilidad de cdigo pues no se
necesita generar un nuevo cdigo para trabajar en diferentes arquitecturas tales como AMD o Intel,
NVIDIA o ATI, Linux, Windows o MACOS , sino que el mismo cdigo sirve en todas.
Para la instalacin de OpenCL es necesario primero comprobar que el hardware es compatible con este,
por lo general las tarjetas de vdeo AMD ATI o Nvidia desde hace aos ya son compatibles, las tarjetas
de vdeo Intel solo en las nuevas versiones. Cada fabricante da un SDK (software development kit) para
sus dispositivos y los driver necesarios para este.
Por ejemplo para AMD ATI tenemos el AMD APP (accelerated parallel processing) SDK y los driver
son proporcionados en la misma pagina de AMD
En OpenCL los procesos computacionales son llamados devices (dispositivos). Un device puede tener
uno o mas unidades de computo. Los programas que corren en paralelo en estos device se llaman
kernels, y su invocacin es llamada work item y da una identificacin (ID) al trabajo, las Ids son
organizadas den una o 3 dimensiones llamadas N-D range.
Un kernel es esencialmente una funcin escrita en OpenCL que permite ser compilada para ser
ejecutada en uno de los devices que soporta OpenCL, los kernels son puestos en cola por la ejecucin
de la aplicacin escrita en C o C++. El kernel debe ser compilado separadamente para ser configurado
para el device donde va a correr.
Como se a visto OpenCL es una gran herramienta para el desarrollo de aplicaciones que necesiten
correr den varios tipos de dispositivos y provee un medio para aumentar la rapidez de ejecucin de las
aplicaciones tan til en mucho campos como es el caso de la computacin cientfica