pollastre
Madmaxista
- Desde
- 18 Ene 2010
- Mensajes
- 5.407
- Reputación
- 8.200
Been there, done that... llevo cosa de año y medio con varias partes del código portadas a GPGPU, pero ese asunto no es tan trivial ni mucho menos.
Para empezar, la programación GPGPU es... cómo decirlo... peculiar. Desde mis tiempos de assembler a mediados de los 80 no recordaba una cosa tan cerca del metal como openCL. A su lado, el ANSI C parece Visual Basic (con perdón).
Y para continuar, no todo se puede portar a GPGPU; únicamente los algoritmos que se pueden implementar mediante el MPA (paradigma de aplicación masivamente paralela) obtendrán beneficios tangibles de esta conversión.
Y eso si no transfieres datos entre la GPU y la RAM con demasiada frecuencia, porque esas transferencias se comen la velocidad que alcanza el paralelismo. Y de evitar los condicionales y los branch porque penalizan el rendimiento, ni hablo ya....
En fin, que GPGPU puede ser espectacular, pero en un marco muy reducido y con todo a su favor. No es ni mucho menos una solución generalista, aplicable a todos los casos.
Y sucede que ese algoritmo en cuestión, pues como que paraleliza de pandero... lo he dividido en cuatro threads CPU, y ya no escala más a partir de ahí.
Para empezar, la programación GPGPU es... cómo decirlo... peculiar. Desde mis tiempos de assembler a mediados de los 80 no recordaba una cosa tan cerca del metal como openCL. A su lado, el ANSI C parece Visual Basic (con perdón).
Y para continuar, no todo se puede portar a GPGPU; únicamente los algoritmos que se pueden implementar mediante el MPA (paradigma de aplicación masivamente paralela) obtendrán beneficios tangibles de esta conversión.
Y eso si no transfieres datos entre la GPU y la RAM con demasiada frecuencia, porque esas transferencias se comen la velocidad que alcanza el paralelismo. Y de evitar los condicionales y los branch porque penalizan el rendimiento, ni hablo ya....
En fin, que GPGPU puede ser espectacular, pero en un marco muy reducido y con todo a su favor. No es ni mucho menos una solución generalista, aplicable a todos los casos.
Y sucede que ese algoritmo en cuestión, pues como que paraleliza de pandero... lo he dividido en cuatro threads CPU, y ya no escala más a partir de ahí.
Pero pq no programas lo que estes haciendo con GPUS de las graficas? Tienes los SDKs tanto de NVIDIA como de ATI para cada una de las graficas que poseas. El poder de calculo es enorme y el tiempo supongo que se te acortaria bastante.