Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Procesos en paralelo en la PC a través de CUDA

Las computadoras modernas tienen ahora procesadores que son muy poderosos. Muchos de ellos tienen más de un núcleo, lo cual quiere decir que pueden hacer...

cuda

Las computadoras modernas tienen ahora procesadores que son muy poderosos. Muchos de ellos tienen más de un núcleo, lo cual quiere decir que pueden hacer multiprocesos, es decir, ejecutar instrucciones de diferentes programas “al mismo tiempo”. De hecho, muchas tarjetas gráficas, como las Nvidia, tienen muchos núcleos gráficos, para acelerar los procesos de despliegue gráfico en la computadora.  Y que conste, hablamos de decenas de núcleos para hacer procesamiento gráfico en paralelo.

Con esto en mente a más de uno se le ha ocurrido hacer proceso en paralelo en la computadora. El problema es que un programa por sí mismo solamente puede exhibir paralelismo en algunas partes del programa. Por ejemplo, si estamos procesando una imagen, podemos hacer en paralelo el mismo proceso (como cuando queremos filtrar la imagen, por ejemplo) y así obtendremos el resultado más rápidamente. Sin embargo, para ello el lenguaje de aplicación debería soportar paralelismo y eso no se ve en general en las características de los lenguajes de programación.

La razón de esto es que hay una solución más eficiente y alternativa al problema planteado. En lugar de implementar el paralelismo en cada lenguaje de programación, lo que podemos hacer es hacer una biblioteca de funciones que permitan hacer el paralelismo en las funciones y procedimientos susceptibles de ello.

Una de las herramientas más populares para ellos es CUDA – Compute Unified Device Architecture (Arquitectura Unificada de Dispositivos de Cómputo), que hace referencia tanto a un compilador como a un conjunto de herramientas de desarrollo creadas por Nvidia, que permiten a los programadores codificar sus algoritmos y sacar provecho de los núcleos de las tarjetas gráficas. Y de hecho, gracias a una técnica llamada wrappers, se puede usar CUDA en Python, Fortran y Java, en lugar de usar necesariamente C/C++. Se plantea en un futuro agregar esta funcionalidad también a FORTRAN, OpenGL y Direct3D.

CUDA funciona en todas las tarjetas Nvidia de la serie G8X, incluyendo GeForce, Quadro, ION y la línea Tesla. De acuerdo a Nvidia, los programas desarrollados para la serie GeForce 8 también funcionarán sin modificaciones en todas las futuras tarjetas Nvidia, gracias a la compatibilidad binaria.

CUDA busca explotar las ventajas de las GPU frente a las CPU de propósito general utilizando el paralelismo que ofrecen sus múltiples núcleos, que permiten el lanzamiento de un altísimo número de hilos simultáneos (threads). Por ello, si una aplicación está diseñada utilizando numerosos hilos que realizan tareas independientes (que es lo que hacen las GPU al procesar gráficos, su tarea natural), una GPU podrá ofrecer un gran rendimiento en campos que podrían ir desde la biología computacional a la criptografía, entre otros ejemplo.

El primer SDK se publicó en febrero de 2007 en un principio para Windows, Linux, y más adelante en su versión 2.0 para Mac OS. Actualmente se ofrece para Windows XP/Vista/7, para Linux 32/64 bits y para Mac OS.

Así pues, una interesante opción paralelismo es CUDA. Hay OpenCL, otra posibilidad, la cual analizaremos en otro artículo.

Referenciasz:

CUDA

Comentarios