Las GPUs todavía son muy inflexibles, hace relativamente poco que pueden hacer "jumps", la comunicación entre memorias locales/buses es limitada, y el repertorio de instrucciones es muy pobre (pues es para algo muy concreto). El siguiente paso intuyo que será similar a lo que hizo IBM/Toshiba/Sony con el Cell [wikipedia.org], inspirado en el Emotion Engine [wikipedia.org] que incorporó la Playstation 2 en 1999 (cualquiera que haya programado los dos sabrá a lo que me refiero).
Juntar 8 GPUs, pongamos que puedan manejar 500 hilos de ejecución sencillos en memorias locales, es impresionante, pero su ámbito de aplicación es limitado. Para hacerse una idea de la complejidad de hacer posible el propósito general con tantas unidades funcionales, aun con 50 buses circulares, supondría gastar la mitad del área del chip sólo en interconexionado... aunque quizá sea viable a medio-largo plazo.
Las GPUs todavía son muy inflexibles, hace relativamente poco que pueden hacer "jumps", la comunicación entre memorias locales/buses es limitada, y el repertorio de instrucciones es muy pobre (pues es para algo muy concreto).
No tengo ni idea de lo que me estás hablando, pero supongo que te estás refiriendo a una generación anterior de tarjetas gráficas. Las últimas (las que tienen el chip G80 y se programan con CUDA) puedes implementar cualquier código por complicado que sea. De facto, CUDA es un extensión del lenguaje C y sirve para compilar tanto la CPU como la GPU.
Salvando el diseñar un código que se ajuste lo más posible a la arquitectura de las GPUs, lo realmente complicado es diseñar un código para que se ejecute en paralelo en varios miles de threads.
La única limitación es que todavía funcionan con precisión simple, pero ya está anunciado que la próxima generación tendrá precisión doble y además seguramente traerá alguna que otra sorpresa.
10000 hilos concurrentes a 100 GB/s entre hilo, da 1000 TB/s -yo no me lo creo-, no está mal, chaval, que diría Charly Glamour:-)
Respecto a los saltos en el Cell, penalizan más o menos como cualquier CPU que no ejecute fuera de orden, se soluciona a base de "loop unrolling" y buena voluntad;-)
El Cell, por mi experiencia, está a años luz en flexibilidad de cualquier GPU actual (cálculo, número de registros por unidad vectorial, memoria local, comunicación entre unidades vectoriales, transferencias por DMA en segundo plano, etc.). Eso sí, me encantaría que las GPUs fuesen más flexibles, palabra.
Se va acercando, pero todavía, no.
(Puntos:2)( http://www.voluntariado.net/ | Última bitácora: Domingo, 10 Junio de 2012, 21:48h )
Juntar 8 GPUs, pongamos que puedan manejar 500 hilos de ejecución sencillos en memorias locales, es impresionante, pero su ámbito de aplicación es limitado. Para hacerse una idea de la complejidad de hacer posible el propósito general con tantas unidades funcionales, aun con 50 buses circulares, supondría gastar la mitad del área del chip sólo en interconexionado... aunque quizá sea viable a medio-largo plazo.
Re:Se va acercando, pero todavía, no.
(Puntos:1)Salvando el diseñar un código que se ajuste lo más posible a la arquitectura de las GPUs, lo realmente complicado es diseñar un código para que se ejecute en paralelo en varios miles de threads.
La única limitación es que todavía funcionan con precisión simple, pero ya está anunciado que la próxima generación tendrá precisión doble y además seguramente traerá alguna que otra sorpresa.
Re:Se va acercando, pero todavía, no.
(Puntos:2)( http://www.voluntariado.net/ | Última bitácora: Domingo, 10 Junio de 2012, 21:48h )
Respecto a los saltos en el Cell, penalizan más o menos como cualquier CPU que no ejecute fuera de orden, se soluciona a base de "loop unrolling" y buena voluntad
El Cell, por mi experiencia, está a años luz en flexibilidad de cualquier GPU actual (cálculo, número de registros por unidad vectorial, memoria local, comunicación entre unidades vectoriales, transferencias por DMA en segundo plano, etc.). Eso sí, me encantaría que las GPUs fuesen más flexibles, palabra.