Open Computing Language es un tandem formado por un lenguaje de programación y una API (Application Programming Interface), que están basados en el paralelismo a nivel de datos y de tareas, cuya finalidad es distribuir las cargas de trabajo entre la CPU y la GPU. What the fuck was all that shit????
Para los cuates CPU es Central Processing Unit (no mi estimado n00b, CPU no es la cajota donde metes los cds que está al lado de tu monitor) y GPU es Graphics Processing Unit; pero ya fue suficiente verborrea técnica, vamos con un poco de historia. A finales de la decada de los 80 y principios de los 90 salian al mercado los primeros juegos para computadora, los cuales debido a las limitantes de hardware no eran muy vistosos que digamos (aun asi, nos tenian pegados a la computadora por horas), ¿quien no recuerda Space Invaders o el primer Need For Speed?. Pronto, los desarrolladores quisieron incluir mucho más realismo a sus creaciones y el procesador por si solo no alcanzaba para procesar (valga la expresion) tantos calculos necesarios para el renderizado de poligonos y texturas en la pantalla, lo cual ha llevado a crear juegos tan exigentes de hardware como los que hay en la actualidad.
De esta manera nacieron las tarjetas gráficas o tarjetas de video, como un ayudante de la CPU, la cual basicamente se encargaria de realizar los calculos relativos a las aplicaciones tridimensionales, librando a la CPU de estas tareas y ocupandolo en el procesamiento del resto de actividades, tales como gestionar el teclado, mover el mouse, atender los servicios/daemons del sistema operativo, etc. En la actualidad la labor de la GPU no ha cambiado tanto desde entonces, si no juegas mucho o editas video muy seguido, probablemente tu GPU está siendo desperdiciada, si acaso renderizando las transaparencias de la interfaz AERO o Aqua o los efectos de Compiz Fusion; pero en general no realiza mucho trabajo. Todo esto hasta ahora.
OpenCL presenta una tecnologia bastante interesante la cual en pocas palabras intenta hacer que la GPU tenga poco tiempo de ocio y no sea utilizada solamente en aplicaciones 3D. Es decir, cuando no se este jugando (por ejemplo) y estes realizando tareas ofimaticas la idea es que la GPU ayude al procesador y entre los 2 realicen el procesamiento de manera paralela, agilizando drásticamente el desempeño del sistema. Si tomamos en cuenta el poder de calculo de una GPU actual, de un madral de FLOPS (Floating Point Operations Per Second), aunado al desempeño de un procesador multinucleo, en teoria el sistema debe andar pero en chinga.
Nuevamente el problema actual es que las aplicaciones deben estar programadas para soportar este tipo de procesamiento (más informacion sobre computo paralelo en el proximo articulo de esta serie), y para ello Apple ha incluido en Snow Leopard la API que mencionaba. Su intención es que no todo el código de las aplicaciones tenga que reescribirse sino solamente una parte, esto con el fin de que el sistema operativo pueda decidir qué segmento de codigo se ejecuta en la CPU y qué segmento en la GPU.
OpenCL es un estandar abierto para programación en paralelo muy interesante. Esperemos que pronto los desarrolladores migren sus aplicaciones a este paradigma y finalmente se puedan exprimir los componentes de hardware como se debe.
0 comentarios:
Publicar un comentario