Kain, en Oct 1 2009, 09:01 PM, dijo:
Yo tenía entendido (por compañeros que ya empiezan a trabajar CUDA) que no era necesario empezar un nuevo lenguaje de programación, si no simplemente agregar las librerías necesarias y estas se encargarían de derivar la carga a la GPU con los mismos lenguages Java o C que ya tenías.
Esperando tu guía

Disculpen me referi mal, CUDA es un API que con ayuda de otro lenguaje en este caso C se puede ejecutar los programas dentro de un GPU.
Pero para hacer esto se debe "adaptar" este codigo para que lo ejecute "CUDA".
Lo que yo entendi segun la informacion de Fermi es que se podra correr el codigo C directamente, es decir sin necesidad de modificarlo. Me gustaria que aclarara eso bien Nvidia pero si eso es correcto entonces es por lo que estoy emocionado, y me lo hace pensar el hecho que la nueva arquitectura que esta manejando.
Un ejemplo de CUDA es el codigo que multiplica matrices. En ese caso se trata del codigo "HOST", si no saben a que me refiero vean abajo el resumen. Como pueden observar hay nuevas instrucciones obviamente, de las cuales tendremos que aprender como se programan, el uso de la memoria, etc, a eso me referia con nuevo lenguaje. En este caso es un codigo muy simple, ya algo mas avanzado se necesitan mas instrucciones y nuevos metodos.
Al parecer no puedo mostrar el ejemplo en webs, pero si quieres verlo.... Si tienes una tarjeta Nvidia baja el SDK de CUDA y busca los archivos de Multiplicacion de Matriz.
Aqui les pongo un poco sobre Cuda para los que no sabian.
Marca
La programación de GPU para aplicaciones de propósito general ha abierto un nuevo e interesante campo de desarrollo, una oportunidad para explotar soluciones basadas en un paralelismo de datos masivo sin necesidad de recurrir a clústeres de ordenadores o supercomputadores. En este sentido, CUDA representa una vía de entrada a este campo bastante cómoda para los programadores, al utilizarse un lenguaje como C y no forzar el uso de un lenguaje ensamblador específico.
Qué es CUDA?
La mayoría de los lenguajes de programación no cuentan con estructuras nativas que faciliten la paralelización de procesos. Es cierto que existen APIs y bibliotecas de funciones que facilitan la programación paralela, pero prácticamente ninguna está pensada para ejecutar el código explotando una GPU.
En la mayoría de los casos, lo único que hacen es iniciar varios hilos de ejecución dejando en manos del sistema operativo el reparto de tiempo de proceso entre las unidades con que cuente la CPU. Para trasladar la aplicación a otro tipo de procesador, así como para ampliar o reducir el número de hilos en ejecución, es corriente tener que alterar o rescribir el código fuente.
La solución que ofrece CUDA (Compute Unified Device Architecture) es más flexible, potente y se basa en estándares existentes. Los programas se escriben en lenguaje C, lo que facilita el acceso a un grupo mayor de programadores.
Estructura de una aplicación CUDA
El código de un programa escrito para CUDA siempre estará compuesto de dos partes: una cuya ejecución quedará en manos de la CPU y otra que se ejecutará en la GPU. Al código de la primera parte se le denomina código para el host y al de la segunda código para el dispositivo.
Al ser procesado por el compilador nvcc, el programa generará código objeto para la GPU y código fuente u objeto para la CPU. El primero se denomina cubin, mientras que el segundo será procesado por un compilador de C/C++ corriente, enlazando el código cubin como si de un recurso se tratase.
La finalidad del código host es iniciar la aplicación, transfiriendo el código cubin a la GPU, reservando la memoria necesaria en el dispositivo y llevando a la GPU los datos de partida con los que se va a trabajar. Esta parte del código puede escribirse en C o en C++, lo que permite aprovechar el paradigma de orientación a objetos.
El código a ejecutar en el dispositivo debe seguir estrictamente la sintaxis de C, no contemplándose extensiones de C++. Normalmente, se estructurará en funciones llamadas kernels, cuyas sentencias se ejecutarán en paralelo, según la configuración hardware del dispositivo final en el que se ponga en funcionamiento la aplicación.
Lo que hace el entorno de ejecución de CUDA, a grandes rasgos, es aprovechar el conocido como paralelismo de datos, consistente en dividir la información de entrada, por ejemplo una gran matriz de valores, en tantos bloques como núcleos de procesamiento existan en la GPU. Cada núcleo ejecuta el mismo código, pero recibe unos parámetros que le permiten saber la parte de los datos sobre los que ha de trabajar.
En una CPU moderna, como los Athlon Phenom o Core i7, es posible dividir los datos de entrada en cuatro o seis partes, pero sin ninguna garantía de que se procesarán en paralelo, salvo que se programe explícitamente el reparto trabajando a bajo nivel.
En una GPU y usando CUDA, por el contrario, esos datos se dividirán en bloques más pequeños, al existir 120, 240 o más núcleos de procesamiento, garantizándose la ejecución en paralelo si necesidad de recurrir a la programación en ensamblador.
SALUDOS!