Buscar este blog

viernes, 30 de diciembre de 2011

CUDA vs OpenCL. ¿Cual es mejor?

A la hora de seleccionar una plataforma u otra, deberemos tener en mente qué es exactamente lo que queremos implementar y qué mejoras deseamos obtener.

Por un lado la disponibilidad de plataformas puede ser el único indicador para realizar la elección: CUDA solo está disponible para la arquitectura de nVidia. Así que, esta cuestión es la más importante.

Si puedes hacer una elección entre ambos, la siguiente cuestión es el objetivo de la paralelización, casi siempre suele ser el incremento del speedUp con respecto a la versión serie, o de CPU, si este es el caso, considera utilizar CUDA ya que es más eficiente tanto a la hora de compilar, obteniendo un código mejorado y optimizado, como a la hora de gestionar en tiempo de ejecución transferencias de memoria, estas dos cuestiones conducen a un comportamiento mejor con respecto a su código homólogo en OpenCL.

Puedes ampliar información a este respecto en este paper, en este otro estudio también se expone la mejora en la utilización de CUDA frente a OpenCL.

Un aspecto a destacar sobre OpenCL es que se trataría de un lenguaje portable, válido para cualquier arquitectura, si has leído los enlaces anteriores te habrás dado cuenta que no es oro todo lo que reluce. Desafortunadamente, es necesario realizar ciertos ajustes en el código cuando deseamos cambiar de plataforma, pero no son muy grandes, esto se debe a la capa de plataforma, que es la parte específica que gestiona el interface con cada arquitectura.

Si aceptas mi consejo, utiliza CUDA para mejorar el rendimiento y aplicaciones para la vida real, y mantén OpenCL cerca de ti, trata de experimentar y portar a este lenguaje tus desarrollos, algún día OpenCL será el estandar, aunque para ese entonces llegarán otros gigantes imponiendo su criterio. El grupo Khronos ya sabe de estos casos: ¿OpenGL?

Si el rendimiento no lo es todo, podrías directamente utilizar OpenCL, sobre todo si no cuentas con plataformas de nVidia, aunque también están disponibles las plataformas específicas de amd: su famoso ATI Stream o APP SDK

Espero que esto te ayude a tomar una decisión, cualquier camino que tomes seguro que te conducirá al éxito.  Hasta el próximo post.

No hay comentarios:

Publicar un comentario