Incognitosis random header image

GPGPU, una idea alucinante [actualizado]

9 de Octubre de 2008 , a las 14:59 · 18 comentarios ·

La técnica GPGPU (General Purpose computing on Graphics Processing Units) lleva muy poco tiempo en el mercado, y aunque su despegue es aún muy lento (y no acabo de ver porqué) parece evidente que está destinada a convertirse en todo un éxito. Y se lo merece. Hace mucho ya que se sabe que la potencia de los procesadores gráficos es muy superior a la de los procesadores de propósito general. Así, las GPUs de las nuevas ATI Radeon HD 4870 o las NVIDIA GTX 280 disponen de micros que dejan a la altura del betún a cualquier Intel Core Quad Extreme, y no digamos ya a micros dual-core modestitos.

Esta diferencia en potencia bruta era conocida, pero no aprovechable en la práctica: la GPU, para gráficos y listo, era el lema. Sin embargo, NVIDIA comenzó a poner en práctica la idea y saltó a la palestra con CUDA, un conjunto de herramientas de programación que permiten “adaptar” código de aplicaciones convencionales para que estas se puedan ejecutar en una GPU. AMD/ATI está tratando de hacer lo propio con su “Close To Metal“, mucho menos evolucionado y que está acompañado de desarrollos más prometedores, entre los que destaca sobre todos OpenCL, en el que Apple ha tenido mucho que decir.

Sea como fuere, la idea del procesamiento GPGPU es tan sencilla como increíble: poder utilizar la dantesca potencia bruta de las GPUs para procesar todo tipo de tareas convencionales, y no sólo juegos. Los primeros desarrollos CUDA ya demuestran esta potencia, y yo he probado recientemente uno, Badaboom,(este es el enlace de descarga directo de NVIDIA, con el autoinstalable de 7,90 MB) un conversor de vídeo muy limitado en opciones pero que demuestra de lo que estamos hablando.

Con este programa es posible convertir una película de DVD a formatos MP4 (perfectos para mi iPhone) en tiempos asombrosamente reducidos. Yo hice la prueba con la película “Camino a la Perdición“, que dura casi dos horas. Cogí el DVD, lo pasé a disco duro con DVDShrink, y luego cargué ese “DVD en disco” en Badaboom, que es una de las opciones recomendables para esta tarea. Después de elegir el formato y algún parámetro más, ¿sabéis lo que tardó en convertir la película gracias a mi GeForce 9600GT?

20 minutos.

¡20 minutos! Con suerte, el mismo proceso realizado por la CPU (no lo he hecho en mi Intel Core 2 Duo E8400, pero esa era la idea) llevaría, más o menos, 120 minutos, ya que la tasa de conversión de estos micros es casi casi la de “tiempo real”, es decir, 25 fps, que equivalen a convertir la película en un tiempo idéntico al que dura ese film. Si con Badaboom podemos reducir ese tiempo 6 veces y la herramienta aún no está del todo pulida, no quiero ni imaginar lo que nos depara el futuro.

Actualización (14/10/2008): Manuel ha hecho la comparativa completa en su blog y ha llegado a la misma conclusión que yo, aunque en realidad la diferencia no es tanta como yo pensaba: mientras que la codificación de la película Iron Man de DVD a H.264 ha tardado 25 minutos con BadaBoom, con su Core 2 Duo 6300 le ha tardado 46 minutos usando el programa AVS Video Converter 6. Aún así, la diferencia es importante, ¿no creéis?

Lo cierto es que Badaboom no es lo que se dice una herramienta demasiado completa: no da soporte a formatos muy importantes, y las posibilidades de personalización de la compresión son casi nulas. De hecho, también lo indican así en AnadTech (son tan listos como yo), por lo que si la cosa avanza pronto deberíamos tener un software mucho más pulido y potente. Y aunque así no fuera, yo no me preocuparía demasiado: no creo que los desarrolladores tarden demasiado en darse cuenta de que sus aplicaciones pueden “volar” gracias al uso de la GPU.

Iros preparando, que la cosa promete.

Tags: Tecnología

Entradas relacionadas



  • Saludos, profesor Falken
  • Xbox Media Center Atlantis, impresionante
  • Twitter: R.I.P.
  • Linux en un disco USB externo




  • 18 respuestas por el momento ↓

    • 1 edge // 9 de Octubre de 2008 , a las 4:25 pm

      Tu idea es como la de muchos: creer que las GPU son muy superiores a las CPU. Siendo sinceros, sí son superiores, pero porque están optimizados.

      Si te fijas, verás que todo lo que sea instrucciones multimedia o cálculo intensivo (muy parecidos) vuelan literalmente, pero son peores en interrupciones (acceso a todo lo que es el hardware, coordinación…).

      Hace poco me preguntaron por qué no se hacían ordenadores sólo con “nvidias” o “atis” (porque leyeron cosas como esta). Te animo a un artículo en el que lo expliques.

    • 2 javipas // 9 de Octubre de 2008 , a las 5:40 pm

      Mira, hacía tiempo que no respondía en este plan, pero hoy no me corto. Ale.

      Las GPUs actuales dan patadas (patadones, más bien) a cualquier CPU. A cualquiera. La potencia bruta de estas soluciones ha sido demostrada ya por portales técnicos mucho más cualificados que mi blog. Las pruebas de los AnandTech, Tom’s Hardware, HardOCP, y un largo etcétera están disponibles por todos lados. No pienso dar enlaces. Googlea.

      Aparte de eso, no es que el código esté optimizado. Yo no utilizaría esa palabra: el código se “traslada” o “adapta” para que se pueda ejecutar en una GPU. De hecho, no hablaría nunca de optimización, ya que primero hay que compilar el programa en C (o más bien, una variación del mismo) para poder ejecutarlo en la GPU, de modo que el código no es nativo para la GPU, como sí ocurre con el uso de las librerías DirectX y OpenGL usadas en un juego puro y duro.

      De lo de que son peores en interrupciones no puedo discutírtelo porque sencillamente eso no tiene sentido. Nunca he dicho que la GPU reemplace al procesador. Es la CPU la que se tiene que comunicar con el resto de componentes (GPU incluida) y ocuparse de planificar, como siempre. Cualquiera que haya estudiado o leído algo de arquitectura de computadores sabrá de qué hablo.

      Y lo de hacer una máquina solo con NVIDIAs o ATIs no es ninguna tontería: NVIDIA dispone desde hace ya meses (quizá años) de Tesla, su solución HPC basada en gráficas (http://www.nvidia.com/object/tesla_computing_solutions.html). Así que de nuevo, por favor, si vamos a hablar por hablar, por lo menos comenta con un tono más humilde.

    • 3 nnarayann // 9 de Octubre de 2008 , a las 6:48 pm

      Jeje, nada más que decir. Sólo que la verdad nunca se me hubiera ocurrido que se podría usar una GPU para otra cosa que no fuera para lo que están hechas y ahora que leo esto suena bastante lógico.

      En este mundillo se tiende siempre a optimizar todo al máximo y a no desperdiciar recursos, y esta era una potencia que estaba “desaprovechada”, se podría decir, hasta ahora.

      Buen artículo!!.

    • 4 nnarayann // 9 de Octubre de 2008 , a las 6:53 pm

      Por cierto, aunque no venga mucho a cuento:

      http://www.xataka.com/2008/10/09-msi-wind-u120-con-conectividad-3g

      Una buena noticia que empiecen a integrar 3g. Lástima del precio, pero seguro que algún clon que otro cae por ahí ;)

      PD. Perdón por el inciso.

    • 5 Josechu // 9 de Octubre de 2008 , a las 10:19 pm

      Wenas… tengo una nvidia 8600GT, y no puedo utilizar el Badaboom… me dice que no tengo un sistema compatible CUDA… solo funciona con serie 9000 o que? Gracias

    • 6 gualfire // 10 de Octubre de 2008 , a las 8:49 am

      No os fiéis del Badaboom, está muy, muy verde. Yo tengo una geforce 8400M GS, que es compatible con CUDA (probado en linux). Pues he instalado en Vista dos versiones beta de badaboom y no logro que funcione. He probado como entradas DVD, “carpeta dvd”, y fichero, y en ninguno de los casos consige arrancar la codificación, el programa se queda sin responder y hay que forzar su cierre.

    • 7 edge // 10 de Octubre de 2008 , a las 10:56 am

      ¡La leche, y yo que comentaba justo con el propósito contrario!

      Perdón si te he ofendido, comentaba con el interés de que expusieses un artículo informal (es lo que me gusta de tu blog) con las ventajas e inconvenientes reales de ambas vertientes.

      Y lo de Tesla no lo conocía ni de oídas, la primera noticia que tengo es esta.

      Caray, espero que tu último artículo no venga por mi.

    • 8 javipas // 10 de Octubre de 2008 , a las 11:50 am

      edge, pues igual tuve un momento crítico ;), pero entendí el comentario de otro modo. Me quedo con la idea del arti para el futuro, perdona pues por mi respuesta cortante, todo aclarado :)

    • 9 Manuel // 10 de Octubre de 2008 , a las 11:51 am

      Las gráficas han dado un salto BRUTAL en los últimos años… aún recuerdo mi vieja S3 por PCI, a la que sustituí por una Asus con el Riva 128 en AGP… luego vino una Voodoo 4 (que aún funciona y tengo guardada), más tarde una Geforce 4 MX 440, una ATI 9600XT (que me vendieron como Pro y resultó ser superior… :D ), otra ATI 1950Pro (gran tarjetón que guardo como oro en paño) y por ultimo una NVidia 9600GT (la Asus Glaciator)…

      Y cuando me pongo a pensar en los juegos que ejecutaba en cada una, es para flipar con la evolución que han llevado a cabo…

      La idea de usar la GPU para algo más que los gráficos es sencillamente genial, y de hecho ya se empiezan a ver ejemplos en los que se usa una vieja gráfica para Físicas con Physx por su potencia aprovechable…

      Y ahora esto, usar la GPU para tareas del día a día en el PC… una forma de aprovechar mejor el HW que ya tenemos.

      Tan solo me queda una duda con tu ejemplo… cuando dices que pasaste la película a MP4, ¿a qué formato fue? ¿h.264? ¿DivX? ¿Xvid?…

      Lo digo porque me has despertado el gusanillo… :D … y como también tengo una 9600GT, estaba pensando en hacer yo también la comparativa entre este programa y pasar a DivX un DVD usando el DVDX en mi C2D 6300…

      Sobre que las GPUs den patadas a las CPUs… no lo voy a poner en duda, aunque como son arquitecturas distintas las comparativas no son fáciles. Estaría bien ver una comparativa del mismo sistema con CPU y con GPU… con tareas del día a día, por ver las diferencias…

      Un saludo. :)

    • 10 LC // 10 de Octubre de 2008 , a las 1:45 pm

      Voy a dar una de cal y otra de arena, intentando ser lo mas educado posible.

      Javipas, eres sabio, porque rectificar es de sabio y lo has hecho con Edge, felicidades.

      Pero creo que deberias de investigar un poco mas el tema de las gráficas. Yo si conocia, algo, lo de Tesla y te digo mas o menos como Edge, las gráficas tienen mucha potencia en calculo numérico con cierto tipo de números, no sabria decirte ahora si con enteros o con coma flotante, obviamente, si en un proceso se utilizan ese tipo de números pues la gráficas ganan. Supongo que te acordaras cuando a los procesadores centrales no hacian los calculos rapiditos y se les ponia un coprocesador matemático, en definitiva un hard especializado en cálculos, y obviamente, si se escribia un programa para usar el “copro”, pues volaba, comparado con la cpu principal, tambien puedes hacer programas aprovechando ciertos juegos de instrucciones de las cpu principales, aquello de las mmx, los sse o como se llamen, pero no se hace mucho, porque hay que empezar a preguntar al hard que tipo de instrucciones soporta, crear distinto código en función del juego de instrucciones especiales que usen, en fin, un follón.

      Por otra parte ten en cuenta que tu procesador central, cuando le dices que te pase la “peli” a mp4, esta haciendo bastante mas cosas aparte de esto, en el caso de la gráfica supongo que no hace solo lo de la peli pero casi.
      Cuando dicen que el código esta optimizado es cierto, tambien es verdad como tu lo dices, adaptado, si lo prefieres, pero es que esta adaptación es pensando en las especificadiones del hardware que tiene debajo, o sea, la gráfica y su especialización en cierto tipo de cálculos y su arquitectura. Probablemente esta adaptación sea a medias entre el programador y el compilador, a ti te parece C, vamos es C, pero el compilador (no creo que sea un interprete), hara virguerias para adaptarlo a código de la gráfica, o sea, que lo optimiza.

      En hard siempre se da la lucha entre especializacion y generalizacion, una máquina que se apoyó en la especializacion fue el Amiga y ahi lo tienes, muerto de asco, (te vendo mi Amiga 500), eso si, increible lo que hacia, llegaron los pc con su “cutre-hard” generalista y se lo comieron. En las consolas, la ps3 es un poco mas especializada y por tanto mas dificil de programar y la xbox 360 se la esta merendando con un hard mas general (PPC(+ o -) y grafica). Lo mismo paso, si no me equivoco, con la sega dreamcast y las consola de su generación, por eso te digo que siempre ocurre. Al final lo que ha pasado es que estas especialidades se integran en la cpu, y por lo tanto, pasa a generalizarse y se acabo el problema. En la actualidad no se que ocurrira por que el hard de las gráficas es tan potente que no se si volverá a pasar.

      Un saludo.

    • 11 roger // 10 de Octubre de 2008 , a las 3:07 pm

      Por ahí anda un programa que usa tarjetas Nvidia para acelerar la búsqueda de contraseñas. No tengo el enlace a mano, pero salió en kriptopolis. Lo que no me quedó claro es si usan cuda, pero los tipos logran incluso usar varias tarjetas en paralelo y dejan muy atrás a un Core Duo.

    • 12 JaviPas // 10 de Octubre de 2008 , a las 4:43 pm

      Roger, qué razón tienes, se me había olvidado ese dato. Lo he buscado y he recuperado el enlace:

      http://www.kriptopolis.org/gpu-rompe-passwords

      Una vez más, queda patente el poder de las GPUs en cálculo en bruto.

      Manuel: el formato de salida es h.264, efectiviwonder, así que dale y ya nos contarás :D

      LC: en primer lugar, la tarea de un compilador no es la de adaptar el código, sino simplemente, generar el código objeto, el ejecutable, así que si tú no le das el código ya mascado, chungo pelota. Por eso digo que los desarrolladores adaptan ese código, pero no sé si a eso yo le llamaría optimizar. No llega a tanto. Otpimizado sería totalmente programado por y para la GPU, es más, programado para ESA CPU en concreto con ciertas ventajas técnicas y quizá ciertas funciones sólo disponibles en ella. A eso le llamo yo optimizar. En cuanto a lo del Amiga, si fuera un 1200 hablábamos ;) pero gracias por la oferta. Qué gran máquina, y qué lástima cómo terminó, aunque no fue por su concepción especializada, sino por lo lamentablemente que gestionaron la plataforma la gente de Commodore y todos los que llegaron después.

    • 13 Chemahm // 10 de Octubre de 2008 , a las 7:47 pm

      Hola, creeis que seria factible sacar password WPA con el progrema “elcomsoft password recovery “, y varias GTX280 en SLI? Segun la pagina de elcomsoft con este software y usando las Nvidia se pueden sacar.

      ¿Algun documento o prueba de que esto es posible?, toy buscando pero no encuentro nada.

      Un saludo

    • 14 Manuel // 12 de Octubre de 2008 , a las 10:34 pm

      Pues haré la prueba, cuenta con ello… en cuanto me quite un marrón del curro.

      Sobre lo que comenta LC, efectivamente las arquitecturas son distintas… y las GPUs ganan en manejo de coma flotante por todas las unidades shader que montan. Por eso lo ideal sería un PC con CPU y otro con GPU y una buena tanda de test que pasarles… :D

      Sobre lo del Amiga… no estoy de acuerdo, más que por la especialización, yo creo que al Amiga se lo cargaron por el enfoque que le dieron. Del Amiga recuerdo que te lo vendían para ‘jugar’ (aunque pudiese hacer más), y del PC que te lo vendían para trabajar (más serio).

      Además, en el mundo PC empezó a haber un gran desarrollo… del 8088 pasamos al 8086, de ahí al 286 y un año o dos ya estábamos en el 386… y al poco los 486, que en comparación con los primeros PCs eran mucho más potentes.

      Si el Amiga se hubiese enfocado para más que juegos, buscando un uso profesional, y hubiese mejorado tanto su HW en tan poco tiempo, otro gallo le hubiese cantado…

    • 15 Manuel // 13 de Octubre de 2008 , a las 7:52 pm

      Lo prometido es deuda, y los resultados parecen confirmar lo que comentabas… :D

      http://javarealmachine.blogspot.com/2008/10/cuda-gpu-vs-cpu.html

    • 16 javipas // 14 de Octubre de 2008 , a las 9:42 am

      Manuel, genial tu comparativa, enhorabuena, la enlazo en el post para actualizarlo. La verdad es que la CPU tarda bastante menos de lo que pensaba, pero aún así, ahorras la mitad de tiempo. ¡Buen trabajo!

    • 17 Manuel // 14 de Octubre de 2008 , a las 10:46 am

      Gracias por el enlace Javi, en realidad el mérito es tuyo por la idea… :)

    • 18 javipas // 14 de Octubre de 2008 , a las 3:42 pm

      Nah, nah, te has currado las pruebas, así que ole con ole ;)

    Deja un comentario